У меня есть простой чат-сервер на основе 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
В документации на http://docs.python.org/library/select.html#select.select вы можете видеть, что, что бы вы ни ожидали, нужно только предоставить член 'fileno'. Поэтому, если ваше соединение просто возьмет на себя этот метод из своего сокета, вы можете использовать его в 'select'-call. – filmor
У меня возникли проблемы с визуализацией того, как это будет выглядеть. Не могли бы вы предоставить короткий фрагмент синтаксиса, чтобы помочь мне разобраться? – sadmicrowave