python3 类型Type str doesn't support the buffer API?,python3buffer,饿,代码是抄书的,书是《
python3 类型Type str doesn't support the buffer API?,python3buffer,饿,代码是抄书的,书是《
饿,代码是抄书的,书是《python基础教程》,由于书的代码是python2,的,但是我又想学python3,所以自己改了一下代码,遇到了一些问题 先补上图片
#!/usr/bin/env python3__author__ = 'tcstory'from asyncore import dispatcherfrom asynchat import async_chatimport socket, asyncorePORT=5005NAME='TestChat'class EndSession(Exception): passclass CommandHandler: ''' Simple command handler similar to cmd.Cmd from the standard library ''' def unknown(self, session, cmd): 'Respond to an unknown command' session.push('Unkonw command: {0}\r\n'.format(cmd).encode()) def handle(self, session, line): 'Handle a received line from a given session' if not line.strip(): return #Split off the command parts = line.split(' ', 1) cmd = parts[0] try: line=parts[1].strip() except IndexError: line='' #Try to find a handler meth=getattr(self,'do_'+cmd,None) try: #Assume it's callable meth(session,line) except TypeError: #If it isn't ,respond to the unknown command self.unknown(session,cmd)class Room(CommandHandler): ''' A generic environment that may contain one or more users(sessions).it takes care of basic command handling and broadcasting. ''' def __init__(self,server): self.server=server self.sessions=[] def add(self,session): 'A session(user) has entered the room' self.sessions.append(session) def remove(self,session): 'A session (user) has left the room' self.sessions.remove(session) def broadcast(self,line): 'Send a line to all sessions in the room' for session in self.sessions: session.push(line.encode()) def do_logout(self,session,line): 'Respond to the logout command' raise EndSessionclass LoginRoom(Room): ''' A room meant for a single person who has just connected ''' def add(self,session): Room.add(self,session) #When a user enters,greet him/her self.broadcast('Welcome to {0}\r\n'.format(self.server.name)) def unknown(self, session, cmd): #All unknown commands (anything except login or logout) #results in a prodding session.push('Please log in\nUse "login <nick>"\r\n'.encode()) def do_login(self,session,line): name=line.strip() #Make sure the user has entered a name if not name: session.push('Please enter a name\r\n'.encode()) #Make sure that the name isn't in use elif name in self.server.users: session.push('The name {0} is taken.\r\n'.format(name).encode()) session.push('Please try again.\r\n'.encode()) else: #The name is OK,os it is stored in the session.and #the user is moved into the main room session.name=name session.enter(self.server.main_room)class ChatRoom(Room): ''' A room meant for multiple users who can chat with the others in the room ''' def add(self,session): #Notify everyone that a new user has entered self.broadcast('{0} has entered the room.\r\n'.format(session.name)) self.server.users[session.name]=session Room.add(self,session) def remove(self,session): Room.remove(self,session) #Notify everyone that a user has left self.broadcast('{0} has left the room.\r\n'.format(session.name)) def do_say(self,session,line): self.broadcast('{0}: '+line+'\r\n'.format(session.name)) def do_look(self,session,line): 'Handles the look command,used to see who is in a room' session.push('The following are in this room:\r\n'.encode()) for other in self.sessions: session.push('{0}\r\n'.format(other.name).encode()) def do_who(self,session,line): 'Handles the who command ,used to see who is logged in' session.push('The following are logged in:\r\n'.encode()) for name in self.server.users: session.push('{0}\r\n'.format(name))class LogoutRoom(Room): ''' A simple room for a single user.Its sole purpose is to remove the user's name from the server ''' def add(self,session): #When a session (user) enters the LogoutRoom it is deleted try: del self.server.users[session.name] except KeyError: passclass ChatSession(async_chat): ''' A single session,which takes care of the communication with a single user ''' def __init__(self,server,sock): # async_chat.__init__(self,sock) super().__init__(sock) self.server=server self.set_terminator('\r\n') self.data=[] self.name=None #All sessions begin in a separate LoginRoom self.enter(LoginRoom(server)) def enter(self,room): # Remove self from current room and add self to next room.... try: cur=self.room except AttributeError:pass else: cur.remove(self) self.room=room room.add(self) def collect_incoming_data(self, data): self.data.append(data) def found_terminator(self): line=''.join(self.data) self.data=[] try: self.room.handle(self,line) except EndSession: self.handle_close() def handle_close(self): async_chat.handle_close(self) self.enter(LogoutRoom(self.server))class ChatServer(dispatcher): ''' A chat server with a single room ''' def __init__(self,port,name): super().__init__() # 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.users={} self.main_room=ChatRoom(self) def handle_accept(self): conn,addr=self.accept() ChatSession(self,conn)if __name__=='__main__':# www.iplaypy.com 百度搜:编橙之家 s=ChatServer(PORT,NAME) try: asyncore.loop() except KeyboardInterrupt: print()
这是stackoverflow上的问题,老外帮我改了一下,可能阅读效果更好
http://stackoverflow.com/questions/24928908/python3-type-str-doesnt-support-the-buffer-api
编橙之家文章,
相关内容
- Tornado里面self.write("hello")出现"Broken pipe Error"怎么
- requests爬取代理网站ip验证,登陆ip网站查询ip不变的原
- 用python将序列化之后的 json 存储在 mysql 中并且对于开发
- 编程语言的选择: Why choose Ruby or Python over PHP for web dev
- Django Web开发里面的url的重定向问题,比如这个abc.com/
- CentOS系统Python的版本太low了,该怎么升级呢》,centos
- Scrapy pipeline数据模块出现问题的解决,scrapypipeline,Scr
- django admin管理部分是否在一个页面inline外键的外键呢?
- django ueditor编辑器安装时怎样引用静态文件 jss css样式表
- redis数据库怎么样来实现全文搜索功能呢?,redis全文搜
评论关闭