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()
复制代码

 

posted @   周+⑦  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示