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
相关产品推荐
相关产品推荐

