使用PythonSocketServer实现简单的聊天服务器
发布时间:2023-12-25 04:16:44
Python提供了SocketServer模块,该模块包含了建立基于Socket的服务器的类。其中有一个重要的类是TCPServer类,它实现了一个TCP服务器,可以监听指定端口的连接请求。
下面是一个简单的聊天服务器的例子,该服务器在接收到客户端发送的消息后,将该消息广播给所有已连接的客户端。
import SocketServer
class ChatServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
clients = [] # 存储已连接的客户端
def handle(self):
self.request.send("欢迎加入聊天室!请输入你的昵称:")
nickname = self.request.recv(1024).strip()
self.broadcast(nickname + " 已加入聊天室")
while True:
message = self.request.recv(1024).strip()
if message:
self.broadcast(nickname + ": " + message)
else:
self.broadcast(nickname + " 已离开聊天室")
break
def broadcast(self, message):
for client in self.clients:
client.send(message + "
")
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
server = ChatServer((HOST, PORT))
server_thread = threading.Thread(target=server.serve_forever)
server_thread.start()
print("聊天服务器已启动,监听端口 %s" % PORT)
在上面的例子中,我们定义了一个ChatServer类来实现聊天服务器。该类继承自ThreadingMixIn和TCPServer类,它使用多线程同时处理多个客户端的连接请求。
在handle方法中,首先向客户端发送欢迎消息,并要求客户端输入昵称。然后,将该客户端加入到已连接客户端列表中,并向所有客户端广播有新成员加入的消息。
之后,在一个无限循环中,服务器将接收到的客户端发送的消息广播给所有客户端。如果接收到空消息,说明客户端已经断开连接,将向所有客户端广播该客户端离开的消息。
最后,在主程序中,我们创建了一个ChatServer对象,并使用ThreadingMixIn类的serve_forever方法启动服务器。服务器将在9999端口上监听客户端连接请求。
可以使用telnet命令或者编写客户端代码来连接到该服务器。当有新的客户端加入或发送消息时,服务器会将消息广播给所有已连接的客户端。
注意:上面的例子中,服务器没有任何安全验证和防止恶意访问的措施。在真实的应用中,通常需要对客户端进行身份验证,并对用户输入进行严格的安全检查。
