il est un peu étrange pour moi que boost.asio n'utilise pas le concept de base lorsque l'application client se connecte 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:Comment boost.asio peut-il identifier le port sur lequel mon application serveur écoute?
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.
Donc, la question est - comment exactement Asio trouve sur quel port le serveur écoute-t-il les connexions? Est-ce qu'il scanne tous les ports? Et, si c'est le cas, que se passera-t-il si deux serveurs écoutent sur des ports différents en même temps?
Je n'ai pas bien compris ce que le second paramètre signifie dans la requête ctor. le premier est l'adresse IP que je veux me connecter, non? et que signifie le second? – chester89
Le deuxième paramètre est un numéro de port ou le nom d'un service. Si c'est un nom de service, asio le recherchera dans le fichier des services pour trouver le numéro de port approprié pour ce service. Jetez un oeil au fichier de services avec un éditeur de texte et vous verrez comment cela fonctionne. – Ferruccio
ok, alors comment puis-je démarrer un serveur sur un port dont j'ai besoin? code pour cela sur le côté serveur est: boost :: asio :: io_service io_service; tcp :: accepteur accepteur (io_service, tcp :: endpoint (tcp :: v4(), 13)); – chester89