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

Python TCP通信出现WinError 10053连接中断报错如何排查解决?

报错诱因
  • 服务端逻辑缺陷:socketserver.TCPServer默认会在handle()方法执行结束后自动关闭当前客户端的TCP连接。你当前的服务端handle方法仅完成1次消息接收、1次响应回发就执行完毕,直接主动断开了和客户端的连接。
  • 客户端逻辑缺陷:客户端接收线程是死循环持续调用sock.recv()读取套接字数据,没有处理连接断开的场景,当服务端关闭连接后仍尝试从已失效的套接字读取数据,就触发了ConnectionAbortedError: [WinError 10053]报错。
修复方案

1. 服务端修改

调整handle方法逻辑,增加循环持续处理同一客户端的多次消息请求,不要处理一次就退出:

import socketserver

class TCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        # 循环处理同个客户端的多次消息
        while True:
            self.data = self.request.recv(1024)
            # recv返回空字节说明客户端已主动断开连接,退出循环释放连接
            if not self.data:
                break
            print(self.data.decode("UTF-8").strip())
            # 回发响应
            self.request.sendall(self.data)

if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    # 开启端口复用,避免重启服务时出现端口占用报错
    socketserver.TCPServer.allow_reuse_address = True
    with socketserver.TCPServer((HOST, PORT), TCPHandler) as server:
        server.serve_forever()

如果需要同时支持多个客户端连接,把代码中的TCPServer替换为socketserver.ThreadingTCPServer即可,其余逻辑无需改动。

2. 客户端修改

调整接收函数逻辑,增加连接异常、连接断开的判断与处理逻辑,避免出现未捕获的报错:

def recieve():
    while True:
        try:
            received = sock.recv(1024)
            # 空字节说明服务端已断开连接
            if not received:
                print("与服务端的连接已断开")
                sock.close()
                break
            received = received.decode("UTF-8")
            print(received)
        except (ConnectionAbortedError, ConnectionResetError, OSError):
            print("连接异常中断,程序即将退出")
            sock.close()
            break

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:15:03