UDP套接字错误10049

时间:2014-12-29 15:53:04

标签: c++ sockets sendto

我有一个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上发送和接收缓冲区。

1 个答案:

答案 0 :(得分:4)

您将指向SOCKADDR_IN结构的指针作为inet_pton的第三个参数传递,但如果您按照该函数的MSDN参考链接,您将看到它需要{ {3}}结构。

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

正确的呼叫将是例如。

inet_pton(AF_INET, ip, &addr.sin_addr)