UDP 套接字错误 10049



我有一个UDP服务器套接字,它可以从客户端接收数据报,但无法将回复发送回任何一个客户端。

这是我用来发送缓冲区的代码:

    SOCKADDR_IN addr;
    memset((char*)&addr, 0, sizeof(addr));
    const char* ip = "127.0.0.1";
    u_short port = 8888 // IP of the client to which the buffer is going to
    if (inet_pton(AF_INET, ip, &addr) == 1)
    {
        addr.sin_family = AF_INET;
        addr.sin_port = htons(port);
        sendto(s, buffer, UDP_PACKET_SIZE, NULL, (SOCKADDR *)&addr, addrlen);
    }

sendto()返回 -1,GetLastError() 表示 10049,这意味着地址不可用。我正在发送和接收localhost上的缓冲区。

您正在传递指向SOCKADDR_IN结构的指针作为第三个参数来inet_pton,但是如果您点击指向函数的 MSDN 引用的链接,您将看到它需要一个IN_ADDR结构。

SOCKADDR_IN结构有这样的成员,但它不是结构中的第一个成员,这就是出现错误的原因;您将地址写入结构中的错误位置,并且您尝试发送到的地址不是您认为的那样。

正确的调用是例如

inet_pton(AF_INET, ip, &addr.sin_addr)

最新更新