解决方法:未知此类主机

resolve: No such host is known?

本文关键字:主机 未知 方法 解决      更新时间:2023-10-16

>我在尝试使用 c++ 中的提升解析器解析端点时遇到了一个奇怪的问题。

箱:我正在尝试使用提升 http://localhostIpAddress/test/连接到网站。其中服务器的本地地址是"172.34.22.11"(比如)。

我面临错误,说"解决:不知道这样的主机"

但是当我连接到像 google.com 这样的网站时,它能够成功解决和连接。另外,即使我尝试在浏览器中打开"http:://localhostIpAddress/test/",它也会成功打开。

下面是我的代码:

int main()
{
        std::cout << "nWebClient  is starting... n";
        boost::asio::io_service IO_Servicehttp;
        boost::asio::ip::tcp::resolver Resolverhttp(IO_Servicehttp);
        std::string porthttp = "http";
        boost::asio::ip::tcp::resolver::query Queryhttp("172.34.22.11/test/", porthttp);  
        boost::asio::ip::tcp::resolver::iterator EndPointIteratorhttp = Resolverhttp.resolve(Queryhttp);
        g_ClientHttp = new HTTPClient(IO_Servicehttp, EndPointIteratorhttp);
    }
    catch (std::exception& e)
    {
        std::cerr << e.what();
    }
}

在HTTPClient中.cpp

HTTPClient::HTTPClient(boost::asio::io_service& IO_Servicehttp, boost::asio::ip::tcp::resolver::iterator EndPointIterhttp)
: m_IOServicehttp(IO_Servicehttp), m_Sockethttp(IO_Servicehttp),m_EndPointhttp(*EndPointIterhttp)
{
    std::cout << "n Entered: HTTPClient ctor n";
    boost::asio::ip::tcp::resolver::iterator endhttp;
    boost::system::error_code error= boost::asio::error::host_not_found;
    try
    {
        while (error && EndPointIterhttp != endhttp) //if error go to next endpoint
        {
            m_Sockethttp.async_connect(m_EndPointhttp,boost::bind(&HTTPClient::OnConnect_http, this, boost::asio::placeholders::error, ++EndPointIterhttp));
        }
        if(error)
            throw boost::system::system_error(error);
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
    m_IOServicehttp.run();
}

我已经浏览了很多由谷歌指导的网站,但没有找到与此问题相关的任何内容。任何帮助或提示将不胜感激

正在解析的主机名无效。 尝试将解析程序的查询主机更改为"172.34.22.11"。 在网址中,"http://172.34.22.11/test/":

  • "http"是协议
  • "172.34.22.11"是需要解决的主机
  • "/test/"是路径

在高级别上,网络通信通过 TCP 在客户端和服务器(主机)之间进行。 客户端将创建一个 HTTP 请求,将路径作为请求的一部分包含在内,并将完整的请求写入 TCP 套接字。 服务器将从 TCP 套接字读取 HTTP 请求,根据路径处理请求,然后通过 TCP 向客户端写入 HTTP 响应。

<小时 />

主机名用点连接,并指定为仅允许:

  • ASCII 字母"a"到"z"
  • 数字
  • 连字号

因此,"172.34.22.11/test/"包含无效字符,可能无法解析。 有关更多详细信息,请参阅 RFC952 和RFC1123。