python大作业
简易聊天室
【设计要求】用 Python 实现基于 socket 的聊天室程序。聊天室分为服务器 端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需要 登陆到服务器端才可以实现正常的聊天功能。 服务器端主要功能如下:在特定端口上进行侦听,等待客户端连接。统计在 线人数。当停止服务时,断开所有的用户连接。 客户端的主要功能如下:连接到已经开启聊天服务的服务器端。当服务器端 开启的话,用户可以随时登陆与注销。用户可以向所有人或某一个人发送消息。
【界面要求】要求图形界面实现。
服务端server.py
import socket import threading class ChatServer: def __init__(self, host, port): self.host = host self.port = port self.server_socket = None self.clients = {} def start(self): self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.server_socket.bind((self.host, self.port)) self.server_socket.listen(5) print(f"Server started on {self.host}:{self.port}") while True: client_socket, _ = self.server_socket.accept() threading.Thread(target=self.handle_client, args=(client_socket,)).start() def handle_client(self, client_socket): username = client_socket.recv(1024).decode() self.broadcast_message(f"{username} joined the chat") self.clients[client_socket] = username print(f"{username} connected") while True: try: message = client_socket.recv(1024) if message: self.broadcast_message(f"{username}: {message.decode()}") else: raise Exception("Disconnected") except: client_socket.close() self.broadcast_message(f"{username} left the chat") del self.clients[client_socket] print(f"{username} disconnected") break def broadcast_message(self, message): print(message) for client_socket in self.clients: client_socket.send(message.encode()) if __name__ == '__main__': server = ChatServer('localhost', 8000) server.start()
                    
                
                
            
        
浙公网安备 33010602011771号