네트워크 프로그래밍 - UDP Echo Server와 Echo Client

728x90
반응형

지난 번에는 TCP의 Echo server와 Echo client를 만들었었다. 이번에는 UDP 프로토콜로 동작하는 에코 서버와 클라이언트를 학습한다.

 

UDP 프로토콜의 경우 연결 과정 없이 소켓이 생성되면 바로 데이터 송수신을 진행한다(No handshaking).

 

 

 

UDP 에코 서버

 

SOCK_DGRAM으로 UDP 소켓을 생성하고 호스트 주소와 포트를 bind 한다.

recvfrom() 메서드를 호출할 때 반환되는 수신 메시지와 클라이언트의 주소를 data, addr 변수에 저장하고, 수신 메시지와 수신 주소를 출력한다.

그리고 수신 메시지를 다시 전송한다.

 

UDP 에코 클라이언트

 

UDP 소켓을 생성하고 sendto() 메서드로 서버에게 메시지를 전송한다. 그리고 서버가 보낸 메시지와 주소를 data, addr 변수에 저장하고 해당 메시지를 출력한다.

 

실행 결과

 

에코 서버를 먼저 실행한 다음, 클라이언트를 실행한다. 그러면 클라이언트에서 먼저 메시지를 보낸 다음, 서버에서 메시지를 송신하게 된다. 즉, 메시지 송수신은 차례대로 한 번씩 진행한다.

 

UDP 서버는 TCP와 달리 클라이언트와 연결을 설정하지 않으므로 여러 클라이언트와 통신할 수 있다.

TCP 서버에서는 메시지 송수신 전에 accept() 메소드로 클라이언트와 연결을 해 동기 방식으로는 다른 클라이언트와 연결할 수 없다.

하지만 UDP 서버에서는 수신 메시지를 처리하고 다른 클라이언트가 보내는 메시지를 받을 수 있으므로 동기 방식으로도 여러 클라이언트와 송수신을 할 수 있다.

 

 

클라이언트 코드를 위 그림과 같이 변경하고 동일한 파일을 하나 더 생성한다. 즉, 에코 클라이언트가 2명이 있다고 가정해보자.

 

첫번째 에코 클라이언트 실행 결과
두 번째 에코 클라이언트 실행 결과
에코 서버 실행 결과

 

각 에코 클라이언트의 명령을 돌아가면서 한 번씩 실행하면 서버는 두 개의 클라이언트에게 온 메시지를 모두 수신한다. 즉, 두 대의 클라이언트와 동시에 서버에 연결해서 메시지를 주고 받을 수 있다.

728x90
반응형