欢迎访问宙启技术站
智能推送

使用Python编写一个简易的聊天室应用程序

发布时间:2023-12-04 20:06:18

下面是一个使用Python编写的简易聊天室应用程序的示例:

import socket
import threading

class ChatServer:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.server_socket = None
        self.clients = []
        self.lock = threading.Lock()

    def start(self):
        # 创建socket并绑定host和port
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.bind((self.host, self.port))
        self.server_socket.listen(5)
        print("服务器启动,监听 %s:%d" % (self.host, self.port))

        while True:
            # 接受新的客户端连接
            client_socket, address = self.server_socket.accept()
            print("新的客户端连接:%s:%d" % (address[0], address[1]))

            # 创建新的线程处理客户端请求
            client_thread = threading.Thread(target=self.handle_client, args=(client_socket,))
            client_thread.start()

    def handle_client(self, client_socket):
        with self.lock:
            self.clients.append(client_socket)

        while True:
            try:
                # 接收客户端消息
                data = client_socket.recv(1024).decode()
                if not data:
                    # 客户端断开连接
                    break
                print("收到消息:%s" % data)
                self.broadcast(data, client_socket)
            except Exception as e:
                print("出错:%s" % str(e))
                break

        # 关闭客户端连接
        client_socket.close()
        with self.lock:
            self.clients.remove(client_socket)
        print("客户端断开连接")

    def broadcast(self, message, sender_socket):
        with self.lock:
            for client_socket in self.clients:
                if client_socket != sender_socket:
                    try:
                        # 发送消息给其他客户端
                        client_socket.sendall(message.encode())
                    except Exception as e:
                        print("出错:%s" % str(e))

if __name__ == '__main__':
    # 创建聊天服务器,并绑定到本地IP和端口
    chat_server = ChatServer("127.0.0.1", 12345)
    chat_server.start()

此聊天室应用程序使用socket库创建服务器和客户端之间的连接。服务器使用多线程处理客户端连接和消息广播。每个客户端连接都在一个单独的线程中处理。当服务器收到消息时,它会将消息发送给所有其他客户端。

为了使用示例聊天室应用程序,你可以按照以下步骤进行操作:

1. 运行上述代码,启动聊天服务器。

2. 打开多个终端窗口,每个窗口对应一个客户端。

3. 在客户端终端窗口中,使用telnet命令连接到服务器。例如:telnet 127.0.0.1 12345

4. 在一个客户端终端窗口中输入消息,该消息将被广播给其他所有客户端。

5. 在其他客户端终端窗口中,你将看到收到的广播消息。

6. 你可以在多个客户端之间交互发送消息,所有客户端都可以看到收到的消息。

这个简易聊天室应用程序虽然代码比较简单,但可以作为你开始理解和构建更复杂的聊天室应用程序的起点。你可以在此基础上添加更多功能,如用户认证、私聊、群聊、多房间支持等。