我有一个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)