2012-04-25 92 views
0

我有一个简单的UDP服务器和客户端。客户端创建一个DGRAM套接字,将其绑定(显式地)(即使不需要),使用getsockname()(非零)打印出绑定的端口,然后发送一条消息(通过sendto( )),这是成功交付。recvfrom()返回发件人端口为0(零)

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

有什么想法?

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

+0

你在哪个平台上运行这个平台? – Sniggerfardimungus 2012-04-25 18:47:21

+0

解决了这个问题。问题已更新。 – 2012-04-25 18:53:19

回答

2

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

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