2022年2022年关于python基础教程项目聊天服务器的实现 2.pdf
《2022年2022年关于python基础教程项目聊天服务器的实现 2.pdf》由会员分享,可在线阅读,更多相关《2022年2022年关于python基础教程项目聊天服务器的实现 2.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本人是个python 初学者, 选择的入门书籍是python 基础教程第二版,因为看网上说这本书最后有十个项目非常好,所以就选择了这本书。但是没想到其中的项目5:虚拟茶话会可是让我郁闷了好久,因为照着打出来的代码居然有那么多奇怪的错误(其实代码本身没什么错误,应该还是自己打错了)。上网去查,看到有不少人都遇到了这个问题,但是我没找到一个解决的。所以我就写下了这篇经验贴,希望可以帮助和我遇到一样问题的朋友。不多说,直接上代码:# -coding: utf-8 - from asyncore import dispatcher from asynchat import async_chat imp
2、ort socket, asyncore PORT = 5000 NAME = Sasu&Saly class EndSession(Exception): pass class CommandHandler: 类似于标准库中的cmd。Cmd 的简单命令处理程序。 def unknown(self, session, cmd): 相应未知命令 session.push(Unknown command: %srn % cmd) def handle(self, session, line): 处理从给定会话中接收到的行 if not line.strip(): return 分离命令 parts
3、 = line.split( , 1) cmd = parts0 try: line = parts1.strip() except IndexError: line = 试着查找处理程序 meth = getattr(self, do_ + cmd, None) try: 假定它是可调用的 meth(session, line) except TypeError: 如果不可以被调用,此段代码响应未知的命令 self.unknown(session, cmd) class Room(CommandHandler): 包括一个或多个用户的泛型环境。它负责基本的命令处理和广播。 def _init
4、_(self, server): self.server = server 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - self.sessions = def add(self, session): 一个用户已经加入房间 self.sessions.append(session) def remove(self, session): 一个用户已经离开房间 self.sessions.remove(session) def b
5、roadcast(self, line): 向房间中的所有会话发送一行 for session in self.sessions: session.push(line) def do_logout(self, session, line): 响应 logout 命令 raise EndSession class LoginRoom(Room): 为刚刚连接上的用户准备的房间 def add(self, session): 当用户进入时,发出问候 Room.add(self, session) self.broadcast(Welcome to %srn % self.server.name)
6、def unknown(self, session, line): 所有未知命令会导致一个警告 session.push(Please log innUse loginrn) def do_login(self, session, line): name = line.strip() if not name: session.push(Please enter a namern) elif name in self.server.users: session.push(The name %s is taken.rn % name) session.push(Please try again.r
7、n) else: session.name = name session.enter(self.server.main_room) class ChatRoom(Room): 为多用户相互聊天准备的房间 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 5 页 - - - - - - - - - def add(self, session): 告诉所有人有新用户进入 self.broadcast(session.name + has entered the room.rn)
8、 self.server.userssession.name = session Room.add(self, session) def remove(self, session): Room.remove(self, session) 告诉所有人有用户离开 self.broadcast(session.name + has left the room.rn) def do_say(self, session, line): self.broadcast(session.name+:+line+rn) def do_look(self, session, line): 处理 look 命令,该
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年2022年关于python基础教程项目聊天服务器的实现 2022 年关 python 基础教程 项目 聊天 服务器 实现
限制150内