Menu

casyncsocket udp 예제

  • Uncategorized

이제 줄 “———-:8888”. 포트 8888에서 수신 대기하고 있는 UDP 서버입니다. netstat 명령은 udp 서버에 연결된 클라이언트(예: ncat)에 대한 연결을 표시하지 않는다는 점에 유의해야 합니다. 좋은 예! 그것은 간단하고 즉시 작동! CAsynSocket을 사용하여 UDP 데이터그램을 보내고 받는 방법에 대한 간단한 예제를 찾을 수 없었기 때문에 직접 만들었습니다. 나는 다른 사람들이 유용 할 수 있다고 생각했다. 표시된 예제에서는 두 발신자로부터 데이터를 수신하는 두 개의 독립적인 송신 소켓과 단일 수신기 소켓을 만듭니다. 우리는 이미 OnAccept 이벤트를 보았습니다. 이제 OnReceive 및 OnClose을 분석해 보겠습니다. 이러한 이벤트를 받으려면 CMySocket 예제 클래스에서 이미 볼 수 있듯이 CCESocket을 하위 클래스로 분류하고 새 가상 함수를 제공해야 합니다. OnAccept, OnReceiveData 및 OnDisconnect는 CMySocket에서 게시한 ON_ACCEPT, ON_RECEIVE 및 ON_CLOSE 이벤트에 의해 트리거됩니다.

그러나 이 예제에 대한 OnAccept 함수만 정의했습니다. 나는 코드가 너무 간단해서 주석이 필요하지 않다고 생각합니다 🙂 다음 코드는 UDP 데이터그램을 보내고 받는 데 Microsoft MFC의 CAsyncSocket 클래스를 사용하는 방법에 대한 매우 간단한 예제를 제공하기 위한 것입니다. 내 테스트 응용 프로그램 주요 대화 상자의 코드 조각, UdpTestAppDlg (.cpp & .h), 내가 여기에 제공 한 간단한 UdpReceiveSocket 및 UdpSendSocket 클래스를 사용하는 방법을 보여줍니다. 표시된 예제 코드는 두 개의 독립적인 송신 소켓과 단일 수신기 소켓을 만듭니다. 수신 소켓은 두 발신자로부터 데이터그램을 수신합니다. 다음은 OnAccept/AcceptServiceSocket 함수를 설명하는 간단한 예제입니다. CAsyncSocket을 사용하여 UDP 메시지를 보내고 받는 것은 방법을 알고 나면 매우 간단합니다. Microsoft 설명서에서는 TCP와 UDP를 모두 다루며, 이를 단순히 달성할 수 있는 방법을 모호하게 하는 경향이 있습니다. 또 다른 문제, 간단한 예제의 부족, 잘하면 여기에 해결 되었습니다.

위의 예제는 문자열을 보내고 받습니다. 여러 가지 이유로 UDP 메시지를 작게 유지하는 것이 좋지만 바이트 버퍼를 보내는 것은 간단한 문제입니다(예: 바이트 정렬 구조에 따라). 이 예제에서는 필수적이지 않지만 ntohl()과 같은 함수를 사용하여 수신된 데이터를 처리할 때 다시 변환하기 전에 Microsoft Windows Intel 정렬을 네트워크 바이트 순서로 변환하는 것도 좋습니다. 따라서 UDP 소켓과의 통신은 매우 간단합니다. 따라서 UDP 소켓은 통신 자체가 매우 간단한 경우(예: dns 요청/응답 등)에 사용됩니다. 또는 멀티 캐스트 / 브로드 캐스트의 일종을 할 때. 데이터가 전송되지 않거나 패킷을 다시 전송하는 데 실패하면 큰 문제가되지 않는 경우 UDP를 사용할 수 있습니다. 처음에 설명했듯이 이러한 함수는 주 응용 프로그램 스레드가 아닌 다른 스레드에서 호출됩니다. 창 스레드에서 무언가를 실행해야 하는 경우 CMySocket 예제에서 볼 수 있듯이 PostMessage를 사용하여 메시지를 보내야 합니다.

MFC 개체에는 이 필수가 됩니다. 스레드 간에 전달되는 경우 작동하지 않으며 정의된 동일한 스레드에서 이러한 개체를 사용해야 합니다. 주소, 포트 및 데이터를 제공할 때 패킷을 보냅니다. . WSAEINVAL lCommand는 유효한 명령이 아니거나 lpArgument가 lCommand에 허용되는 매개 변수가 아니거나 명령이 제공된 소켓 유형에 적용되지 않습니다. 둘 다 문자열 str을 보냅니다. 그러나 후자는 문자열에 EOL을 추가합니다. EOL은 SetEolFormat 함수로 설정됩니다(나중에 참조). . 새 데이터를 얻는 즉시 다음 이벤트가 호출됩니다(가상 기능을 재정의한 경우): nSocketPort 소켓과 함께 사용할 잘 알려진 포트 또는 Windows 소켓이 포트를 선택하도록 하려는 경우 0입니다. 반환 값은 연결이 성공적으로 설정된 경우 TRUE, 오류가 발생하면 FALSE입니다. .

WSAEINVAL 소켓이 이미 주소에 바인딩되어 있습니다. 이제 소켓을 사용하여 데이터를 보내고 읽을 수 있습니다. 그러나 알림(이벤트)이 어떻게 작동하는지 먼저 알아두어야 하며, 그렇지 않으면 새 데이터를 읽을 수 있는 시기나 어떤 이유로 소켓의 연결이 끊어지는지 알 수 없습니다.

Search