소켓 (Socket) 통신
들어가기 전
소켓은 통신을 위한 일종의 통로 역할을 한다.
통신을 원하는 프로세스 양측에 소켓을 생성해주어야한다.
연결 시 역할에 따라 Client 소켓과 Server 소켓으로 나뉜다.
1. Client 소켓과 Server 소켓
Client 소켓 : 연결 요청을 보내는 소켓
Server 소켓 : 연결 요청을 받아들이는 소켓
Client 소켓과 Server 소켓은 태생적으로는 동일하나, 소켓의 역할과 구현 절차 구분을 위해 다르게 부르는 것일 뿐이다.
Server 소켓은 Client 소켓의 연결 요청을 받아들이는 역할만 수행할 뿐, 직접적인 데이터 송수신은 Server 소켓의 연결 요청 수락의 결과로 생성되는 새로운 소켓을 통해 처리된다.
2. 소켓 통신의 흐름
Client 소켓
소켓을 생성(create)하고,
서버 측에 연결(connect)을 요청한다.
Server 소켓에서 연결이 받아들여지면 데이터를 송수신(send/recv)하고,
데이터 송수신이 완료되면 소켓을 닫는다(close).
Server 소켓
소켓을 생성(create)하고,
서버가 사용할 IP 주소와 Port 번호를 생성한 소켓에 결합(bind)시킨다.
그 다음, Client 소켓으로부터 연결 요청이 수신될 때까지 대기(listen)하고,
요청이 수신되면 요청을 받아들여(accept) 데이터 통신을 위한 새로운 소켓을 생성한다.
새로운 소켓을 통해 연결이 수립되면, 클라이언트와 마찬가지로 데이터를 송수신(send/recv)할 수 있다.
Server 소켓은 또 다른 연결 요청을 처리하기 위해 다시 대기(listen)한다.
데이터 송수신이 완료되면 소켓을 닫는다(close).
- 이처럼, 실질적인 데이터 송수신은 Server 소켓이 아닌, 연결이 수립된 새로운 소켓을 통해 처리된다.