C++ 找不到主机(权威)
最近,我编写了一些应用程序,创建了许多线程,并作为客户端连接到不同的服务器,我使用了套接字,然后我意识到我可以用boost库来实现,所以我重写了应用程序,以增强部分连接工作正常,部分错误: 找不到主机(权威) 我不知道为什么会发生这种情况,当我使用getaddrbyhost时,它工作得很好,但是boost解析器给出了这个错误。。。 可能有什么问题,每个地址都是域 下面是代码的一部分:C++ 找不到主机(权威),c++,boost,boost-asio,C++,Boost,Boost Asio,最近,我编写了一些应用程序,创建了许多线程,并作为客户端连接到不同的服务器,我使用了套接字,然后我意识到我可以用boost库来实现,所以我重写了应用程序,以增强部分连接工作正常,部分错误: 找不到主机(权威) 我不知道为什么会发生这种情况,当我使用getaddrbyhost时,它工作得很好,但是boost解析器给出了这个错误。。。 可能有什么问题,每个地址都是域 下面是代码的一部分: class client { public: client(boost::asio::io_servic
class client
{
public:
client(boost::asio::io_service& io_service,
const char* server, const char* port, const int i)
: resolver_(io_service),
socket_(io_service),
i_(i)
{
tcp::resolver::query query(tcp::v4(), boost::lexical_cast< std::string >( server ), boost::lexical_cast< std::string >( port ), boost::asio::ip::resolver_query_base::numeric_service);
resolver_.async_resolve(query,
boost::bind(&client::handle_resolve, this,
boost::asio::placeholders::error,
boost::asio::placeholders::iterator));
}
private:
void handle_resolve(const boost::system::error_code& err,
tcp::resolver::iterator endpoint_iterator)
{
if (!err)
{
boost::asio::async_connect(socket_, endpoint_iterator,
boost::bind(&client::handle_connect, this,
boost::asio::placeholders::error));
}
else
{
//here outputs error
std::cout << __FUNCTION__ << " Error: " << err.message() << "\n";
}
}
类客户端
{
公众:
客户端(boost::asio::io_服务和io_服务,
常量字符*服务器,常量字符*端口,常量整数i)
:解析器(io_服务),
插座(io_服务),
一(一)
{
tcp::resolver::query query(tcp::v4(),boost::lexical\u cast(服务器),boost::lexical\u cast(端口),boost::asio::ip::resolver\u query\u base::numeric\u服务);
解析程序\异步\解析(查询,
boost::bind(&client::handle_resolve),这,
boost::asio::占位符::错误,
boost::asio::占位符::迭代器);
}
私人:
无效句柄解析(常量boost::system::error\u代码和错误,
tcp::resolver::迭代器端点(迭代器)
{
如果(!err)
{
asio::异步连接(套接字、端点迭代器、,
boost::bind(&client::handle_connect),这,
boost::asio::占位符::错误);
}
其他的
{
//这里输出错误
std::cout最有可能的是,该域不能通过DNS解析,但可以通过主机平台使用的其他方法解析,例如/etc/hosts
样式表、WINS或类似的名称解析方案。答案是,我试图连接的主机在另一个LAN网络寄存器中的LAN网络之外这是一个棘手的领域。我不知道这一点,因为我在测试存储在公司数据库中的大约20000台主机。我以为所有东西都只在一个LAN网络上运行,但没有。所以我能做什么,我使用linux来测试,每个域都是全局域而不是本地域,它可以通过getaddrbyhost解决,但不能通过boost resolver解决…只是对一些人来说…但是同一个域可以使用非boost代码,这对meIs来说很奇怪,失败的域有什么模式吗?你能在这里分享一些吗?好吧,这两段代码做不同的事情。一段使用主机的默认名称解析方案,另一段使用DNS。最有可能的是,工作的是通过主机的默认名称解析方案进行解析的eme,但不是DNS。boost使用DNS?这是在没有任何模式的情况下发生的,可能我一次创建了太多客户端,会是这样吗?