程序无法在非阻塞UDP套接字上接收消息

时间:2015-03-05 02:11:44

标签: c++ network-programming udp p2p winsock2

所以我在C ++中有一个应用程序,它有与网络功能相关的类。在一个函数中,我已经为两个客户端创建了套接字,这些客户端通过以下方式进行非阻塞通信:

int check;
check = WSAAsyncSelect(sock, aWindow, 0, 0);

在程序循环期间,每个客户端程序都具有应该相互发送和接收消息的功能。如上所述,套接字是非阻塞的,因此程序循环应该无限期地运行,并且每个客户端通过以下代码向另一个客户端发送消息显然很好:

socketConfirm =  sendto(sock,
                 (char*) playerStats, sizeof(Message), 0, (SOCKADDR *) & toAddr, sizeof (toAddr));

但是,当调用接收函数时:

socketConfirm = recvfrom(sock, (char*)player2Stats, sizeof(Message), 0,
                         (sockaddr *) &fromAddr, &fromAddrSize);

在此之后立即调用WSAGetLastError()函数:

if(socketConfirm == SOCKET_ERROR)
    {
        error = WSAGetLastError();
    }

返回错误代码10022并且显然没有任何消息正在接收任何客户端,因为代表另一客户端屏幕上的每个客户端的播放器在应用输入时不会移动,我想知道消息的原因是什么未收到的信息可以通过此错误代码推断,或者是否有其他问题导致邮件无法收到。

0 个答案:

没有答案