udp 통신 예제 mfc

좋은 예! 그것은 간단하고 즉시 작동! 다음 코드는 UDP 데이터그램을 보내고 받는 데 Microsoft MFC의 CAsyncSocket 클래스를 사용하는 방법에 대한 매우 간단한 예제를 제공하기 위한 것입니다. 연결없는 소켓에서 데이터를 수신하는 프로세스의 단계는 간단합니다. 먼저 소켓() 또는 WSASocket()을 사용하여 소켓을 만듭니다. 그런 다음 데이터를 수신하려는 인터페이스에 소켓을 바인딩합니다. 이 작업은 bind() 함수(세션 지향 예제와 정확히 비슷)로 수행됩니다. 연결되지 않은 소켓과의 차이점은 listen() 또는 accept()를 호출하지 않는다는 것입니다. 대신 들어오는 데이터를 받기만 하면 됩니다. 연결이 없기 때문에 수신 소켓은 네트워크의 모든 컴퓨터에서 발생한 데이터그램을 수신할 수 있습니다. 수신 함수 중 가장 간단한 것은 recvfrom()로 정의되며, 인수 : 도메인 – 통신 도메인을 지정합니다 (IPv4용 AF_INET6/ IPv6의 경우 AF_INET6) 유형 – 생성할 소켓 유형(TCP용 SOCK_STREAM/ UDP용 SOCK_DGRAM용 SOCK_STREAM) 프로토콜 – 프로토콜을 소켓에서 사용할 수 있습니다. 0은 주소 패밀리에 기본 프로토콜을 사용하는 것을 의미합니다. 우리는 이미 OnAccept 이벤트를 보았습니다.

이제 OnReceive 및 OnClose을 분석해 보겠습니다. 이러한 이벤트를 받으려면 CMySocket 예제 클래스에서 이미 볼 수 있듯이 CCESocket을 하위 클래스로 분류하고 새 가상 함수를 제공해야 합니다. 다음은 OnAccept/AcceptServiceSocket 함수를 설명하는 간단한 예제입니다. netstat 명령을 사용하여 udp 서버의 열린 포트를 확인할 수 있습니다. 다음은 처음에 설명한 대로 이러한 함수가 주 응용 프로그램 스레드가 아닌 다른 스레드에서 호출된다는 점에 유의하십시오. 창 스레드에서 무언가를 실행해야 하는 경우 CMySocket 예제에서 볼 수 있듯이 PostMessage를 사용하여 메시지를 보내야 합니다. MFC 개체에는 이 필수가 됩니다. 스레드 간에 전달되는 경우 작동하지 않으며 정의된 동일한 스레드에서 이러한 개체를 사용해야 합니다.

CAsynSocket을 사용하여 UDP 데이터그램을 보내고 받는 방법에 대한 간단한 예제를 찾을 수 없었기 때문에 직접 만들었습니다. 나는 다른 사람들이 유용 할 수 있다고 생각했다. 표시된 예제에서는 두 발신자로부터 데이터를 수신하는 두 개의 독립적인 송신 소켓과 단일 수신기 소켓을 만듭니다. 연결 없는 통신은 연결 지향 통신과 다르게 행동하므로 데이터를 송수신하는 방법은 실질적으로 다릅니다. 먼저 연결되지 않은 수신기는 연결 지향 서버와 비교할 때 약간의 변경이 필요하기 때문에 수신기 (또는 원하는 경우 서버)에 대해 설명합니다. 그 후 우리는 보낸 사람의 보겠습니다. 위의 예제는 문자열을 보내고 받습니다. 여러 가지 이유로 UDP 메시지를 작게 유지하는 것이 좋지만 바이트 버퍼를 보내는 것은 간단한 문제입니다(예: 바이트 정렬 구조에 따라). 이 예제에서는 필수적이지 않지만 ntohl()과 같은 함수를 사용하여 수신된 데이터를 처리할 때 다시 변환하기 전에 Microsoft Windows Intel 정렬을 네트워크 바이트 순서로 변환하는 것도 좋습니다. OnAccept, OnReceiveData 및 OnDisconnect는 CMySocket에서 게시한 ON_ACCEPT, ON_RECEIVE 및 ON_CLOSE 이벤트에 의해 트리거됩니다.

그러나 이 예제에 대한 OnAccept 함수만 정의했습니다. 나는 코드가 너무 간단해서 주석이 필요하지 않다고 생각합니다 🙂 따라서 UDP 소켓과의 통신은 매우 간단합니다.

This entry was posted in Uncategorized. Bookmark the permalink.