gpt4 book ai didi

C++ Boost::Asio 我得到了 remote.Endpoint().address,现在如何解析主机名?

转载 作者:行者123 更新时间:2023-11-28 06:03:35 26 4
gpt4 key购买 nike

我正在使用 Boost::Asio。

我有一个服务器,在连接上我可以打印出客户端 IP。但是,我也想获取并打印出他们解析的主机名。

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

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

s 打印 127.0.0.1 正常,但现在我想要 IP 的解析主机名。在您使用的基本套接字中:

gethostbyaddr((char *)&from.sin_addr, sizeof (struct in_addr),from.sin_family);

我试过使用:

//tcp::resolver::query query(tcp::v6(), host, port);
tcp::resolver::query query(tcp::v4(), host, port);
tcp::resolver resolver(io_service);

但事后并没有太多运气或能力找到任何具体的例子来解决连接问题。

最佳答案

您可以使用 async_resolve .它与 Asio 中的其他异步操作应该没有太大区别。

一个简单的例子:

#include <boost/asio/io_service.hpp>
#include <boost/asio/write.hpp>
#include <boost/asio/buffer.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <array>
#include <string>
#include <iostream>

using namespace boost::asio;
using namespace boost::asio::ip;
using namespace std;

void resolve_handler(const boost::system::error_code &ec,
tcp::resolver::iterator it)
{
tcp::resolver::iterator end;
for (; it != end; ++it) {
cout << it->host_name() << endl;
}
}

int main()
{
io_service ioservice;
tcp::resolver resolv{ioservice};
tcp::endpoint endpoint{address::from_string("74.125.239.48"), 80};
resolv.async_resolve(endpoint, resolve_handler);
ioservice.run();
return 0;
}

关于C++ Boost::Asio 我得到了 remote.Endpoint().address,现在如何解析主机名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32815990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com