gpt4 book ai didi

c - UDP recvfrom 调用返回错误的端口号。为什么?

转载 作者:行者123 更新时间:2023-11-30 18:20:54 25 4
gpt4 key购买 nike

我正在使用 UDP 进行“recvfrom”和“sendto”调用。我有一个客户端,仅在端口 6000 上广播 UDP 数据包。我有一个服务器,它在端口 6000 上绑定(bind)一个套接字,并执行一次 recvfrom。

问题是从recvfrom返回的struct sockaddr的sin_port成员总是不正确的。为什么?

我会发布一些源代码,但有人已经发布了这个问题(没有答案),我使用的代码几乎与他相同。此外,您可以阅读他的帖子获得有关此问题的更多信息:FORUM POST .

提前致谢

编辑:我真的认为“nos”答案中的“原因2”可能是问题所在。我该如何检查?

最佳答案

以下是 2 个可能的原因:

  1. 在检查/显示它之前,您没有将 sin_port 转换为主机顺序。 sin_port 采用网络字节序。也就是说,您可能会在小端机器上将端口显示为大端。

  2. 您的客户端使用随机源端口。因此,当您的目标端口为 6000 时,客户端的源端口是随机选择的。 recvfrom 为您提供源 IP 地址和源端口号。不是目的港。

如果不是这些,请提供一些相关的测试代码,以及您看到的实际值。有可能你例如有一些缓冲区溢出,或者其他可疑的事情发生。

编辑,查看链接中的代码,您将缓冲区大小(udpPkg.udpRecvBuf)硬编码为1024。缓冲区真的至少有1024大吗?如果没有,您可能会溢出 udpPkg.udpRecvBuf

关于c - UDP recvfrom 调用返回错误的端口号。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3357498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com