在我的计算机(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地址。

10-08 08:20
查看更多