同一机器内客户端与服务器Connection refused[Errno111]问题排查
排查「Connection refused」问题的几个关键点
这问题我之前调试socket程序时也碰到过好几次,咱们一步步拆解可能的原因:
先确认客户端的连接目标完全正确
别小看这个基础点!很多时候是客户端代码里的IP/端口写错了——比如服务器明明监听7779,客户端却写成7778;或者客户端连接的是'192.168.x.x'而非本地回环的'127.0.0.1'/'localhost'。一定要检查客户端connect()方法的参数,确保是('127.0.0.1', 7779)或者对应正确的本地地址。验证服务器是否真正完成了监听绑定
虽然服务器打印了「Listening in: 0.0.0.0:7779」,但有可能是代码逻辑顺序错了——比如先输出了提示,再执行bind()和listen(),甚至这两个关键步骤没执行/执行出错却没捕获异常。对照你的服务器代码,确保流程是:import socket server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 必须正确绑定地址和端口 server.bind(('0.0.0.0', 7779)) # 启动监听队列 server.listen(5) # 确认监听成功后再输出提示 print("Listening in: 0.0.0.0:7779") # 后续的accept循环 while True: conn, addr = server.accept() # 处理连接逻辑另外可以用命令确认服务器进程是否真的在监听端口:
- Linux/macOS:
lsof -i :7779或netstat -tulpn | grep 7779 - Windows:
netstat -ano | findstr :7779
- Linux/macOS:
检查客户端的连接时机
会不会是服务器还没完成监听初始化,客户端就急着发起连接了?比如服务器启动后有其他耗时的初始化操作,导致listen()还没执行,客户端就调用了connect()。可以试试手动等服务器输出监听提示后,再启动客户端;或者调整服务器代码,确保listen()执行完成后再打印提示信息。排除本地网络策略干扰
虽然是本地连接,但某些系统的防火墙、安全软件可能会拦截自研程序之间的网络请求,允许nc但阻止你的Python程序。可以临时关闭防火墙测试,或者检查系统的应用网络权限设置。
内容的提问来源于stack exchange,提问作者Ed S
相关产品推荐
相关产品推荐

