You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言UDP广播程序发送数据包实际端口与指定端口不符问题求助

问题解答

端口与预期不符的根因

你的问题是缺失网络字节序转换导致的:

  • TCP/IP协议栈要求传输层端口、网络层IP都必须使用大端格式(网络字节序),而你的代码直接将主机字节序的port变量赋值给sockaddr_in结构体的sin_port字段,没有做字节序转换。
  • 可以直接验证你的观测结果:Debian运行在小端架构上,10000的十六进制为0x2710,小端存储高低位翻转后为0x1027,转十进制就是你抓到的4135;15000的十六进制为0x3A98,翻转后为0x983A,转十进制就是38970,完全匹配你Wireshark的观测结果。
  • 修复方法:给端口赋值时调用htons()(主机字节序转网络字节序短整型),将broadcastAddr.sin_port = port;修改为broadcastAddr.sin_port = htons(port);即可。

接收端乱码的根因

你监听错误端口收到的乱码,本质是这些端口上原本就有其他程序发送的网络报文,你碰巧监听到了不属于自己的报文,内容自然和你预期的Hello World不匹配,显示为乱码。修复端口问题后,在你指定的10000/15000端口监听就能收到正常的字符串内容。

修复后的核心代码片段

// 构造广播地址结构体
broadcastAddr.sin_family = AF_INET;
broadcastAddr.sin_port   = htons(port); // 新增字节序转换
broadcastAddr.sin_addr.s_addr = inet_addr(BC_ADDR);

附加提示:inet_addr属于已废弃接口,后续可以改用inet_pton做IP地址转换,兼容性更好。

内容的提问来源于stack exchange,提问作者11011100

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:42:02