📄 listing24-5.py
字号:
from asyncore import dispatcherfrom asynchat import async_chatimport socket, asyncorePORT = 5005NAME = 'TestChat'class ChatSession(async_chat): """ A class that takes care of a connection between the server and a single user. """ def __init__(self, server, sock): # Standard setup tasks: async_chat.__init__(self, sock) self.server = server self.set_terminator("\r\n") self.data = [] # Greet the user: self.push('Welcome to %s\r\n' % self.server.name) def collect_incoming_data(self, data): self.data.append(data) def found_terminator(self): """ If a terminator is found, that means that a full line has been read. Broadcast it to everyone. """ line = ''.join(self.data) self.data = [] self.server.broadcast(line) def handle_close(self): async_chat.handle_close(self) self.server.disconnect(self)class ChatServer(dispatcher): """ A class that receives connections and spawns individual sessions. It also handles broadcasts to these sessions. """ def __init__(self, port, name): # Standard setup tasks dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind(('', port)) self.listen(5) self.name = name self.sessions = [] def disconnect(self, session): self.sessions.remove(session) def broadcast(self, line): for session in self.sessions: session.push(line + '\r\n') def handle_accept(self): conn, addr = self.accept() self.sessions.append(ChatSession(self, conn))if __name__ == '__main__': s = ChatServer(PORT, NAME) try: asyncore.loop() except KeyboardInterrupt: print
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -