[英]store variable to socket in 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循環連接用戶,他們的套接字發送:
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方法,我需要一種方法來設置用戶名並將其存儲在用戶套接字中並引用它。 我的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 )
我怎樣才能成功做到這一點?
您當然可以找到一些方法來破解它,但您應該實現一個Connection
類來處理一個客戶端連接並跟蹤用戶名等內容,例如
class Connection(object):
def __init__(self, sock):
self.socket = sock
def fileno(self):
return self.socket.fileno()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.