0

我有一个简单的 UDP 服务器和客户端。

客户端创建一个 DGRAM 套接字,绑定它(显式)(即使它不是必需的),使用 getsockname()(非零)打印出它绑定到的端口,然后发送一条消息(通过 sendto()),它是成功交付。

服务器使用 recvfrom() 接收消息。消息已正确接收,但发送者中的端口号为零接收到的第一条消息(我正在使用 ntohs())。从第二条消息中,端口号正确显示(即客户端显示它的套接字绑定到的端口号相同)。

任何的想法?

更新:问题由我解决。请参阅下面的答案。

4

1 回答 1

2

我解决了这个问题。假设 recvfrom() 的最后一个参数是

socklen_t from_len;
那么你必须设置
from_len = sizeof(struct sockaddr_in);
(对于 IPv4)在 recvfrom() 调用之前。微不足道,我知道,但有时它会跳过你的想法:-)

于 2012-04-26T03:49:59.307 回答