- TCP는 Socket 과 ServerSocket를 사용하여 데이터를 주고 받습니다.
- Socket 은 목적지 정보를 전송 수신하는 역할을 합니다.
- ServerSocket 은 포트 번호와 Client와 연결되는 서버의 최대 연결 수를 지정 할 수 있습니다.
- 신뢰성(데이타 손실이 없습니다.)
- 양뱡향 통신 가능
- 바이트 스트림 지원
- UDP에 비해 다소 느릴 수 있음.
Client 예제
/* * 클라이언트에서 작업할 내용 * 1)소켓 객체 생성(ip, port지정) ==> 해당 ip에 접속하여 정상적인 접속이 완료되면 객체가 생성 * 2)I.O 스트림 열기 * 3)자료 송/수신 * 4)소켓 닫기 * */ public class TestClient { static Socket s; public TestClient() throws IOException { s = new Socket("127.0.0.1", 9999); // 서버주소 BufferedReader reader = new BufferedReader(new InputStreamReader( s.getInputStream())); PrintWriter writer = new PrintWriter(s.getOutputStream()); String msg = "Strat!!"; String rMsg = null; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); while (!msg.equals("bye")) { System.out.print("전송입력 : "); msg = in.readLine(); writer.print(msg); writer.flush(); System.out.println("가는 중..."); rMsg = reader.readLine(); System.out.print("받은 메세지:" + rMsg); } } public static void main(String[] args) throws IOException { try { new TestClient(); } catch (IOException e) { e.printStackTrace(); } finally { try { s.close(); } catch (IOException e) { e.printStackTrace(); } } } }
- 주소와 포트번호와 함께 Socket을 생성 합니다.
- 바이트 스트림을 지원 하므로 바이트 형태로 데이타를 주고 받습니다.
- in.readLine()으로 입력 받은 문자를 writer.print(msg)을 사용하여 Server에 보내고 writer.flush() 시켜줍니다.
- rMsg = reader.readLine()은 Server에서 받은 메세지를 한줄씩 읽습니다.
- BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream())) 와 PrintWriter writer = new PrintWriter(s.getOutputStream())에서 전송한 데이타와 수신한 데이터를 알 수 있습니다.
Server 예제
/* * 서버에서 수행하는 일 * 1)서버소켓 객체 생성 * 2)클라이언트 접속 대기 * 3)자료 송/수신 * 4)소켓 닫기 */ public class TestServer { static ServerSocket ss = null; static Socket s = null; public TestServer() throws IOException { ss = new ServerSocket(); s = new Socket(); ss = new ServerSocket(9999); System.out.println("클라이언트 접속 대기 중..."); s = ss.accept(); System.out.println("클라이언트 접속!!"); BufferedReader reader = new BufferedReader(new InputStreamReader( s.getInputStream())); PrintWriter write = new PrintWriter(s.getOutputStream()); String msg = "Start!"; while (!msg.equals("bye")) { System.out.println("받는 중..."); msg = reader.readLine(); System.out.println("수신데이타 : " + msg); write.println(msg); write.flush(); } } public static void main(String[] args) { try { new TestServer(); } catch (IOException e) { e.printStackTrace(); } finally { try { ss.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } } } }
- ServerSocket으로 포트 번호를 맞춰 줍니다.
- s = ss.accept() 부분이 Client가 접속하기를 기다리는 부분입니다. 서버는 클라이언트가 접속하기 전까지 대기하고있는 상태입니다.
- msg = reader.readLine() 위에 스트림으로 받은 데이터를 다시 Client로 전송하는 부분입니다.
TCP를 설명하기 위해 간단히 작성된 소스입니다. 요약하자면 Client에서 Socket 를 사용하여 목적지(서버)의 주소와 포트번호를 설정하여 보내면 서버에서는 ServerSocket 에서 포트를 맞추고 accept()에서 접속하기를 기달리고 있다가 스트림을 이용하여 다시 전송하는 코드입니다.
관련글
관련글
댓글 없음:
댓글 쓰기