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

求助:使用Python Socket跨网络连接两台电脑时遇超时及路由不可达错误

解决跨网络Socket连接的Timeout和No Route错误

我来帮你一步步排查并解决这两个连接错误,你的代码和网络配置里有几个关键问题需要调整:

1. 代码层面的核心问题

服务器绑定地址错误

你的server.py里绑定了"127.0.0.1"——这个是本地回环地址,只能让同一台机器上的程序访问,其他网络的电脑根本找不到这个Socket服务。你需要改成绑定服务器的公网IP,或者更通用的"0.0.0.0"(表示监听服务器上所有可用的网络接口)。

端口不匹配

服务器端绑定的是80端口,但客户端连接的是8820端口,两边端口完全不一致,这肯定连不上。另外80是HTTP的默认端口,通常需要管理员权限才能使用,建议改用1024以上的非知名端口(比如统一用8820)。

修改后的代码示例

修正后的server.py

import socket
server_socket = socket.socket()
# 绑定所有网络接口,端口统一为8820
server_socket.bind(("0.0.0.0", 8820))
server_socket.listen(1)
(client_socket, client_address) = server_socket.accept()
print(f"client_connected [{client_address[0]}]")
client_command = client_socket.recv(1024).decode()
print(f"Received command: {client_command}")
# 给客户端发送一个回复,避免客户端recv阻塞报错
client_socket.send("Command received successfully".encode())
# 关闭连接
client_socket.close()
server_socket.close()

修正后的client.py

import socket
client_socket = socket.socket()
# 替换成服务器的真实公网IP,端口和服务器保持一致
client_socket.connect(("your_server_public_ip", 8820))
client_command = input("command: ")
client_socket.send(client_command.encode())
data = client_socket.recv(1024).decode()
print("server: " + data)
client_socket.close()

2. 网络层面的必要配置

代码改对了还不够,跨网络连接还需要解决网络通路的问题:

  • 开放服务器防火墙端口:不管是服务器系统自带的防火墙(比如Linux的ufw allow 8820/iptables,Windows Defender防火墙的入站规则),还是云服务商的安全组(如果是云服务器),都必须允许外部访问8820端口。
  • 端口转发(针对局域网内的服务器):如果你的服务器是在家庭/公司局域网里,没有直接的公网IP,那需要登录路由器设置端口转发——把路由器的8820端口转发到服务器的内网IP(比如192.168.1.100)和8820端口。
  • 确认公网IP正确性:在服务器上执行curl ifconfig.me(Linux)或者访问IP查询网站(Windows),获取真实的公网IP,客户端必须用这个IP才能连接。

错误原因解释

  • TimeoutError: [Errno 110] Connection timed out:通常是因为服务器没有监听正确的地址/端口,或者防火墙拦截了连接请求,客户端无法建立连接。
  • OSError: [Errno 113] No route to host:一般是客户端无法找到到达服务器的网络路径,可能是IP填写错误、服务器所在网络没有做端口转发,或者路由配置有问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:21:57