2009-03-02 6 views

Répondre

67

Le socket dispose d'une fonction permettant de récupérer le point de terminaison distant. Je donnerais ce (long ish) chaîne de commandes un aller, ils doivent récupérer la représentation de chaîne de l'adresse IP distante:

asio::ip::tcp::socket socket(io_service); 
// Do all your accepting and other stuff here. 

asio::ip::tcp::endpoint remote_ep = socket.remote_endpoint(); 
asio::ip::address remote_ad = remote_ep.address(); 
std::string s = remote_ad.to_string(); 

ou la version one-liner:

asio::ip::tcp::socket socket(io_service); 
// Do all your accepting and other stuff here. 

std::string s = socket.remote_endpoint().address().to_string(); 
+0

Merci pour votre réponse, je me suis dit la chaîne peut être écrit simplement:.. socket.remote_endpoint() adresse() to_string() – kyku

+3

Ouais, c'est comme ça que je l'aurais fait (en supposant qu'il n'y avait pas de possibilités de null ou d'erreurs aux points intermédiaires). Je l'ai laissé développé à des fins explicatives. A mon avis, la version one-liner est meilleure (j'aime mon code relativement compact donc je peux en voir plus sur un écran). – paxdiablo

21

ou, encore plus facile, avec boost::lexical_cast:

#include <boost/lexical_cast.hpp> 

std::string s = boost::lexical_cast<std::string>(socket.remote_endpoint()); 
+1

Ceci est très utile car il contient à la fois les 'adresse()' et 'port()', que 'adresse(). To_string()' omet. – Sean

+0

Notez que cela déclenche une exception si le point de terminaison n'est pas connecté. – Claudiu

Questions connexes