recvfrom()将发送方端口返回为0(零)

时间:2012-04-25 18:35:01

标签: sockets udp sendto

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

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

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

有什么想法吗?

更新:我解决了问题。见下面的答案。

1 个答案:

答案 0 :(得分:2)

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

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