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

跨Windows机器Python Socket公网连接超时问题求助

公网Python Socket客户端连接超时问题

问题背景

在两台Windows机器上尝试通过公网用Python Socket实现客户端与服务器连接,客户端始终报超时错误。

服务器端代码

import socket
def getPublicIP():
    import requests
    response = requests.get("https://api.ipify.org")
    return response.text
serverAddressPublic = getPublicIP()
print('serverAddressPublic:',serverAddressPublic)
serverAddressPrivate = socket.gethostbyname(socket.gethostname())
serverAddressPrivate = "0.0.0.0"#也试过这个值
print('serverAddressPrivate:',serverAddressPrivate)
serverSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverAddressPrivateAndPort = (serverAddressPrivate, 10001)
serverSocket.bind(serverAddressPrivateAndPort)
serverSocket.listen()
print(f"[LISTENING] server is listening on {serverAddressPublic}")
print(f"[LISTENING] server is listening on {serverAddressPrivate}")
clientSocket, clientAddress = serverSocket.accept()
print(f'connected to {(clientSocket, clientAddress)}')

已尝试用socket.gethostbyname(socket.gethostname())和0.0.0.0作为服务器私有IP。

客户端代码

import socket
clientSocket=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serverAddress='publicIPofServer'#替换为服务器公网IP
print('before connected')
clientSocket.connect((serverAddress,10001))
print('after connected')

报错信息

客户端抛出超时错误:

TimeoutError: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond

本地测试操作

  • 在服务器端执行telnet publicIPofServer 10001和telnet privateIPofServer 10001,均返回:
    Connecting To 0.0.0.0...Could not open connection to the host, on port 10001: Connect failed
    
  • 执行端口开放命令netsh firewall set portopening TCP 10001 serverclientpythoncode显示成功,但再次用telnet 0.0.0.0 10001测试仍连接失败。

更新信息

  1. 另外两台机器执行相同端口开放命令后可正常连接,但个人电脑即使在Windows Defender防火墙高级安全中创建入站规则仍无法连接,netstat -an | find "LISTENING"显示0.0.0.0:10001处于监听状态。
  2. 完全关闭防火墙后仍无法连接,甚至无法ping通该PC,已通过5个不同网站确认公网IP正确。

排查与解决建议

  • 检查网络环境:确认服务器所在网络是否为NAT共享环境(如家庭宽带),若运营商使用CGNAT,公网IP为共享地址,无法直接被外部访问。可联系运营商获取独立公网IP,或使用内网穿透工具。
  • 局域网连通性验证:先在局域网内用服务器私有IP测试客户端连接,确认Socket代码本身无问题。若局域网内可连接,再排查公网层面问题。
  • 路由器端口映射:若服务器在路由器后方,需在路由器后台配置端口映射,将公网10001端口转发到服务器私有IP的10001端口。
  • 第三方安全软件检查:即使关闭系统防火墙,第三方杀毒或安全软件可能仍有连接拦截规则,可临时关闭这类软件测试。
  • Ping不通问题排查:Ping不通说明网络层面存在阻断,可检查路由器是否禁用ICMP协议,或运营商是否屏蔽了Ping请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:00:39