在Python中将变量存储到套接字
我有一个简单的基于Python的Telnet聊天服务器,但它没有让用户设置用户名的功能。完整的代码可以在这里找到:http://paste.pound-python.org/show/16076/
基本上,我创建了一个监听器:
self.srvsock = socket.socket( socket.AF_INET, socket.SOCK_STREAM )
self.srvsock.bind( ('', port ) )
self.srvsock.listen( 5 )
self.descriptors = [ self.srvsock ]
然后我使用select.select来循环处理连接的用户和他们的socket发送的数据:
def run( self ):
while 1:
( sread, swrite, sexec ) = select.select( self.descriptors, [], [] )
for sock in sread:
if sock == self.srvsock:
self.accept_new_connection()
else:
str = sock.recv( 6042 )
host, port = sock.getpeername()
if str == '':
#stop user connect
elif '\username' in str:
self.set_username( str, sock, port )
else:
#send user string
我想问的是,我创建的self.set_username方法需要一种方式来设置用户名,并把它存储在用户的socket里,以便后续引用。我的set_username()方法如下:
def set_username( self, str, sock, port ):
username = str[ str.find(' ')+1: ]
sock.append( {'username': username} ) #<!!!--obviously this does not work
str = "[user:%s] now known as %s" % ( port, username )
sock.send( str )
self.broadcast_string( str )
我该如何成功实现这个功能呢?
1 个回答
2
你可以找到一些方法来实现这个功能,但你应该创建一个叫做Connection
的类,这个类负责处理一个客户端的连接,并记录一些信息,比如用户名等等。
class Connection(object):
def __init__(self, sock):
self.socket = sock
def fileno(self):
return self.socket.fileno()