Salutations. Je commence tout juste avec la librairie boost :: asio et j'ai rencontré des difficultés au début de boost :: asio :: ip :: tcp :: iostream.Boost asio ip tcp iostream Détection d'erreur
Ma question comporte deux parties:
1.) Comment peut-on connecter un iostream en utilisant simplement l'hôte et le numéro de port?
Je peux faire en sorte que les exemples de client et server [boost.org] fonctionnent bien comme codés. Le serveur spécifie le port explicitement:
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), 13);
tcp::acceptor acceptor(io_service, endpoint);
Port 13 est un port bien connu pour un service "de jour".
L'exemple de client se connecte en spécifiant un hôte et le nom du service:
tcp::iostream s(argv[1], "daytime");
Pour ma propre application, je voudrais mettre le serveur sur un port arbitraire et se connecter par numéro comme indiqué ci-dessous:
serveur:
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), port);
tcp::acceptor acceptor(io_service, endpoint);
acceptor.accept(*this->socketStream.rdbuf());
...
client:
boost::asio::ip::tcp::iostream sockStream;
...
sockStream.connect("localhost", port);
...
Si, dans le client, j'essaie de spécifier le numéro de port directement (au lieu d'un service par nom), le flux ne parvient pas à se connecter. Y a-t-il un moyen de faire cela? Ce n'est pas clair pour moi quels pourraient être les arguments pour se connecter.
2.) Quel est le meilleur moyen pour tester le succès d'un appel à iostream :: connect?
La fonction renvoie void et aucune exception n'est levée. La seule méthode que j'ai imaginée jusqu'ici est de tester stream.fail() et/ou stream.good(). Est-ce la façon de le faire, ou existe-t-il une autre méthode?
Un conseil sur l'un de ces deux ou sur les deux serait apprécié. De plus, si je néglige la documentation pertinente et/ou des exemples, ce serait bien. Jusqu'à présent, je n'ai pas été en mesure de répondre à ces questions en lisant les documents de la bibliothèque ou en cherchant sur le net.
Merci pour l'aide. Existe-t-il alors un moyen de prendre un socket tcp :: et de l'insérer dans un tcp :: iostream? –
@Adam - Je ne sais pas. Cela fait un moment que j'ai travaillé avec asio et le code que je regarde utilise le socket directement pour les E/S (en utilisant socket :: send et socket :: read_some) plutôt que d'utiliser un iostream. – Ferruccio
Une alternative légèrement plus propre est, sockStream.connect ("localhost", lexical_cast (port)); –