跨机器连接出现[WinError 10061]错误的技术求助
问题分析与解决方案
错误[WinError 10061]的核心原因是服务器未监听外部可访问的网络接口,或者客户端未指向正确的服务器IP,同时防火墙可能拦截了连接请求。以下是具体修复步骤:
1. 修改服务器绑定地址
你的server.py中使用socket.gethostbyname(socket.gethostname())获取绑定IP,该方法可能返回本地回环地址(127.0.0.1),导致服务器仅能接收本机连接。将绑定地址改为0.0.0.0,让服务器监听所有可用网络接口:
修改server.py中的SERVER变量:
# 原代码 # SERVER = socket.gethostbyname(socket.gethostname()) # 修改为 SERVER = "0.0.0.0"
启动服务器后,可通过ipconfig(Windows)/ifconfig(Linux)获取本机内网IP(如192.168.x.x),后续客户端将使用该IP连接。
2. 修正客户端连接地址
你的client.py中同样使用socket.gethostbyname(socket.gethostname()),这会获取客户端自身IP而非服务器IP。需将SERVER变量改为服务器的实际IP:
修改client.py中的SERVER变量:
# 原代码 # SERVER = socket.gethostbyname(socket.gethostname()) # 修改为服务器的内网IP(示例) SERVER = "192.168.1.100"
注意:若服务器与客户端不在同一局域网,需配置公网端口映射,并使用服务器的公网IP
3. 正确配置防火墙
确保Windows防火墙允许Python程序或端口5050通过:
- 打开Windows Defender防火墙高级设置
- 添加入站规则:选择「端口」,输入5050,允许连接,应用到所有网络类型
- 或直接允许运行服务器的Python.exe程序通过防火墙
4. 验证网络连通性
在客户端机器上执行ping 服务器IP,测试是否能连通服务器;若ping不通,检查两台机器是否在同一网段,或路由器是否有隔离设置。
额外代码优化建议
- 当前
clients.index(client)会频繁遍历列表查找索引,可改用字典存储客户端与昵称的对应关系,提升性能 recv(HEADER)固定接收64字节,易出现消息截断或空字符拼接问题,建议先发送消息长度再发送内容,保证消息完整性
内容的提问来源于stack exchange,提问作者Rowan Gallagher
相关产品推荐
相关产品推荐

