在我的电脑(Surface Pro 2)上,只有一个网络适配器, 它是一个无线 LAN 适配器。
我在一个小型 C++ 项目上工作,它使用 boost::asio 连接到 本地主机并执行它的工作,一切都很好。
但是今天我发现,如果我断开WLAN与互联网的连接, 这个程序不工作。
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 本地主机正常。
我很疑惑,本地网络程序需要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/如果为系统配置了非环回 IPv4/IPv6 地址,则为 IPv6 地址。
关于c++ - boost::asio 在没有 WLAN 的情况下无法连接到本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22322506/