자바 TCP 소켓 통신(ServerSocket과 Socket)
서버와 클라이언트의 통신 과정
- 서버에서 서버 소켓을 열고, 특정 포트에서 클라이언트의 연결을 기다린다.
- 클라이언트는 접속할 서버의 IP주소와 포트 정보를 가지고 소켓을 생성해서 서버에 연결을 요청한다.
- 서버 소켓은 클라이언트의 요청이 오면, 서버에 새로운 소켓을 생성한다. 그리고 클라이언트의 소켓과 연결한다.
- 클라이언트의 소켓과 새로 생성된 서버의 소켓이 일대일 통신을 한다. 서버소켓은 클라이언트 소켓과 통신하지 않는다.
- 실질적인 데이터 통신은 서버소켓과 관계없이 소켓과 소켓간에 이루어짐
- 소켓들이 데이터를 주고 받는 연결 통로는 입출력 스트림이다. 두개의 스트림, InputStream과 OutputStream을 갖고 있고, 상대편 소켓의 스트림과 교차 연결된다.
Socket vs ServerSocket
- Socket : 프로세스간 통신 담당, InputStream과 OutputStream을 갖고 있다. 두 스트림을 통해 프로세스간의 통신(입출력)이 이뤄진다.
- ServerSocket : 포트와 연결되어, 클라이언트의 요청을 기다린다. 요청이 오면, Socket을 생성해서 이 소켓과 클라이언트 소켓간의 통신이 이뤄지도록 한다.
참고 : 자바의 정석 네트워킹 파트