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

如何解决跨机器连接Python井字棋Socket时的ConnectionRefusedError: [WinError 10061]

排查与解决跨机器Socket连接拒绝问题(WinError 10061)

1. 修正服务端绑定地址

服务端如果使用socket.gethostbyname(socket.gethostname())绑定地址,在Windows环境下常出现解析到127.0.0.1(本地回环)的情况,导致服务仅监听本机接口,外部机器无法连接。

  • 解决:将服务端绑定地址改为0.0.0.0,让服务监听所有可用网络接口:
    server_socket.bind(('0.0.0.0', 5131))
    
  • 验证:在服务端执行命令netstat -ano | findstr :5131,确认LISTENING状态的地址为0.0.0.0而非127.0.0.1。

2. 客户端使用正确的服务端IP

跨机器连接时,客户端不能用socket.gethostbyname(socket.gethostname())(这是获取客户端自身的IP),必须指定服务端机器的实际对外IP:

  • 在服务端机器通过ipconfig(Windows)查看以太网/Wi-Fi的IPv4地址,比如192.168.1.105
  • 客户端代码修改为:
    client_socket.connect(('192.168.1.105', 5131))
    

3. 重新校验防火墙规则

  • 确认服务端的防火墙规则允许入站TCP 5131连接,客户端规则允许出站TCP 5131连接
  • 检查规则是否应用到当前网络环境对应的配置文件(如专用/公网网络),避免规则仅在特定网络生效
  • 临时测试:关闭服务端防火墙后尝试连接,若成功则说明规则配置有误,需重新调整规则范围或优先级

4. 测试网络连通性与端口可达性

  • 在客户端执行ping 服务端IP,确认两台机器处于同一网络且能互通
  • 若ping通但连接失败,执行telnet 服务端IP 5131测试端口是否开放:
    • 若telnet无法连接,说明服务端未正确监听端口或中间存在拦截
    • 若telnet能连接,问题可能出在Socket代码逻辑,需检查服务端的accept逻辑或客户端的连接流程

5. 确认服务端正常监听

  • 服务端启动后,执行netstat -ano | findstr :5131,确保存在LISTENING状态的条目,且对应PID为你的Python进程
  • 若没有LISTENING条目,检查服务端代码的bind和listen调用是否正常执行,有无未捕获的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 06:03:21