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

Python Socket服务器仅接收第一条消息后停止运行问题求助

问题排查与解决

核心问题原因

服务端代码存在逻辑结构错误:recv() 数据接收逻辑仅在新连接建立(accept() 返回)时执行一次,执行完成后立刻回到循环顶部,重新执行listen()后阻塞在accept()等待新连接,不会持续读取已建立旧连接上的后续数据,因此只能收到客户端发送的第一条消息。

修复后的server.py代码

以下方案适配你当前的单客户端测试场景,可实现同一连接下持续接收消息:

# -*- coding: utf-8 -*-
import socket

HOST = 'localhost'
PORT = 1602

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('localhost', PORT))
# listen仅需在服务启动时执行一次,无需放入循环
server_socket.listen(5)
print(f"服务端启动,监听端口{PORT}")

while True:
    client, address = server_socket.accept()
    print(f"{address} 已连接")
    # 新增内层循环,持续读取当前连接的所有数据
    while True:
        try:
            response = client.recv(1024)
            # 客户端正常断开时recv会返回空字节,退出内层循环
            if not response:
                break
            print(response.decode())
        except ConnectionResetError:
            # 处理客户端异常断开的情况
            print(f"{address} 异常断开")
            break
    print(f"{address} 连接关闭")
    client.close()

额外优化建议

  • 原代码中将socket实例直接命名为socket,会覆盖导入的socket模块名,建议修改为server_socket这类无冲突的命名
  • 如果需要同时处理多个客户端连接,可以选择多线程或IO多路复用方案,上述单连接循环读取方案足以覆盖你的测试需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:54:02