2009-11-19 6 views
4

Je cherche http://docs.python.org/library/socketserver.html pour gérer des requêtes asynchrones avec le serveur sockets en python. Tout en bas, il y a un exemple, mais cela n'a aucun sens. Il dit que vous utilisez le port 0 qui attribue un port arbitraire inutilisé. Mais comment savez-vous quel port utiliser pour le client s'ils ne sont pas dans le même programme? Je ne comprends pas très bien comment rendre cela utile.Python: serveur asynchrone tcp socketserver

Répondre

9

Comme le client est implémenté dans le même script que le serveur, le port est connu. Dans un scénario réel, vous devez spécifier un port pour votre démon. En plus de permettre à vos clients de savoir sur quel port se connecter, vous devrez peut-être également savoir que vous pouvez ouvrir des pare-feu entre vos clients et votre serveur.

2

Vous devez récupérer le port attribué au socketserver une fois le bind terminé: dans ce cas, cela se fera probablement par ip, port = server.server_address.

Le port arbitraire est juste si vous voulez créer un serveur sans spécifier un port: le système d'exploitation attribuera un port disponible.

Bien sûr, il doit également y avoir un moyen de spécifier le port à lier.

5

Dans l'exemple que vous avez lié, ils sont aller chercher le port:

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

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

Cependant, vous devriez vraiment être à la recherche www.twistedmatrix.com si vous êtes sérieux au sujet de l'écriture manipulation async :)

+0

+1. Twisted est le chemin à parcourir. –

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

... 

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

La valeur PORT 0 dit « Je me fiche de ce numéro de port, il est, » si port valeur du adresse_serveur est attribué par l'appel ThreadedTCPServer(). Ce n'est pas zéro. Plus tard, vous transmettez cette valeur port au client, qui l'utilise.