Comment boost.asio découvrir quel port est mon application serveur écoute sur?

StackOverflow https://stackoverflow.com/questions/578794

  •  06-09-2019
  •  | 
  •  

Question

il est un peu étrange pour moi que boost.asio n `t utiliser concept de base lorsque l'application client de connexion au serveur - en utilisant l'adresse IP et le port. Peut être que je suis un peu noobie dans Boost - et je l'accepte -. Mais de toute façon je ne comprends pas
Donc, j'ai le code comme celui-ci pour obtenir client connecté au serveur sur le localhost:


        boost::asio::io_service io_service;
        tcp::resolver resolver(io_service);
        tcp::resolver::query query("localhost", "daytime"); 
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
        tcp::resolver::iterator end;

        tcp::socket socket(io_service);
        boost::system::error_code error = boost::asio::error::host_not_found;
        while(error && endpoint_iterator != end) {
            socket.close();
            socket.connect(*endpoint_iterator++, error);
        }

Windows dans son WinSock 2.0 utilise deux paramètres - IP et le port - pour identifier le serveur.
Ainsi, le qurestion est - comment exactement Asio trouve sur quel port est serveur écoute les connexions sur? Est-ce que il scanne tous les ports? Et, si elle le fait, ce qui se passera si deux serveurs d'écoute sur les différents ports en même temps?

Était-ce utile?

La solution

Vous dites ce que vous voulez vous connecter à localhost sur le port utilisé par le service de jour. Il va chercher le numéro de port approprié dans le fichier de services (généralement C: \ WINDOWS \ system32 \ drivers \ etc \ services sous Windows, je crois / etc / services sous Unix). Vous pouvez également utiliser un numéro de port explicite là-bas.

Autres conseils

Essayez,

tcp::resolver::query query("localhost", boost::lexical_cast<string>(port));//assuming port is an int

Pour répondre à votre question, le rappel que vous démarrez le serveur sur le port 13. Il se trouve que le port qui exécute le service de jour Linux (http://www.sorgonet.com/linux/linuxdaemons/) . Par conséquent, ils sont ensuite en mesure d'utiliser la requête ( « localhost », « jour ») plutôt que de spécifier le port.

netcat ouvert écouter sur le port 13 sur le localhost il acceptera la connexion de la démo. tapez du blabla quand il se connecte et vous verrez la sortie sur le programme de démonstration pour exécuter le netcat, exécutez: nc -l -p 13

fenêtres? pas netcat? installer Cygwin et ajouter netcat

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top