在我的计算机(Surface Pro 2)上,只有一个网络适配器,
它是一个无线局域网适配器。
我从事一个小型C++项目,它使用 boost::asio 连接到
本地主机并完成其工作,一切都很好。
但是今天我发现,如果我断开WLAN与Internet的连接,
该程序不起作用。
boost::asio 的解析器将引发异常:
tcp::resolver::query query("localhost", "10127");
tcp::resolver resolver(io_service_);
tcp::resolver::iterator iterator;
try {
iterator = resolver.resolve(query);
}
catch (boost::system::system_error& e) {
log(e.what());
}
错误消息是:所请求的名称有效,但没有数据
找到了所请求类型的。
Ping到localhost即可。
我感到困惑,本地网络程序需要Internet吗?
本地网络程序是否需要LAN适配器?
为什么ping可以正常工作?
最佳答案
我只是在Linux机器上遇到了同样的问题,然后查阅了boost asio文档。您只需要向query
构造函数添加一个标志参数即可: tcp::resolver::query query("localhost","10127",tcp::resolver::query::canonical_name);
注意:query
的全范围名称是boost::asio::ip::tcp::resolver::query
。
发生这种情况的原因是,此处传递的默认标志参数是boost::asio::ip::tcp::resolver::query::address_configured
,这意味着,如果为系统配置了非环回IPv4/IPv6地址,则该调用仅应解析IPv4/IPv6地址。