Python: asynchrone tcp Socket
-
21-09-2019 - |
Frage
Ich bin auf der Suche http://docs.python.org/library/socketserver.html zu versuchen und asynchrone Anforderungen mit dem Socket in python zu behandeln. Am untersten Ende gibt es ein Beispiel, aber es macht keinen Sinn. Es sagt, dass Sie Port 0 benutzen, die einen beliebigen freien Port zuweist. Aber wie Sie wissen, was Port für den Client zu verwenden, wenn sie nicht im selben Programm sind? Ich verstehe nicht ganz, wie dies nützlich machen.
Lösung
Da der Client im selben Skript als Server implementiert ist, wird die Port bekannt. In einem realen Szenario, sollten Sie einen Port für Ihren Daemon angeben. Außerdem wissen zu lassen Sie Ihre Kunden auf, welcher Port zu verbinden, können Sie auch so müssen wissen, dass Sie Firewalls zwischen den Clients und dem Server geöffnet werden kann.
Andere Tipps
Im Beispiel Sie verbunden sind, werden sie holen den Hafen:
# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0
server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address
Sie sollten jedoch wirklich auf www.twistedmatrix.com suchen, wenn Sie ernsthaft über das Schreiben Asynchron Handhabung:)
Sie müssen den Anschluss abzurufen, die der socketserver
zugewiesen wurde, sobald die bind
erfolgt: In diesem Fall, ist dies wahrscheinlich durch ip, port = server.server_address
sein
Die willkürliche Port ist nur, wenn Sie einen Server erstellen möchten, ohne einen Port festgelegt wird:. Das Betriebssystem eine verfügbare Port zuweisen
Natürlich muss es auch eine Möglichkeit sein, um anzugeben, welcher Port zu binden.
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address
...
client(ip, port, "Hello World 1")
Der PORT Wert 0 sagt: „Ich kümmere mich nicht, welche Portnummer ist es“, so der port
Wert server_address durch die ThreadedTCPServer () Aufruf zugeordnet ist. Es ist nicht Null. Später, übergeben Sie, dass port
Wert an den Client, der es verwendet.