解决:没有这样的主机知道吗?

时间:2016-03-03 13:51:04

标签: c++ http networking boost

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

案例: 我正在尝试使用boost连接到网站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();
}

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

1 个答案:

答案 0 :(得分:0)

正在解析的主机名无效。尝试将解析程序的查询主机更改为“172.34.22.11”。在URL中,“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/”包含无效字符,可能无法解析。有关详细信息,请参阅RFC952RFC1123