2009-03-02 13 views

Respuesta

67

El socket tiene una función que recuperará el punto extremo remoto. Daría esta cadena (largo o menos) de comandos de una oportunidad, que deben recuperar la representación de cadena de la dirección IP del extremo remoto:

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 versión de una sola línea:

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

Gracias por su respuesta, me di cuenta de la cadena se puede escribir simplemente como:.. socket.remote_endpoint() Dirección() to_string() – kyku

+3

Sí, así es como lo habría hecho (suponiendo que no hubiera posibilidades de nulos o errores en los puntos provisionales). Lo dejé expandido para propósitos explicativos. En mi opinión, la versión de una línea es mejor (me gusta mi código relativamente compacto para que pueda ver más en una pantalla). – paxdiablo

21

o, más fácil, con boost::lexical_cast:

#include <boost/lexical_cast.hpp> 

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

Esto es muy útil porque incluye tanto 'address()' como 'port()', que 'address(). To_string()' deja fuera. – Sean

+0

Tenga en cuenta que esto arroja una excepción si el punto final no está conectado. – Claudiu

Cuestiones relacionadas