Python Socket编程跨设备无法建立连接问题咨询
Socket跨机器连接问题解答
核心疑问回复
server.bind需要填写服务端自身要监听的网卡地址,client.connect需要填写客户端可访问到服务端的网络地址,两处IP不需要完全一致,但都要对应服务端的有效可访问地址。- 你当前跨机器连接失败和IP填写规则错误、网络/端口限制相关,和两处IP是否一致没有直接关系。
跨机器连接失败排查步骤
- 修正服务端监听地址
如果你在server.bind中填写的是127.0.0.1,服务端只会接受本机的连接请求,其他机器的请求会被直接拒绝。如果要允许所有外部机器访问,服务端监听IP直接填写0.0.0.0即可,不需要填服务端的具体物理IP。 - 检查端口访问权限
服务端设备的系统防火墙需要放开9999端口的TCP入站规则,如果服务端部署在云服务器上,还需要在云平台的安全组配置中放开9999端口的入站权限。 - 验证网络连通性
先在客户端设备上执行ping 服务端IP命令,确认网络链路是通的;再执行telnet 服务端IP 9999命令验证端口可访问,验证通过后再运行代码测试。
IP填写规范
- 服务端
bind参数可选值:- 填
127.0.0.1:仅允许本机客户端连接,适合本地调试 - 填服务端某块网卡的具体IP:仅允许访问该网卡IP的请求连接,适合多网卡隔离场景
- 填
0.0.0.0:允许所有网卡的请求连接,跨机器部署优先选择该值
- 填
- 客户端
connect参数填写规则:
同局域网部署填服务端的局域网IP,跨公网部署填服务端的公网IP,只要该地址能被客户端正常访问即可,不需要和服务端bind的IP完全相同。
额外代码优化建议
你当前make_socket函数中绑定失败后递归调用自身的写法存在栈溢出风险,建议改成循环重试加等待间隔的逻辑,避免连续绑定失败导致程序崩溃。
内容的提问来源于stack exchange,提问作者Samyak Marathe
相关产品推荐
相关产品推荐

