我正在尝试接收UDP套接字上的数据,但我无法找到接收任何内容的方法。
我可以通过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秒,所以我应该在实际超时之前收到它
的屏幕答案 0 :(得分:2)
我可以看到显示超时的代码的唯一方法是:
数据报未在aTimeout
过去之前到达(aTimeout
的实际值是多少?)
数据报未使用IPv4
数据报未发送到计算机上的IP,或未发送到端口48640
数据报被阻止,例如被防火墙阻止。