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

Sockets recvfrom()将发送方端口返回为0(零),sockets,udp,sendto,Sockets,Udp,Sendto,我有一个简单的UDP服务器和客户端 客户端创建一个DGRAM套接字,将其绑定(显式绑定)(即使不需要),使用getsockname()打印出绑定到的端口(非零),然后发送一条消息(通过sendto()),该消息已成功传递 服务器使用recvfrom()接收消息。消息已正确接收,但对于接收到的第一条消息,sender中的端口号为零(我使用的是ntohs())。从第二条消息中,端口号显示正确(即客户端显示其套接字绑定到的端口号) 有什么想法吗 更新:问题由我解决。请参阅下面的答案。我解决了这个问题。

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

客户端创建一个DGRAM套接字,将其绑定(显式绑定)(即使不需要),使用getsockname()打印出绑定到的端口(非零),然后发送一条消息(通过sendto()),该消息已成功传递

服务器使用recvfrom()接收消息。消息已正确接收,但对于接收到的第一条消息,sender中的端口号为零(我使用的是ntohs())。从第二条消息中,端口号显示正确(即客户端显示其套接字绑定到的端口号)

有什么想法吗


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

我解决了这个问题。假设recvfrom()的最后一个参数是socklen\u t from\u len;然后必须设置from_len=sizeof(struct sockaddr_in);(对于IPv4)在recvfrom()调用之前。琐碎的,我知道,但有时它会让你忘记:-)

你在什么平台上运行它?解决了问题。问题已更新。 from_len = sizeof(struct sockaddr_in); from_len = sizeof(struct sockaddr_in);