在UDP中recvfrom没有得到任何东西

我试图接收UDP套接字上的数据,但我无法find一种方法来接收任何东西。

我可以用wireshark看到数据实际上是到达计算机的,但recvfrom总是超时。

涉及的代码非常简单:

mUDPSocket = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP ); if( mUDPSocket == INVALID_SOCKET ) return 1; uint32_t aTimeout = 5000; const int lResult = setsockopt( mUDPSocket, SOL_SOCKET, SO_RCVTIMEO, ( char * )&aTimeout, sizeof( aTimeout ) ); if( SOCKET_ERROR == lResult ) return 1; struct sockaddr_in addr = {}; addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl( INADDR_ANY ); //also tried with my local ip addr.sin_port = htons( 48640 ); if( bind( mUDPSocket, ( const sockaddr * )&addr, sizeof( addr ) ) < 0 ) return 1; 

之后尝试接收数据

 if(recvfrom( mUDPSocket, ( char * )aData, aSize, 0, NULL, 0 )<0) //function return -1 std::cout << WSAGetLastError() << std::endl; //10060 

我试图做一些基本的东西,所以我想我会错过简单的东西。

编辑:数据包发送几次,超时是5秒,所以我应该在真正的超时之前收到它

我附上了wireshark捕获的屏幕 在这里输入图像说明

如果出现以下情况,我可以看到代码的唯一方法是:

  • 数据报在aTimeout之前没有到达( aTimeout的实际值是aTimeout ?)

  • 该数据报不使用IPv4

  • 数据报没有被发送到机器上的IP,或者没有被发送到端口48640

  • 数据报被阻塞,比如被防火墙阻止。