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

WinError 10057:Python TCP服务器无法接收本地客户端连接问题

问题分析与解决方案

核心错误点

  • 错误使用监听套接字收发数据:服务器中s是监听套接字,仅负责接受新连接,不能直接执行recv操作,必须用accept()返回的conn套接字处理数据交互。
  • 代码缩进错误:fragments.append(chunk)和数据拼接逻辑未包含在while循环内,导致循环结束后才尝试添加数据,此时chunk已为空。
  • 字节拼接方式错误:'b'.join(fragments)是字符串拼接逻辑,但接收的chunk是字节类型,需使用b''.join(fragments)完成字节数组拼接。

修正后的服务器代码

import socket

HOST = 'localhost'
PORT = 12345

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print("\n Server is listening on port :", PORT, "\n")
    conn, addr = s.accept()
    fragments = []
    with conn:
        print(f"Connected by {addr}")
        while True:
            chunk = conn.recv(4096)  # 使用已连接的conn套接字接收数据
            if not chunk:
                break
            fragments.append(chunk)  # 将接收的字节块加入列表(缩进在循环内)
        arr = b''.join(fragments)  # 正确拼接字节数组
        print(arr[0])

客户端代码优化建议

客户端存在冗余创建套接字的问题,with socket.socket(...) as s已创建套接字,无需重复执行s=socket.socket(),修正后:

import socket

HOST = 'localhost'
PORT = 12345
transmit = b"your_encoded_data_here"

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect((HOST, PORT))
    s.sendall(transmit)

错误原因说明

WinError 10057的本质是:你试图用未建立连接的监听套接字执行recv操作,监听套接字仅用于接受新连接请求,数据收发必须通过accept()返回的已连接套接字完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 14:10:26