ServerSocket
- 서버 프로그램에서 사용하는 소켓
- 포트를 통해 연결 요청이 오기를 대기
- 요청이 오면 클라이언트와 연결 맺고, 해당 클라이언트와 통신하는 새 소켓 생성
- 새로 만들어진 소켓으로 클라이언트 소켓과 데이터 주고 받음
Socket
- 서버 프로그램으로 연결 요청
- 데이터 전송 담당
ServerSocket & Socket
- ServerSocket과 Socket은 동기(블로킹) 방식
- 서버 실행하는 main 스레드가 입출력 작업을 담당하게 되면 입출력이 완료될 때까지 다른 작업 할 수 없는 상태
- "accept(), connect(), read(), write()"의 경우 별도 작업 쓰레드 생성해서 병렬 처리하자
- 쓰레드 풀을 활용해서 클라이언트 폭증으로 인한 과도한 스레드 방지!
소켓 송수신 과정(TCP/IP)
1. 서버: 클라이언트의 요청 받기 위한 준비 (ServerSocket)
2. 클라이언트: 서버에 접속 요청 (Socket)
3. 서버: 클라이언트의 요청 받아들임 (accept)
4. 클라이언트: 서버에 메세지 보냄 (BufferedWriter)
5. 서버: 클라이언트가 보낸 데이터 출력 (BufferedReader)
6. 서버: 클라이언트에 메세지를 보냄 (BufferedWriter)
7. 클라이언트: 서버가 보낸 메시지 출력 (BUfferedReader)
8. 클라이언트/서버: 종료 (close)