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

Python TCP聊天客户端连接错误求助(NeuralNine教程)

问题排查与修复

服务器端代码错误

  1. 语法拼接错误(第45行):代码笔误导致clients.append(clienprint(...))逻辑混乱,需拆分客户端添加与昵称打印操作。
  2. 线程类名错误(第51行):threading.thread应为threading.Thread(首字母大写),否则会触发属性查找异常。
  3. 索引获取逻辑错误(第28行):client.index(client)是无效调用,需通过clients.index(client)获取客户端在列表中的索引。

客户端代码错误

  1. 编码与发送顺序颠倒(第17行):client.send(nickname).encode('ascii')会先发送字符串,再对send()返回的整数调用encode(),直接触发异常,正确顺序是先编码再发送。
  2. (可选)函数名拼写修正:recieve建议改为标准拼写receive,避免语义混淆。
  3. (可选)异常捕获优化:替换裸except为具体异常捕获,便于调试时查看错误详情。

修正后的服务器端代码

import socket
import threading
from signal import signal, SIGPIPE, SIG_DFL

signal(SIGPIPE, SIG_DFL)

host = '127.0.0.1'  # localhost
port = 55555

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host, port))
server.listen()

clients = []
nicknames = []


def broadcast(message):
    for client in clients:
        client.send(message)


def handle(client):
    while True:
        try:
            message = client.recv(1024)
            broadcast(message)
        except:
            index = clients.index(client)
            clients.remove(client)
            client.close()
            nickname = nicknames[index]
            nicknames.remove(nickname)
            broadcast(f'{nickname} left the chat'.encode('ascii'))
            break


def receive():
    while True:
        client, address = server.accept()
        print(f'Connected with {str(address)}')

        client.send('NICK'.encode('ascii'))
        nickname = client.recv(1024).decode('ascii')
        nicknames.append(nickname)
        clients.append(client)
        print(f'Nickname of the client is {nickname}')
        broadcast(f'{nickname} joined the chat'.encode('ascii'))
        client.send('Connected to the server'.encode('ascii'))

        thread = threading.Thread(target=handle, args=(client,))
        thread.start()


print('Server is Listening.....')
receive()

修正后的客户端代码

import socket
import threading

nickname = input("Choose a nickname: ")

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 55555))


def receive():
    while True:
        try:
            message = client.recv(1024).decode('ascii')
            if message == "NICK":
                client.send(nickname.encode('ascii'))
            else:
                print(message)
        except Exception as e:
            print(f"An error occurred: {e}")
            client.close()
            break


def write():
    while True:
        message = f'{nickname}: {input("")}'
        client.send(message.encode('ascii'))


receive_thread = threading.Thread(target=receive)
receive_thread.start()

write_thread = threading.Thread(target=write)
write_thread.start()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:43:19