我有一个简单的UDP服务器和客户端。
客户端创建一个DGRAM套接字,绑定它(显式)(即使它不是必需的),打印出它绑定到的端口使用getsockname()(非零),然后发送一条消息(通过sendto() )已成功交付。
服务器使用recvfrom()接收消息。收到的消息正确但发送方的端口号为零,收到第一封消息(我正在使用ntohs())。从第二条消息中,端口号正确显示(即客户端显示它的套接字被绑定的那个)。
有什么想法吗?
更新:我解决了问题。见下面的答案。
答案 0 :(得分:2)
我解决了这个问题。假设recvfrom()的最后一个参数是
socklen_t from_len;,那么你必须在recvfrom()调用之前设置
from_len = sizeof(struct sockaddr_in);(对于IPv4)。琐碎,我知道,但有时它可以跳过你的想法: - )