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

Python Socket跨路由器连接Ubuntu报ConnectionRefusedError咨询

跨公网Socket连接ConnectionRefusedError [Errno 111] 排查方案

按以下顺序逐一排查,每步验证通过再走下一步:

  • 第一步:验证服务端端口监听状态
    在服务端设备执行命令:
    sudo ss -tulpn | grep 5000
    正常返回需存在python3进程绑定0.0.0.0:5000或:::5000的记录;如果仅绑定127.0.0.1:5000,说明服务仅监听本地回环,外部设备无法访问。当前示例代码bind空字符串默认监听所有地址,这步主要排查程序启动异常、端口被其他进程占用的问题。
  • 第二步:放行服务端本地防火墙
    Ubuntu默认启用ufw防火墙,先执行sudo ufw status查看规则,若没有5000/TCP端口允许入站的记录,执行以下命令放行:
    sudo ufw allow 5000/tcp
  • 第三步:配置服务端所在路由器的端口转发
    你通过curl拿到的公网IP归属服务端连接的路由器WAN口,并非服务端笔记本本身的地址,必须在服务端接入的路由器管理后台配置端口映射规则:将WAN口入站的5000/TCP请求,转发到服务端笔记本在局域网内的私有IP(可在服务端执行ip a查看对应网卡的inet地址获取,一般为192.168.x.x、10.x.x.x段)的5000端口。

    注意:如果查看路由器WAN口拿到的IP是10.x.x.x、100.64.x.x、172.16-31.x.x、192.168.x.x段的私有地址,说明运营商做了CGNAT,没有给你分配独立公网IP,普通端口转发无法生效,需要联系运营商申请公网IP,或使用内网穿透、虚拟组网方案实现连接。

  • 第四步:网络层连通性校验
    保持服务端程序运行,在客户端设备先执行端口连通性测试,不要直接运行业务代码:
    nc -zv 服务端公网IP 5000
    命令返回连接成功标识后,再运行客户端代码即可正常建立连接;如果仍返回连接拒绝,回退检查前面的防火墙、端口转发配置是否正确。
  • 第五步:排除客户端代码问题
    你当前客户端代码类属性myIP在__init__方法内直接引用存在作用域风险,测试阶段可以先用最简代码排除语法问题:
    import socket
    
    s = socket.socket()
    # 替换为实际服务端公网IP
    s.connect(("123.456.789.123", 5000))
    print("连接成功")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:18:28