酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

写一个聊天程序

我可以帮助你设计一个简单的聊天程序。为了简化问题,我们将使用Python和Socket库来创建一个基本的TCP聊天服务器和客户端。这个程序将允许多个客户端连接到服务器,并在客户端之间发送消息。 服务器端代码 首先,我们编写服务器端的代码: ```python import socket import threading # 全局变量,存储已连接的客户端套接字和地址 clients = [] def handle_client(client_socket, client_address): """处理客户端连接""" print(f"Accepted connection from {client_address}") # 将客户端套接字和地址添加到全局列表中 clients.append((client_socket, client_address)) try: while True: # 接收来自客户端的消息 message = client_socket.recv(1024).decode('utf-8') if not message: break # 客户端断开连接 # 广播消息给所有客户端 for client_sock, _ in clients: if client_sock != client_socket: client_sock.send(message.encode('utf-8')) except ConnectionResetError: print(f"Connection from {client_address} reset") finally: # 从全局列表中移除客户端 clients.remove((client_socket, client_address)) client_socket.close() def start_server(host='127.0.0.1', port=65432): """启动服务器""" server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind((host, port)) server.listen(5) print(f"Server listening on {host}:{port}") while True: client_socket, client_address = server.accept() client_handler = threading.Thread(target=handle_client, args=(client_socket, client_address)) client_handler.start() if __name__ == "__main__": start_server() ``` 客户端代码 接下来,我们编写客户端的代码: ```python import socket import threading def receive_messages(sock): """接收来自服务器的消息""" while True: try: message = sock.recv(1024).decode('utf-8') if not message: break # 服务器断开连接 print(f"Received: {message}") except ConnectionResetError: print("Connection to server reset") break def start_client(host='127.0.0.1', port=65432, username='User'): """启动客户端""" client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect((host, port)) print(f"Connected to server at {host}:{port}") # 启动接收消息的线程 receive_thread = threading.Thread(target=receive_messages, args=(client,)) receive_thread.start() try: while True: message = input(f"{username}> ") if message.lower() == 'exit': break client.send(message.encode('utf-8')) except KeyboardInterrupt: print("Client interrupted by user") finally: client.close() if __name__ == "__main__": start_client() ``` 运行程序 1. 启动服务器: 先运行服务器代码,它将监听指定的IP地址和端口(默认为`127.0.0.1:65432`)。 2. 启动客户端: 在另一个终端或计算机上运行客户端代码。你可以运行多个客户端实例来测试聊天功能。 改进建议 1. 添加用户列表:在服务器端维护一个用户名列表,并在客户端显示当前在线的用户。 2. 消息格式化:在发送消息时添加时间戳和用户名,以便更容易区分不同的消息和发送者。 3. 错误处理:增强错误处理逻辑,比如处理网络异常、客户端断开连接等情况,并给出更友好的提示信息。 [2024-12-25 17:47:51 | AI写代码神器 | 960点数解答]

相关提问