2009-03-02 21 views

risposta

67

Il socket ha una funzione che recupera l'endpoint remoto. Mi piacerebbe dare a questo (a lungo ish) catena di comandi un andare, si dovrebbe recuperare la rappresentazione di stringa dell'indirizzo IP estremità remota:

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(); 

o la versione 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

Grazie per la risposta, ho capito la catena può essere scritta semplicemente come:.. socket.remote_endpoint() indirizzo() to_string() – kyku

+3

Sì, è così che avrei fatto (supponendo che non ci fossero possibilità di null o errori nei punti intermedi). L'ho lasciato ampliato a scopo esplicativo. A mio parere, la versione one-liner è migliore (mi piace il mio codice relativamente compatto, quindi posso vederne di più su uno schermo). – paxdiablo

21

o, ancora più semplice, con boost::lexical_cast:

#include <boost/lexical_cast.hpp> 

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

Questo è molto utile perché include sia 'address()' che 'port()', che 'address(). To_string()' lascia fuori. – Sean

+0

Si noti che questo genera un'eccezione se l'endpoint non è connesso. – Claudiu

Problemi correlati