반응형

 

소켓

 

: 데이터를 내보내거나 받기 위한 창구 역할을 한다.

= 두 호스트 간에 통신을 하기 위한 양 끝단(EndPoint)

 

소켓에는 TCPUDP 종류가 있다.

 

 

 

OSI와 TCP/IP

 

 

OSI 7계층, TCP/IP계층

 

 

  • OSI 7계층

1계층 - 물리 계층(Physical Layer) : 전기적 신호를 전송

2계층 - 데이터 링크 계층(Data Link Layer) : 물리적인 연결로 정보 전송

3계층 - 네트워크 계층(Network Layer) : 중계 방식 규정

4계층 - 전송 계층(Transport Layer) : 종단 간의 신뢰성 있고 정확한 데이터 전송

5계층 - 세션 계층(Session Layer) : 통신장치 간의 동기화

6계층 - 표현 계층(Presentation Layer) : 제어 구조 제공

7계층 - 응용 계층(Application Layer) : 사용자와 밀접, 인터페이스 역할

 

 

  • TCP/IP 4계층

1계층 - 네트워크 액세스 계층(Network Access Layer) : OSI 7계층의 물리계층과 데이터 링크 계층에 해당

2계층 - 인터넷 계층(Internet Layer) : OSI 7계층의 네트워크 계층에 해당

3계층 - 전송 계층(Transport Layer) : OSI 7계층의 전송 계층에 해당
4계층 - 응용 계층(Application Layer) : OSI 7계층의 세션 계층, 표현 계층, 응용 계층에 해당

 

 

 

TCP와 UDP 차이

 

  TCP UDP
신뢰성 높음 낮음
속도 낮음 높음
전송 방법 패킷이 순서대로 전달됨 패킷이 스트레이트로 전달됨
오류 감지 및 수정 있음 없음
혼잡도 제어 있음 없음
전송 인정 있음 오직 체크섬만

 

 

 

소켓 통신

 

 

  • 서버
package kr.or.ddit.tcp;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpSocketServer {
	public static void main(String[] args) throws IOException {
		// 소켓이란? 두 호스트 간에 통신을 하기 위한 양 끝단(EndPoint)을 말한다.
		// TCP 소켓 통신을 하기 위해 ServerSocket 객체 생성하기
		ServerSocket server = new ServerSocket(7777);
		System.out.println("서버가 소켓접속을 기다립니다....");
		
		// accept() 메서드는 클라이언트에서 접속 요청이 올 때까지 계속 기다  린다.
		// 연결 요청이 오면 Socket객체를 생성해서 클라이언트와의 통신에 사용한다.
		Socket socket = server.accept();
		
		// ----------------------------------------------------------
		// 이 이후는 클라이언트의 연결된 후의 작업을 진행하면 된다.
		
		System.out.println("접속한 클라이언트 정보 ");
		System.out.println("주소 : " + socket.getInetAddress());
		
		// 클라이언트에서 메시지 보내기
		DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
		dos.writeUTF("어서오세요... 반갑습니다...");
		
		System.out.println("클라이언트에 메시지를 보냈습니다.");
		
		dos.close();
		server.close(); // 서버 닫기
	}
}

 

 

  • 클라이언트
package kr.or.ddit.tcp;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpSocketClient {
	public static void main(String[] args) throws IOException{
		
		String serverIp = "127.0.0.1";
		// 자기 자신의 컴퓨터를 나타내는 방법
		// IP : 127.0.0.1
		// host name : localhost
		
		System.out.println(serverIp + " 서버에 접속 중입니다.");
		
		// 소켓을 생성해서 서버에 연결을 요청한다.
		Socket socket = new Socket(serverIp, 7777);
		
		// 연결이 되면 이 후 부분이 실행된다.
		System.out.println("서버와 연결 되었습니다.");
		
		// 서버에서 보내온 메시지 받기
		DataInputStream dis = new DataInputStream(socket.getInputStream());
		System.out.println("서버로부터 받은 메시지 : " + dis.readUTF());
		
		System.out.println("클라이언트 소켓 연결 종료.");
		
		dis.close();
		socket.close();
	}
}

 

 

 

=> 서버 실행 후 클라이언트 실행해야 함

결과 화면1-1

 

결과 화면1-2

 

 

반응형