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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top