【问题标题】:recvfrom() returns sender port as 0 (zero)recvfrom() 将发送方端口返回为 0(零)
【发布时间】:2012-04-25 18:35:00
【问题描述】:

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

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

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

有什么想法吗?

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

【问题讨论】:

  • 你在什么平台上运行这个?
  • 解决了这个问题。问题已更新。

标签: sockets udp sendto


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多