2009-03-02 3 views

Antwort

67

Der Socket verfügt über eine Funktion, die den Remote-Endpunkt abruft. Ich würde geben dieser (long-ish) Befehlskette ein zu gehen, sollen sie die String-Darstellung der entfernten Ende IP-Adresse abgerufen werden:

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

oder die Einzeiler Version:

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

Vielen Dank für Ihre Antwort, dachte ich, die Kette heraus geschrieben werden kann, einfach so.. socket.remote_endpoint() Adresse() to_string() – kyku

+3

Ja, so hätte ich es gemacht (vorausgesetzt, es gab keine Möglichkeiten von Nullen oder Fehlern an Zwischenpunkten). Ich habe es zu Erläuterungszwecken erweitert. Meiner Meinung nach ist die Einzeiler-Version besser (ich mag meinen Code relativ kompakt, damit ich mehr davon auf einem Bildschirm sehen kann). – paxdiablo

21

oder, noch einfacher, mit boost::lexical_cast:

#include <boost/lexical_cast.hpp> 

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

Dies ist sehr nützlich, da es sowohl die 'address()' als auch die 'port()' enthält, die 'address(). To_string()' weggelassen werden. – Sean

+0

Beachten Sie, dass dies eine Ausnahme auslöst, wenn der Endpunkt nicht verbunden ist. – Claudiu