聊天服务器:
服务器能接受来自不同用户的多个连接;
允许用户同时(并行)操作;
能解释命令,例如,say或者logout;
容易拓展
1. 初次实现
1.1 CharServer类
有问题。。。。。。。。。。。。。。。。
#可接受连接的服务器 from asyncore import dispatcher import asyncore,socket class ChatServer(dispatcher): def handle_accept(self): conn.addr=self.accept() print ‘Connection attempt from‘, addr[0] #客户端的Ip地址 s=ChatServer() s.create_socket(socket.AF_INET, socket.SOCK_STREAM)#创建套接字 s.bind((‘ ‘,5005))#将套接字绑定到端口,空字符串(主机名),意味着本地主机(即本地所有接口),端口号为5005 s.listen(5) #告诉服务器要监听连接,并且指定5个连接的代办的事物 asyncore.loop() #启动服务器,循环监听
#具有清理功能的基本服务器 from asyncore import dispatcher import socket, asyncore PORT=5005 class ChatServer(dispatcher): def __init__(self,port): dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self.set_reuse_addr() self.bind((‘ ‘,port)) self.listen(5) def handle_accept(self): conn, addr=self.accept() print ‘Connection attempt from‘, addr[0] if __name__ =="__main__": s=ChatServer(PORT) try: asyncore.loop() except KeyboardInterrupt: pass
1.2 CharSession类
1)set_terminator方法用于将行终止对象设为网络协议中通常用作终止符的"\r\n"
2)ChatSession对象会将目前读取的数据作为保存为字符串列表data。但读入更多数据时,collect_incoming_data会自动被调用,将新读入的数据追加到列表中。
3)found_terminiator方法在读到终止对象时被调用
4)ChatServer保存回话列表
5)CharServer的handle_accept方法现在创建了新的ChatSession对象,并将其追加到会话列表中
# 带有ChatSession类的服务器程序 from asyncore import dispatcher from asynchat import async_chat import socket,asyncore PORT=5005 class ChatSession(async_chat): def __init__(self,sock): async_chat.__init__(self,sock) self.set_terminator("\r\n") self.data=[] def collect_incoming_data(self,data): self.data.append(data) def found_terminator(self): line=‘ ‘.join(self.data) self.data=[] #处理该行数据 print line class ChatServer(dispatcher): def __init__(self,port): diapatcher.__init__(self) self.create_socket(socket.AF_INET,socket.SOCK_STREAM) self.set_reuse_addr() self.bind((‘ ‘.port)) self.listen(5) self.sessions=[] def handle_accept(self): conn,addr=self.accept() self.sessions.append(ChatSession(com)) if __name__ == ‘__main__‘: s=ChatServer(PORT) try: asyncore.loop() except KeyboardInterrupt: print
1.3 整合
时间: 2024-11-03 22:41:44