两台树莓派间TCP连接更换开发设备后连接失败问题求助
TCP连接失败排查方案
代码排查项
- 补充错误日志输出:将客户端
connect判断分支中的printf("\nConnection Failed \n")替换为perror("connect failed"),可直接获取系统级错误原因(比如连接超时、连接被拒绝、路由不可达等),快速缩小排查范围。 - 校验端口一致性:确认客户端和服务端代码中
PORT宏的数值完全匹配,避免两边端口定义不一致导致连接失败。 - 排除上层逻辑阻塞:客户端
main函数中的scanf("hey")需要输入完全匹配的hey字符串才会继续执行,configureGPIOs、launchTests函数也可能存在阻塞逻辑,可先注释掉这三行代码,直接调用configurationTCP测试TCP连接逻辑,排除上层逻辑的干扰。
网络排查项
- 基础连通性校验:在笔记本终端执行
ping 192.168.137.193,确认笔记本和运行服务端的树莓派网络连通,如果ping不通,说明是局域网配置问题,和代码无关。 - 端口可达性校验:ping通后执行
telnet 192.168.137.193 [你的PORT端口号],如果telnet连接失败,说明服务端端口未对外开放或者被防火墙拦截:- 登录服务端树莓派执行
sudo ufw status查看防火墙状态,若防火墙开启,执行sudo ufw allow [你的PORT端口号]放行对应端口。 - 服务端树莓派执行
ss -tulpn | grep [你的PORT端口号],确认服务端程序启动后,对应端口处于LISTEN状态。
- 登录服务端树莓派执行
- 网段一致性校验:192.168.137.x通常是Windows移动热点默认网段,确认笔记本和树莓派处于同一局域网下,没有跨网段导致路由不可达。
快速验证方案
在运行服务端的树莓派本地编译运行客户端代码,将客户端IP改为127.0.0.1测试,如果本地可以正常连接,说明代码逻辑无问题,故障由网络配置导致。
内容的提问来源于stack exchange,提问作者Jeanlqs
相关产品推荐
相关产品推荐

