我正在使用Boost ASIO库在C ++中编写客户端。我想得到服务器IP的字符串表示形式,以显示在我的客户端日志中。有谁知道怎么做?
答案 0 :(得分:1)
就获取IP而言,套接字具有将检索远程端点的功能。我给这个命令链,他们应该检索远程端IP地址的字符串表示:
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();
对于连接视角,在asio中从未见过这样的功能。
答案 1 :(得分:0)
std::string s = boost::lexical_cast<std::string>(socket.remote_endpoint());
这应该可以解决问题!
答案 2 :(得分:0)
您可能希望进行主机查找:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/range/iterator_range.hpp>
using boost::asio::ip::tcp;
int main() {
char name[64], domain[64];
if (::gethostname(name, 64)) ::perror("gethostname failed");
if (::getdomainname(domain, 64)) ::perror("getdomainname failed");
boost::asio::io_service ios;
tcp::resolver res(ios);
std::string name_s(name), domain_s(domain);
for (auto match : boost::make_iterator_range(res.resolve({name_s+"."+domain_s, "0"}), {})) {
std::cout << name << " -> " << match.endpoint().address() << "\n";
}
}
可能会打印类似
的内容desktop.fritz.box -> 192.168.182.20