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

C++实现的C/S程序跨机单向连通 套接字连接报错问题排查

问题定位结论

这种正向连不上、反向能通的故障和你贴的套接字代码逻辑无关,核心原因是cat主机的入站访问控制规则拦截了外部到监听端口的TCP连接。
交换部署位置后程序可正常运行、换了多个端口问题照样复现,已经能排除代码逻辑错误、单端口被占、特权端口限制这类问题:同一套代码在dog当服务端的时候能被cat正常连接,说明socket创建、bind、listen、connect、accept的核心流程没有硬伤。

排查操作步骤
  • 先验证cat上的服务端能不能正常工作:在cat启动服务端后,直接在本机执行nc -zv 127.0.0.1 测试端口或者telnet 127.0.0.1 测试端口。如果本地环回地址能连通,说明服务端bind、listen逻辑完全正常,问题出在网络访问控制层;如果本地环回都连不通,再回头查服务端的地址初始化代码。
  • 核对服务端绑定地址配置:如果本地环回能通,但用cat自己的业务网卡IP在本机telnet不通,说明服务端初始化servAddr的时候没把sin_addr.s_addr设成INADDR_ANY(也就是0.0.0.0),误绑到了环回地址,外部网卡的流量根本进不了监听套接字。
  • 排查cat的本地防火墙规则:
    • Linux系统依次查firewalld、ufw、iptables的入站规则,很多默认配置会直接拦截未放通端口的入站TCP包,导致客户端连的时候要么超时要么被直接拒绝。
    • Windows系统查高级安全Windows防火墙的入站规则,没加白名单的程序开端口监听时,系统默认会拦截公网/专网配置档下的外部入站连接。
    • 如果主机是云服务器,同步查cat绑定的安全组、网络ACL规则,确认有没有放通源地址是dog主机IP、目标端口是测试端口的入站TCP流量。
  • 抓包确认丢包位置:在cat上执行tcpdump -i any port 测试端口 and host dog的IP,同时在dog上发起连接。如果能抓到dog发来的SYN包但cat没回SYN+ACK包,实锤是cat本机的防火墙、终端安全软件拦了流量;如果抓不到SYN包,再去查中间交换机、路由器、网关的访问控制配置。

别浪费时间查客户端代码或者dog主机的配置:反向连接正常已经证明dog到cat的路由、客户端发包逻辑全是好的,问题只会出在cat接收外部连接的环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:09:14