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

Python Socket跨网络连接失败:ConnectionRefusedError问题求助

问题描述

近期尝试用Python的socket库实现文件传输,本地网络环境下传输正常,但切换至其他网络连接时出现错误:

ConnectionRefusedError: [WinError 10061] 由于目标计算机拒绝,连接无法建立。

服务器端代码

import socket
server= socket.socket (socket.AF_INET,socket.SOCK_STREAM)
server.bind(("0.0.0.0", 5000))
print(socket.gethostbyname(socket.gethostname()))
server.listen(2)
while True:
   client,addr=server.accept()
   client.send('Hello Client'.encode())
   print(client.recv(1024).decode())

客户端代码

import socket
client= socket.socket (socket.AF_INET,socket.SOCK_STREAM)
client.connect(("My public IP", 5000))
print(client.recv(1024).decode())
client.send('Hello Server!'.encode())

已尝试操作

  • 开放端口5000、关闭防火墙,问题未解决
  • 使用telnet测试连接失败,命令及结果:
telnet "My IP" 5000
Connecting to “My IP”...Failed to open a connection to this node on port 5000: Connection failed

解决方案
  1. 确认公网IP与网络类型
    先确认服务器所在网络是否分配了真实公网IP。多数家庭网络是运营商通过NAT转换的内网IP,外部网络无法直接访问。可通过路由器管理页面或运营商工具查询;若为内网IP,需在路由器上配置端口转发,将外部5000端口映射到服务器内网IP的5000端口。

  2. 检查端口转发配置
    若服务器在NAT网络下,路由器端口转发规则需设置:

    • 外部端口:5000
    • 内部IP:服务器的内网IP(Windows用ipconfig、Linux用ifconfig查看)
    • 内部端口:5000
    • 协议选择TCP
  3. 排查防火墙与安全限制

    • 除本地防火墙,需确认运营商防火墙或云服务器安全组(若用云主机)是否开放5000端口,部分运营商会默认屏蔽非常用端口,可联系运营商核实。
    • 临时关闭服务器所有防火墙(系统防火墙+第三方安全软件),重新用telnet测试,排除拦截可能。
  4. 验证服务器监听状态
    在服务器上执行命令检查端口监听情况:

    • Windows:netstat -ano | findstr :5000
    • Linux:netstat -tulpn | grep 5000
      确认端口5000的监听地址是0.0.0.0(监听所有网卡),若监听地址为127.0.0.1或特定内网IP,外部网络无法连接。
  5. 测试本地公网访问
    在服务器所在网络内,用公网IP访问5000端口:

    • 若无法连接,说明端口转发或公网IP配置有误;
    • 若能连接,需检查外部网络是否有限制(比如公共网络屏蔽出站端口)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 04:42:06