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

Python Socket聊天室问题:服务器无法接收客户端消息

Python Socket聊天室无法实现消息收发问题

我正在使用Python Socket开发聊天室,已完成服务端与客户端代码编写,能够成功建立连接,但无法实现消息收发。客户端通过终端输入用户名与密码,我暂未实现密码校验功能,但即便如此消息仍无法正常发送。我已确认编码解码逻辑无误,且已实现多线程以支持多用户接入。我曾向助教求助,但未得到有效帮助。

服务端代码

import socket
import threading
import sys 


#TODO: Implement all code for your server here


#usernames = []

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

def handle_client(client_socket, client_address):
    try:
        
        password = client_socket.recv(1024).decode()
        username = client_socket.recv(1024).decode()
        print("user: " + username)
        clients.append(client_socket)
        while True:
            message = username + " joined the chatroom"
            print(message)
            broadcast(message.encode())

            message = client_socket.recv(1024).decode()
            if (message != ":Exit"):
                print(f"{username}: {message}")
                broadcast(message.encode())
            else:
                print(f"{username} left the chatroom")
                clients.remove(client_socket)
                client_socket.close()
                message = username + " left the chatroom"
                broadcast(message.encode())
                break
    except:
        client_socket.close()       
        
def receive():
    while True:
        client_socket, client_address = server.accept()
        print(client_socket)
        client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
        client_thread.start()

# Use sys.stdout.flush() after print statemtents

if __name__ == "__main__":
    HOST = '127.0.0.1'
    #PORT = int(sys.argv[1])

    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server.bind((HOST, 10001))
    server.listen(5)

    clients = []
    print("server is listening")
    receive()

客户端代码

import socket
import threading
import sys 



#TODO: Implement a client that connects to your server to chat with other clients here

HOST = '127.0.0.1'
#PORT = int(sys.argv[1])

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client_socket.connect((HOST, 10001))

username = sys.argv[1]
password = sys.argv[2]

client_socket.send(password.encode())
client_socket.send(username.encode())
reply = client_socket.recv(1024).decode()
print(reply)

def receive():
    while True:
        try:
            message = client_socket.recv(1024).decode()
            if message:
                print(message)
        except:
            continue

def write():
    while True:
        message = input()
        if message == ":Exit":
            client_socket.send(message.encode())
            client_socket.close()
            break
        else:
            client_socket.send(message.encode())

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

write_thread = threading.Thread(target=write)
write_thread.start()
# Use sys.stdout.flush() after print statemtents

if __name__ == "__main__":
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:31:00