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

Python3.9 TCP聊天室新增管理员功能后报WinError 10053连接中断错误

故障原因及修复方案

核心错误点

服务端致命错误(直接导致崩溃)

  1. 封禁逻辑的对象调用错误
    在服务端receive函数的封禁判断块中,你错误调用了客户端列表clients的send方法:
# 错误写法
clients.send('BAN'.encode('ascii'))

clients是存储所有已连接客户端对象的列表,本身不存在send方法,调用后会直接触发服务端异常崩溃。

  1. 管理员身份判断逻辑错误
    在handle函数中校验操作人是否为管理员时,你错误调用了客户端对象本身的index方法:
# 错误写法
if nicknames[client.index(client)] == 'admin':

client是单个socket连接对象,没有index方法,正确逻辑是从clients列表中获取当前对象的索引:

# 正确写法
if nicknames[clients.index(client)] == 'admin':
  1. 潜在文件不存在报错
    首次运行时如果本地没有bans.txt文件,服务端读取文件时会触发FileNotFoundError直接崩溃。

客户端错误(触发连接断开抛出10053)

  1. socket方法拼写错误
    客户端receive函数存在2个方法名拼写错误,直接导致客户端收到指令后异常断开连接:
  • 错误写法:next_message = client.serv(1024).decode('ascii'),不存在serv方法,正确为recv
  • 错误写法:if client.rect(1024).decode('ascii') == 'REFUSE':,不存在rect方法,正确为recv
  1. 指令判断顺序错误
    客户端发完昵称后的指令判断顺序和服务端发送顺序不匹配,会导致封禁、密码校验逻辑错乱。

修复代码片段

服务端修复

  1. 修正封禁逻辑调用对象:
if nickname+'\n' in bans:
    client.send('BAN'.encode('ascii'))
    client.close()
    continue
  1. 新增bans.txt存在性校验,在读取bans.txt前加:
import os
if not os.path.exists('bans.txt'):
    open('bans.txt', 'w').close()
  1. 修正管理员身份判断逻辑:
if nicknames[clients.index(client)] == 'admin':

客户端修复

  1. 修正socket方法拼写,调整逻辑顺序:
if message == 'NICK':
    client.send(nickname.encode('ascii'))
    next_message = client.recv(1024).decode('ascii')
    if next_message == 'BAN':
        print('Connessione negata, sei bannato!')
        client.close()
        stop_thread = True
    elif next_message == 'PASS':
        client.send(password.encode('ascii'))
        check_msg = client.recv(1024).decode('ascii')
        if check_msg == 'REFUSE':
            print("Password sbagliata!")
            stop_thread = True

修复完成后即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:06:10