mfc udp 통신 예제


다음 코드 예제에서는 소켓을 사용하여 포트 11,000을 사용하여 UDP 데이터그램을 지시된 브로드캐스트 주소 192.168.1.255로 보냅니다. 클라이언트는 명령줄에 지정된 메시지 문자열을 보냅니다. 다음 코드는 UDP 데이터그램을 보내고 받는 데 Microsoft MFC의 CAsyncSocket 클래스를 사용하는 방법에 대한 매우 간단한 예제를 제공하기 위한 것입니다. 위의 예제는 문자열을 보내고 받습니다. 여러 가지 이유로 UDP 메시지를 작게 유지하는 것이 좋지만 바이트 버퍼를 보내는 것은 간단한 문제입니다(예: 바이트 정렬 구조에 따라). 이 예제에서는 필수적이지 않지만 ntohl()과 같은 함수를 사용하여 수신된 데이터를 처리할 때 다시 변환하기 전에 Microsoft Windows Intel 정렬을 네트워크 바이트 순서로 변환하는 것도 좋습니다. IP 버전 4 주소는 32비트를 사용하여 네트워크 주소를 지정합니다. 255.255.255.0의 넷마스크를 사용하는 클래스 C 주소의 경우 이러한 비트는 4개의 옥텟으로 구분됩니다. 소수자릿수로 표현될 때, 네 옥텟은 192.168.100.2와 같은 익숙한 점선 사분면 표기형을 형성한다. 처음 2옥텟(이 예에서 192.168)은 네트워크 번호를 형성하고, 제 3 옥텟(100)은 서브넷을 정의하고, 최종 옥텟(2)은 호스트 식별자이다.

다음 프로그램 예제에서는 이전 UDP 수신기 프로그램 예제와 함께 사용할 수 있는 간단한 UDP 송신기 응용 프로그램을 구성하는 방법을 보여 줍니다. 따라서 UDP 소켓과의 통신은 매우 간단합니다. 따라서 UDP 소켓은 통신 자체가 매우 간단한 경우(예: dns 요청/응답 등)에 사용됩니다. 또는 멀티 캐스트 / 브로드 캐스트의 일종을 할 때. 데이터가 전송되지 않거나 패킷을 다시 전송하는 데 실패하면 큰 문제가되지 않는 경우 UDP를 사용할 수 있습니다. CAsyncSocket을 사용하여 UDP 메시지를 보내고 받는 것은 방법을 알고 나면 매우 간단합니다. Microsoft 설명서에서는 TCP와 UDP를 모두 다루며, 이를 단순히 달성할 수 있는 방법을 모호하게 하는 경향이 있습니다. 또 다른 문제, 간단한 예제의 부족, 잘하면 여기에 해결 되었습니다. 좋은 예! 그것은 간단하고 즉시 작동! CAsynSocket을 사용하여 UDP 데이터그램을 보내고 받는 방법에 대한 간단한 예제를 찾을 수 없었기 때문에 직접 만들었습니다.

나는 다른 사람들이 유용 할 수 있다고 생각했다. 표시된 예제에서는 두 발신자로부터 데이터를 수신하는 두 개의 독립적인 송신 소켓과 단일 수신기 소켓을 만듭니다. 인수 : 도메인 – 통신 도메인을 지정합니다 (IPv4에 대한 AF_INET6/ Af_INET6 IPv6에 대한) 유형 – 생성할 소켓 유형 (TCP용 SOCK_STREAM / UDP용 SOCK_DGRAM) 프로토콜 – 소켓에서 사용할 프로토콜입니다. 0은 주소 패밀리에 기본 프로토콜을 사용하는 것을 의미합니다. 다음 코드 예제에서는 UdpClient를 사용하여 포트 11,000에서 UDP 데이터그램을 수신합니다. 클라이언트는 메시지 문자열을 수신하고 콘솔에 메시지를 씁니다. 특수 네트워크 주소는 IP 기반 네트워크에서 UDP 브로드캐스트 메시지를 지원하는 데 사용됩니다. 다음 설명에서는 인터넷에서 사용되는 IP 버전 4 주소 패밀리를 예로 들어 사용합니다. 브로드캐스트는 호스트 식별자의 모든 비트를 설정하여 네트워크의 특정 부분으로 이동될 수 있습니다. 예를 들어 192.168.1부터 IP 주소로 식별된 네트워크의 모든 호스트에게 브로드캐스트를 보내려면 주소 192.168.1.255를 사용합니다.

이제 줄 „———-:8888“. 포트 8888에서 수신 대기하고 있는 UDP 서버입니다. netstat 명령은 udp 서버에 연결된 클라이언트(예: ncat)에 대한 연결을 표시하지 않는다는 점에 유의해야 합니다. 연결없는 소켓에서 데이터를 수신하는 프로세스의 단계는 간단합니다. 먼저 소켓() 또는 WSASocket()을 사용하여 소켓을 만듭니다. 그런 다음 데이터를 수신하려는 인터페이스에 소켓을 바인딩합니다. 이 작업은 bind() 함수(세션 지향 예제와 정확히 비슷)로 수행됩니다. 연결되지 않은 소켓과의 차이점은 listen() 또는 accept()를 호출하지 않는다는 것입니다.

대신 들어오는 데이터를 받기만 하면 됩니다. 연결이 없기 때문에 수신 소켓은 네트워크의 모든 컴퓨터에서 발생한 데이터그램을 수신할 수 있습니다.