From 23dc75285f976d43c44281a7c428e2ed46f8529a Mon Sep 17 00:00:00 2001 From: DZY Date: Fri, 13 Jun 2025 20:32:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E4=B8=8D=E5=88=B0=E5=95=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CS3.1.py | 55 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 41 insertions(+), 14 deletions(-) diff --git a/CS3.1.py b/CS3.1.py index 3849d7d..24b78b2 100644 --- a/CS3.1.py +++ b/CS3.1.py @@ -147,7 +147,7 @@ def chat(): def broadcast_message(message, sender=None): for conn in chat_connections: try: - conn.sendall(json.dumps(message).encode()) + conn.sendall(json.dumps(message).encode('utf-8')) except: # 连接异常时移除 for uname, info in list(active_connections.items()): @@ -163,7 +163,7 @@ def handle_socket_message(data, addr, conn): if action == 'register': avatar = data.get('avatar', 'default_avatar.png') result = register_user(data.get('username'), data.get('password'), avatar) - conn.sendall(json.dumps(result).encode()) + conn.sendall(json.dumps(result).encode('utf-8')) return result elif action == 'login': @@ -177,7 +177,7 @@ def handle_socket_message(data, addr, conn): "status": "error", "message": "Account already logged in" } - conn.sendall(json.dumps(response).encode()) + conn.sendall(json.dumps(response).encode('utf-8')) return response if isuserxist(username) and ispsswdright(username, password): @@ -203,7 +203,7 @@ def handle_socket_message(data, addr, conn): "username": username, "avatar": avatar # 返回头像 } - conn.sendall(json.dumps(response).encode()) + conn.sendall(json.dumps(response).encode('utf-8')) return response else: response = { @@ -211,18 +211,28 @@ def handle_socket_message(data, addr, conn): "status": "error", "message": "Invalid credentials" } - conn.sendall(json.dumps(response).encode()) + conn.sendall(json.dumps(response).encode('utf-8')) return response elif action == 'chat': - username = validate_token(data.get('token', '')) + token = data.get('token') + if not token: + response = { + "type": "chat", + "status": "error", + "message": "Missing token" + } + conn.sendall(json.dumps(response).encode('utf-8')) + return response + + username = validate_token(token) if not username: response = { "type": "chat", "status": "error", - "message": "Not authenticated" + "message": "Invalid token" } - conn.sendall(json.dumps(response).encode()) + conn.sendall(json.dumps(response).encode('utf-8')) return response if username not in active_connections: @@ -231,7 +241,7 @@ def handle_socket_message(data, addr, conn): "status": "error", "message": "Not logged in" } - conn.sendall(json.dumps(response).encode()) + conn.sendall(json.dumps(response).encode('utf-8')) return response message = { @@ -241,10 +251,18 @@ def handle_socket_message(data, addr, conn): "avatar": get_avatar(username) # 添加头像 } broadcast_message(message) - return {"type": "chat", "status": "success"} + # 返回成功响应 + response = {"type": "chat", "status": "success"} + conn.sendall(json.dumps(response).encode('utf-8')) + return response except Exception as e: - return {"status": "error", "message": str(e)} + response = { + "status": "error", + "message": str(e) + } + conn.sendall(json.dumps(response).encode('utf-8')) + return response def run_socket_server(): socket_server.bind(("localhost", 8889)) @@ -260,7 +278,9 @@ def run_socket_server(): break try: - json_data = json.loads(data.decode()) + # 尝试解码为UTF-8,忽略错误字符 + decoded_data = data.decode('utf-8', errors='ignore') + json_data = json.loads(decoded_data) response = handle_socket_message(json_data, addr, conn) except json.JSONDecodeError: response = { @@ -268,7 +288,14 @@ def run_socket_server(): "status": "error", "message": "Invalid JSON" } - conn.sendall(json.dumps(response).encode()) + conn.sendall(json.dumps(response).encode('utf-8')) + except Exception as e: + response = { + "type": "error", + "status": "error", + "message": str(e) + } + conn.sendall(json.dumps(response).encode('utf-8')) except (ConnectionResetError, BrokenPipeError): print(f"Client {addr} disconnected abruptly") finally: @@ -294,6 +321,6 @@ if __name__ == '__main__': conn.execute('''CREATE TABLE IF NOT EXISTS users (name TEXT PRIMARY KEY, passwd TEXT, - avatar TEXT)''') + avatar TEXT DEFAULT 'default_avatar.png')''') threading.Thread(target=run_socket_server, daemon=True).start() app.run(port=5001) \ No newline at end of file