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

时间:2017-10-25 21:09:32

标签: c++ windows sockets

我正在尝试接收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秒,所以我应该在实际超时之前收到它

我附上了wireshark capture enter image description here

的屏幕

1 个答案:

答案 0 :(得分:2)

我可以看到显示超时的代码的唯一方法是:

  • 数据报未在aTimeout过去之前到达(aTimeout的实际值是多少?)

  • 数据报未使用IPv4

  • 数据报未发送到计算机上的IP,或未发送到端口48640

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