Sur localhost, comment puis-je choisir un numéro de port?
Je suis en train de jouer avec communication inter-processus et depuis je ne pouvais pas comprendre comment utiliser les pipes nommés sous Windows je pense que je vais utiliser les sockets réseau. Tout se passe localement. Le serveur est en mesure de lancer des esclaves dans un processus séparé et à l'écoute sur un port. Les esclaves font leur travail et de soumettre le résultat au maître. Comment puis-je savoir quel port est disponible? Je suppose que je ne peux pas écouter sur le port 80 ou 21?
Je suis à l'aide de Python, si qui coupe les choix.
Merci!
- D'ailleurs, si vous venez chercher un hasard ou aléatoire-ish numéro de port (de préférence supérieur à 1024), il sera probablement disponible. Vous pouvez même utiliser le port 80 ou 21 ou que ce soit, tant qu'aucun autre programme est à l'écoute. À un moment donné, sur un système normal, seule une petite fraction de ports sont utilisés.
- Sélection d'un port aléatoire n'est pas une bonne idée de laisser l'OS en choisir un pour vous.
- Sur POSIX: stackoverflow.com/questions/913501/...
Vous devez vous connecter pour publier un commentaire.
Ne pas se lier à un port spécifique, ou se lier à port 0, par exemple
sock.bind(('', 0))
. Le système d'exploitation se charge de récupérer un port disponible pour vous. Vous pouvez obtenir le port qui a été choisi à l'aide desock.getsockname()[1]
, et de le transmettre aux esclaves afin qu'ils puissent se connecter de nouveau.sock.bind(('',0))
Lier le socket sur le port 0. Un hasard de port gratuit à partir de 1024 à 65535 sera sélectionné. Vous pouvez récupérer le port sélectionné avec
getsockname()
juste aprèsbind()
.Pour le bien de l'extrait de ce que les gars ont expliqué ci-dessus:
s.bind(('localhost', 0))
est mieuxs.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Vous pouvez l'écouter sur n'importe quel port que vous voulez; en règle générale, les applications de l'utilisateur doit écouter les ports supérieurs à 1024 (à 65535). La principale chose si vous avez un nombre variable d'auditeurs est d'allouer une gamme à votre application - dire 20000-21000, et intercepter des EXCEPTIONS. C'est de cette façon, vous saurez si un port est inutilisable (utilisé par un autre processus, en d'autres mots) sur votre ordinateur.
Cependant, dans votre cas, vous ne devriez pas avoir un problème en utilisant un seul codée en dur de port pour votre écoute, aussi longtemps que vous imprimez un message d'erreur si la liaison échoue.
Remarque aussi que la plupart de vos prises de courant (pour les esclaves) n'ont pas besoin d'être explicitement lié à certains numéros de port - seuls les supports d'attente pour les connexions entrantes (comme votre maître ici) devront être faits à l'auditeur et lié à un port. Si aucun port n'est spécifié pour une prise avant il est utilisé, le système d'exploitation attribuer une durée de port de la douille. Quand le maître veut répondre à un esclave qui envoie des données, de l'adresse de l'expéditeur est accessible lorsque l'auditeur reçoit des données.
Je présume que vous serez en utilisant UDP pour cela?