0

サーバーソケットを作成してローカル ポートにバインドし、バックログで最大 5 つの接続をキューに入れるように指示します。クライアントソケットがサーバーソケットに接続したとき/バックログにキュー接続があるときを検出する方法が必要です。別のスレッドで socket.accept() を実行していますが、socket.accept() でスレッドがハングしているときに実行できない別のスレッドを停止できる必要があります。

この理由は、ユーザーがコマンドを実行したときにのみサーバーソケットが接続をリッスンし、ユーザーが別のコマンドを実行したときに停止しようとしているからです。

コードを次のように読みたいと思います。

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversocket.bind((socket.gethostname(), 1024))
serversocket.listen(5)

class connectListner (threading.Thread):
    def run(self):
        while True:
            if <item in backlog>:
                clientsocket, address = serversocket.accept()
            pass

その後、thread.join() を使用してスレッドを停止できます

どんな助けでもいただければ幸いです

4

1 に答える 1

1

サーバーソケットが読み取り可能になるため、ソケットを非ブロッキングモードに設定しselect、クライアントがいつ待機しているかを知るために使用することをお勧めします。accept

serversocket.setblocking(False)

readable, writable, err = select.select([serversocket.fileno()], [], [], 1)
if readable:
    clientsocket, address = serversocket.accept()

while1 秒後、クライアントが接続されていない場合、select 呼び出しは終了し、ループによって再び開始されます。readableしたがって、たとえば が空のリストの場合は、スレッドを終了できます。selectスレッドを細かく制御する必要がある場合は、タイムアウトを低く設定してください。

于 2013-10-06T18:51:38.033 に答える