4

私はhttp://docs.python.org/library/socketserver.htmlを探して、Pythonのsocketserverで非同期リクエストを処理しようとしています。一番下に例がありますが、それは意味がありません。これは、任意の未使用のポートを割り当てるポート0を使用していることを示しています。しかし、クライアントが同じプログラムにない場合、クライアントに使用するポートをどのようにして知ることができますか?これを便利にする方法がよくわかりません。

4

4 に答える 4

9

クライアントはサーバーと同じスクリプトで実装されているため、ポートは既知です。実際のシナリオでは、デーモンのポートを指定する必要があります。接続するポートをクライアントに通知するだけでなく、クライアントとサーバーの間でファイアウォールを開くことができるようにする必要がある場合もあります。

于 2009-11-19T14:18:19.587 に答える
5

リンクした例では、ポートをフェッチしています。

# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0

server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address

ただし、非同期処理の記述に真剣に取り組んでいる場合は、www.twistedmatrix.comを実際に確認する必要があります:)

于 2009-11-19T14:18:12.193 に答える
2

socketserver完了したら、割り当てられたポートを取得する必要がありますbind。この場合、これはおそらくを介して行われますip, port = server.server_address

任意のポートは、ポートを指定せずにサーバーを作成する場合にのみ使用できます。OSが使用可能なポートを割り当てます。

もちろん、バインドするポートを指定する方法も必要です。

于 2009-11-19T14:15:13.117 に答える
0
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address

...

client(ip, port, "Hello World 1")

PORT値0は、「ポート番号は関係ありません」という意味であるため、server_addressのport値はThreadedTCPServer()呼び出しによって割り当てられます。ゼロではありません。後で、そのport値を使用するクライアントにその値を渡します。

于 2009-11-19T14:19:38.930 に答える