c++ - boost::asio 在没有 WLAN 的情况下无法连接到本地主机

标签 c++ boost network-programming boost-asio wifi

在我的电脑(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/

相关文章:

c++ - 带有 C++ 的 OS X 中的 SIMD Sony vector 数学库

c++ - 从 boost 套接字接收数据问题

c++ - 使用 C++ 更改 IP 设置

ios - reachabilityWithHostName 超时

python - 扭曲的框架服务器作为客户端建立连接?

c++ - 有没有办法让 operator= 用于枚举?

c++ - 模板类继承

c++ - 字符串连接,错误

c++ - BGL : Unable to access bundled vertex properties

c++ - boost::filtered_range 值的引用类型