0
我有一個簡單的基於python telnet的聊天服務器,它缺少用戶設置用戶名的功能。完整的腳本位於:http://paste.pound-python.org/show/16076/將變量存儲到python中的套接字
基本上我創建我的聽衆:
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)
我該如何成功地做到這一點?
但我需要連接實例存儲這使我回到原點 – sadmicrowave 2012-01-11 16:51:14
在文檔在http://docs.python.org/library/select.html#select.select插座你可以看到,無論你想等待什麼,只需要提供'fileno'成員。所以如果你的連接只是從它的套接字接管這個方法,你可以在'select'-call中使用它。 – filmor 2012-01-11 16:56:19
我有問題可視化如何看起來。你能提供一小段語法來幫助我理解嗎? – sadmicrowave 2012-01-11 17:46:04