08. TCP 프로그래밍 02. 에코 클라이언트/서버 프로그래밍

08. TCP 프로그래밍

1. 클라이언트의 접속 대기

서버쪽에서는 클라이언트의 접속을 기다리기위해 ServerSocket 객체의 accept() 메소드를 실행해서 대기하게 된다. 서버 쪽에서는 이 accept()메소드에서 멈추게 되는데 이를 블로킹 메소드라고 한다.

2. 클라이언트 접속

accept()로 대기중인 서버라면 클라이언트는 서버로 접속할 수 있다. 클라이언트에서 서버 정보를 담은 Socket만 생성하게 되면 내부적으로 알아서 접속이 일어난다. 성공적으로 Socket 객체가 생성되었다면, 서버의 accept() 메소드는 클라이언트에 대한 Socket 객체를 반환한다.

Socket socket = new Socket("192.168.0.1", 10001);

서버 측 Accept() Socket socket = server.accept();

3. Socket으로부터 InputStream과 OutputStream 구하기

클라이언트에서 서버로 접속이 성공햇다면 서버와 클라이언트는 각각 연결된 Socket을 가지게 된다. 이때 소켓을 이용한 Stream을 생성해 통신하게 된다.

OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();

InputStream과 OutputStream을 직접 이용할 수도 있지만 수많은 다른 IO에 인자로 전달해 사용하는 경우가 많다.

PrintWriter pw = new PrintWriter(new OutputStreamWriter(out));
BufferedReader br = new BufferedReader(new OutputStreamReader(in));

4. 접속 끊기

소켓의 연결이 끊기기 전까지 Stream을 통해 통신이 가능하다. 소켓 연결을 끊기 전에 이 소켓을 통해 얻은 IO도 반드시 close() 메소드를 이용해서 종료해야 한다.

출처 : 김성박 송지훈 공저, 『 자바 IO & NIO 네트워크 프로그래밍』, 한빛미디어(2004.9.30), 8장 인용.