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

Python Sockets连接远程服务器出现ConnectionRefusedError的排查与解决

Python Socket连接远程服务器时遭遇ConnectionRefusedError的排查与解决

我正在开发一款需通过Sockets连接远程服务器的Python应用,但尝试连接时遭遇ConnectionRefusedError。以下是我的代码片段:

import socket

host = 'example.com'
port = 8080

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    client_socket.connect((host, port))
except ConnectionRefusedError as e:
    print(f"Error: {e}")
finally:
    client_socket.close()

我已确认服务器正在运行并监听指定端口,但连接仍被拒绝。请问该错误的可能原因是什么?如何排查并解决?


可能的原因及排查解决方法

  • 服务器监听IP限制
    服务器可能仅绑定了127.0.0.1(本地回环地址),只允许本机连接,外部客户端无法访问。

    • 排查:在服务器上执行netstat -anp | grep 8080(Linux)或netstat -ano | findstr :8080(Windows),查看监听地址是否为0.0.0.0(允许所有IP访问)或服务器的公网/局域网IP。
    • 解决:修改服务器端代码,将socket绑定到0.0.0.0或指定的可访问IP,例如:server_socket.bind(('0.0.0.0', 8080))。
  • 防火墙/安全组拦截
    服务器本地防火墙(如ufw、iptables)或云服务商的安全组未开放8080端口的入站规则。

    • 排查:在服务器上用telnet localhost 8080能成功连接,但客户端用telnet example.com 8080连接失败,基本可以确定是防火墙问题。
    • 解决:在服务器防火墙添加允许8080端口的入站规则;如果是云服务器,登录云控制台在安全组中开放8080端口的TCP入站权限。
  • 域名解析错误
    example.com解析的IP地址与服务器实际公网IP不匹配。

    • 排查:在客户端执行nslookup example.com或ping example.com,查看解析出的IP,和服务器的公网IP对比是否一致。
    • 解决:修正域名的A记录解析,或者直接用服务器的实际IP替换代码中的example.com进行测试。
  • 端口占用或监听端口不一致
    服务器实际监听的端口不是8080,或者8080端口被其他进程占用。

    • 排查:在服务器上用netstat命令检查8080端口的监听进程,确认是目标服务器进程在监听。
    • 解决:如果端口被占用,杀掉占用进程或修改服务器监听端口;如果是代码中端口不一致,同步客户端和服务器的端口配置。
  • 网络路由或连通性问题
    客户端与服务器之间的网络不通,比如客户端在受限局域网、路由节点丢包等。

    • 排查:在客户端执行ping 服务器IP看是否能连通,用traceroute 服务器IP(Linux)或tracert 服务器IP(Windows)查看路由路径是否有中断或丢包。
    • 解决:检查客户端网络配置,确保能访问服务器所在网络;如果是跨运营商网络问题,可尝试更换网络环境测试。
  • 服务器端未完全进入监听状态
    服务器代码可能还没执行到listen()方法,或者启动过程中出现异常导致监听中断。

    • 排查:查看服务器端日志,确认是否有"监听成功"的提示;或者在客户端发起连接前,先用telnet手动测试服务器端口是否可连接。
    • 解决:确保服务器代码完全启动并成功调用listen()后,再发起客户端连接;检查服务器代码的异常处理逻辑,避免监听过程中意外终止。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:01:30