C++ 找不到主机(权威)

C++ 找不到主机(权威),c++,boost,boost-asio,C++,Boost,Boost Asio,最近,我编写了一些应用程序,创建了许多线程,并作为客户端连接到不同的服务器,我使用了套接字,然后我意识到我可以用boost库来实现,所以我重写了应用程序,以增强部分连接工作正常,部分错误: 找不到主机(权威) 我不知道为什么会发生这种情况,当我使用getaddrbyhost时,它工作得很好,但是boost解析器给出了这个错误。。。 可能有什么问题,每个地址都是域 下面是代码的一部分: class client { public: client(boost::asio::io_servic

最近,我编写了一些应用程序,创建了许多线程,并作为客户端连接到不同的服务器,我使用了套接字,然后我意识到我可以用boost库来实现,所以我重写了应用程序,以增强部分连接工作正常,部分错误:

找不到主机(权威)

我不知道为什么会发生这种情况,当我使用getaddrbyhost时,它工作得很好,但是boost解析器给出了这个错误。。。 可能有什么问题,每个地址都是域

下面是代码的一部分:

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?这是在没有任何模式的情况下发生的,可能我一次创建了太多客户端,会是这样吗?