udp server 예제

By 2019. augusztus 2. Egyéb kategória No Comments

샘플 UDP 서버 프로그램을 사용하여 새로운 UDP 지식을 시도해 볼 시간입니다. 이 프로그램은 사용자 ID와 일부 텍스트를 포함하는 데이터 그램을 받은 다음 SNDMSG 명령을 사용하여 해당 사용자에게 메시지를 보냅니다. 메시지가 전송되면 메시지가 올바르게 전송되었음을 인정하는 데이터그램을 다시 보냅니다. 아래 코드에서 서버와 클라이언트 간에 하나의 hello 메시지를 교환하여 모델을 보여 줍니다. 예를 들어 google.com 주소를 찾으려고 한다고 가정합니다. 코드는 다음과 같습니다: 서버는 sendto에서 해당 주소를 사용하고 받는 사람의 주소로 메시지를 다시 보낼 수 있습니다. UDP의 이론에서 클라이언트는 TCP와 같은 서버와의 연결을 형성하지 않고 대신 데이터그램만 보냅니다. 마찬가지로 서버는 연결을 수락할 필요가 없으며 데이터그램이 도착할 때까지 기다립니다. 도착 시 데이터그램에는 서버가 올바른 클라이언트로 데이터를 전송하는 데 사용하는 발신자의 주소가 포함됩니다. 간단한 서버를 살펴보겠습니다. 소켓을 만들고 컴퓨터에서 사용 가능한 모든 IP 주소에 바인딩하지만 특정 포트 번호에 바인딩합니다.

그런 다음 메시지를 수신하고 내용을 인쇄하는 루프를 합니다. TCP 소켓을 사용하면 서버가 수신 대기 시스템 호출을 통해 수신 대기를 위한 소켓을 설정한 다음 수락을 호출하여 연결을 기다립니다. UDP는 연결되지 않습니다. 서버는 소켓이 있으면 즉시 메시지를 수신할 수 있습니다. recvfrom 시스템 호출을 사용하여 특정 전송 주소(IP 주소 및 포트 번호)에서 들어오는 데이터그램을 기다립니다. 이 예제는 포트를 0으로 설정하여 사용 가능한 포트 번호를 선택하도록 운영 체제에 요청합니다. 특정 포트 번호를 사용하려면 UDP 줄을 사용자 데이터그램 프로토콜의 약어로 변경합니다. UDP는 TCP/IP 소송의 인터넷 프로토콜을 사용합니다. UDP를 사용하는 통신에서 클라이언트 프로그램은 대상 서버가 UDP에서도 실행되는 대상 서버로 메시지 패킷을 보냅니다. 서버의 주소에는 서버 컴퓨터의 IP 주소와 해당 컴퓨터의 해당 포트에서 수신 대기 하는 소켓에 해당하는 포트 번호가 포함됩니다. IP 주소는 네트워크 바이트 순서의 4바이트(32비트) 값입니다(위의 htonl 참조). 전송 주소는 소켓 주소 구조에 정의되어 있습니다.

소켓은 다양한 유형의 통신 인터페이스와 함께 작동하도록 설계되었기 때문에 인터페이스는 매우 일반적입니다. 포트 번호를 매개 변수로 받아들이는 대신 사용 중이던 주소 패밀리(네트워크 유형)에서 실제 형식이 결정되는 sockaddr 구조를 사용합니다. 예를 들어 UNIX 도메인 소켓을 사용하는 경우 실제로 파일 시스템에서 파일을 만듭니다. UDPClientSocket.sendto (bytesToSend, 서버주소포트) 이제 서버로 메시지를 보내는 클라이언트가 있습니다. 서버가 해당 클라이언트로 메시지를 다시 보내려면 어떻게 해야 합니까? 연결이 없으므로 서버가 응답을 다시 쓸 수 없습니다. 다행히도, recvfrom 호출은 우리에게 서버의 주소를 주었다. 소켓에 대한 논의에서 TCP/IP 프로토콜을 사용하는 소켓이라는 연결 지향 소켓을 사용한 프로그래밍 예제를 다루었습니다. 여기서는 UDP/IP를 통해 연결없는 소켓을 사용하는 예제를 간략하게 살펴보겠습니다. 참고: TCP가 거의 없는 경우 간단한 텔넷 클라이언트를 사용하여 서버 프로그램을 테스트할 수 없습니다. 다음 항목에서 수행할 서버를 사용하여 플레이할 클라이언트 프로그램을 작성해야 합니다.

TCP 소켓을 사용하면 종료 시스템 호출을 사용하여 소켓을 닫거나 한 방향으로 통신을 종료할 수 있습니다. UDP에는 연결 개념이 없으므로 종료를 호출할 필요가 없습니다. 그러나 소켓은 여전히 커널에서 파일 설명자(file 설명자)를 사용하므로 파일과 마찬가지로 가까운 시스템 호출을 통해 해제할 수 있습니다. 대부분의 경우 컴퓨터의 이름은 알 수 있지만 IP 주소는 알 수 없습니다. IP 주소를 가져오는 쉬운 방법은 gethostbyname 라이브러리(libc) 함수를 사용하는 것입니다. Gethostbyname 매개 변수로 호스트 이름을 허용 하 고 호스트 구조를 반환: myport는 변수 (짧은 int) 포트 번호를 포함 하는.