Pythonの:非同期のTCP socketserver
-
21-09-2019 - |
質問
私が探しています http://docs.python.org/library/socketserver.html には、試してみて、Pythonでsocketserverとの非同期要求を処理します。一番下にあっ例であるが、それは意味がありません。それはあなたが任意の未使用ポートを割り当て、ポート0を使用しますと言います。しかし、どのように彼らは同じプログラム内にない場合、クライアントのために使用するポートを知っていますか?私は非常にこれを有用なものにする方法を理解していません。
解決
は、ポートが知られています。実際のシナリオでは、あなたのデーモン用のポートを指定する必要があります。あなたのクライアントが接続するポートに知らせることに加えて、あなたはまた、あなたがあなたのクライアントとサーバーの間のファイアウォールを開くことができることを知っておく必要があるかもしれません。
他のヒント
の例では、あなたがリンクされ、彼らはポートを取得されます。
# 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されているはずです
あなたはsocketserver
が行われた後bind
に割り当てられたポートを取得する必要があります。この場合には、これはおそらくip, port = server.server_address
経由となります。
任意のポートを使用して、ポートを指定せずにサーバーを作成したいだけの場合です:OSが使用可能なポートを割り当てます。
。もちろんにバインドするポートを指定する方法がなければなりません。
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address
...
client(ip, port, "Hello World 1")
PORT値0はSERVER_ADDRESSのport
値はThreadedTCPServer()の呼び出しによって割り当てられているので、「私は、それが何であるかのポート番号を気にしない」と言います。それはゼロではありません。その後、あなたはそれを使用するクライアントにそのport
値を渡します。