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)
これをどのようにして正常に行うことができますか?
が、その後、私はhttp://docs.python.org/library/select.html#select.selectでドキュメントでバック振り出し – sadmicrowave
に私をもたらしソケットに接続インスタンスを格納する必要がありますあなたが待っていたいものがあれば、 'fileno'メンバーだけを提供すればよいことが分かります。だからあなたの接続がちょうどそのソケットからこのメソッドを引き継ぐなら、 'select'コールでそれを使うことができます。 – filmor
これはどのように見えるかを視覚化する問題があります。私が理解するのに役立つ構文の短いスニペットを提供できますか? – sadmicrowave