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

Python Socket客户端连接服务端被拒绝问题求助

Socket连接被拒绝问题排查及修复

核心问题说明

连接被拒绝主要由服务端代码逻辑错误、主机名解析异常、启动顺序错误三类原因导致,具体排查点和修复方案如下:

1 错误点整理

  • 服务端变量名调用错误:服务端中server_data = client.recv(4096)、client_close()两行存在核心错误,client是客户端代码的变量名,服务端接收连接后返回的连接对象是conn,没有全局的client变量和client_close()函数,需要改为调用conn的对应方法。
  • 重复读取逻辑错误:客户端仅发送了一次数据,服务端已经通过conn.recv(4096)读取过数据,二次调用recv会导致进程阻塞。
  • 主机名解析潜在风险:socket.gethostname()返回的主机名可能解析到非本地环回地址,客户端和服务端解析结果不一致时就会出现连接拒绝,本地测试建议统一使用127.0.0.1。
  • 启动顺序错误:必须先启动服务端监听端口,再启动客户端发起连接,否则客户端会直接报连接拒绝。

2 修正后代码

客户端代码 socket_client.py

import socket

# 本地测试使用环回地址,避免解析错误
host = '127.0.0.1'
port = 8080

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))
client.send(b' testing data send...')
client.close()

服务端代码 socket_server.py

import socket

host = '127.0.0.1'
port = 8080 
    
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen(10)

x = 0
server_data = []
while True:
    conn, addr = server.accept()  
    data = conn.recv(4096).decode()
    x += 1
    print(f'服务第{x}个客户端,客户端地址:{addr[0]},接收数据:{data}')
    # 处理完成后关闭当前连接
    conn.close()
server.close()

3 额外注意事项

  • 启动前确认8080端口未被其他进程占用:Windows可执行netstat -ano | findstr 8080,Linux/macOS可执行lsof -i:8080检查端口占用情况。
  • 若需要跨设备访问,服务端需要绑定0.0.0.0,客户端连接时填写服务端所在设备的局域网IP。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:57:02