1

マルチプロセッシングとソケットを使用して、同じソケットへの複数の接続を許可しようとしています。しかし、私はこの分野での経験があまりないので、本当に苦労しています。

私が持っているコードが機能していません

def server(port, listen=10):
    connected = []
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('', port))
    s.listen(listen)

    while True:

        conn, address = s.accept()
        p = multiprocessing.Process(target=server, args=(port, listen))
        p.start()
        p.join()
        command = raw_input("Command: ")
        conn.send(command)  

助けてくれてありがとう

4

1 に答える 1

0

これは、複数のサーバーをループで作成しようとしているためです。タスクには単一のサーバーで十分です。多くのリッスン ソケットを開く必要はありません。すべてのローカル ポートは、多くても 1 つのリッスン ソケットにバインドされている可能性があります。これが、「使用中のアドレス」エラーが表示される理由です。

Python 標準クラスを試してみてくださいTCPServer。これは、低レベルのソケットに煩わされるよりもはるかに便利です。

スレッド サーバーについては、この例を参照してください。

OS ソケット レベルでは、このスキームはリッスン ソケットを 1 つだけ必要とし、新しい接続を受け入れるたびに新しいソケットを生成します (これがソケットの標準的な方法です)。次に、別のスレッドで新しいソケットを使用します (スレッド間で共有される共通データへのアクセスに注意してください)。

于 2012-07-22T17:55:49.450 に答える