我试图接收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
数据报被阻塞,比如被防火墙阻止。