在尝试使用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();
}
我经历过谷歌指导的很多网站,但没有找到与此问题相关的任何内容。 任何帮助或提示将不胜感激
答案 0 :(得分:0)
正在解析的主机名无效。尝试将解析程序的查询主机更改为“172.34.22.11”。在URL中,“http://172.34.22.11/test/”:
在较高级别,通过TCP在客户端和服务器(主机)之间进行网络通信。客户端将创建HTTP请求,将路径包含在请求中,并将完整请求写入TCP套接字。服务器将从TCP套接字读取HTTP请求,根据路径处理请求,然后通过TCP向客户端写入HTTP响应。
主机名与点连接并指定为仅允许:
因此,“172.34.22.11/test/”包含无效字符,可能无法解析。有关详细信息,请参阅RFC952和RFC1123。