在我的电脑(Surface Pro 2)上,只有一个网络适配器,
它是一个无线LAN适配器.
它是一个无线LAN适配器.
我参与了一个小型的C项目,它使用boost :: asio来连接
localhost并做它的工作,一切都很好.
但今天我发现如果我从互联网上断开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到localhost就可以了.
我感到困惑,本地网络程序是否需要互联网?
本地网络程序是否需要LAN适配器?
为什么ping工作正常?
解决方法
我在Linux机器上遇到了同样的问题,并查看了提升asio文档.您只需要在查询构造函数中添加一个flag参数:
tcp :: resolver :: query query(“localhost”,“10127”,tcp :: resolver :: query :: canonical_name);
注意:查询的完整范围名称是boost :: asio :: ip :: tcp :: resolver :: query.
发生这种情况是因为此处传递的默认flags参数是boost :: asio :: ip :: tcp :: resolver :: query :: address_configured,这意味着如果非环回IPv4 / IPv6,则调用应仅解析IPv4 / IPv6地址地址是为系统配置的.