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

TCP回显服务器打印的客户端端口与netstat查询结果不一致问题

问题原因

你输出客户端端口时未将struct sockaddr_in中存储的网络字节序端口转换为主机字节序,导致打印值和实际端口不符。

具体原理

  • TCP/IP协议栈在传输层、网络层使用统一的大端序(即网络字节序)存储端口、IP地址等数值,client.sin_port字段存储的就是网络字节序的端口值
  • x86等主流CPU默认使用小端序作为主机字节序,你直接将网络字节序的sin_port用%d格式打印,相当于把大端序整数直接按小端序规则解析,结果自然是错误的
  • 你给出的两个端口刚好可以验证这个问题:你程序打印的34997转十六进制为0x88B5,大小端字节颠倒后得到0xB588,转十进制就是46472,正好是netstat查询到的实际客户端端口。

修复方案

修改两处端口打印代码,用ntohs()(network to host short)将网络字节序端口转为主机字节序后再打印即可:

// 连接时的打印
printf("client connected: %s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));
// 断开时的打印
printf("client disconnected: %s:%d\n", inet_ntoa(client.sin_addr), ntohs(client.sin_port));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:45:02