在运行时更改网络接口

时间:2014-11-30 12:16:31

标签: c++ qt qt5 wireless broadband

我正在用qt5编写一个小应用程序。此应用程序每分钟从API服务器获取回复。每件事情都运转正常,但我遇到了一个错误。

在测试应用程序时,我发现如果我的无线断开连接并再次重新连接,应用程序将正常工作。此外,如果我使用我的宽带连接并断开连接并再次重新连接,那么每件事情都可以正常工作。现在,如果我在应用程序启动时使用我的无线,那么我断开无线连接并连接我的宽带,程序不会看到宽带连接,并一直给我网络错误。

我使用单个QNetworkAccessManager实例进行连接。有趣的是,如果我为每个请求创建一个新的QNetworkAccessManager实例,应用程序将正常工作。但我认为在为每个请求声明一个新实例并建立连接时会有开销。我也尝试在请求之前使用clearAccessCache()而没有运气。

所以基本上我正在寻找一些事情来重置QNetworkAccessManager每个请求。以下是我的请求的示例代码:

// At class construct
manager = new QNetworkAccessManager(this);
// ....
// At member function
url = new QUrl("http://www.gridstatusnow.com/status");
manager->get(QNetworkRequest(*url));

1 个答案:

答案 0 :(得分:3)

只有在无法访问网络时,您才可以尝试重新创建QNetworkAccessManager

// At member function
if (manager->networkAccessible() == QNetworkAccessManager::NotAccessible)
{
    delete manager;
    manager = new QNetworkAccessManager(this);
}

The documentation解释说:

  

默认情况下,此属性的值反映设备的物理状态。