c++ - 在运行时更改网络接口(interface)

标签 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));

最佳答案

仅当网络无法访问时,您才可以尝试重新创建QNetworkAccessManager:

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

The documentation解释:

By default the value of this property reflects the physical state of the device.

关于c++ - 在运行时更改网络接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213136/

相关文章:

c++ - 强制在 Mac 上对 C++ 代码使用前向声明(使用 Xcode)

c++ - Qt - QVBoxLayout 中的重叠标签

c++ - 如何将 QCommandLineParser 用于具有多个参数的参数?

c++ - 如何在单独的文件上调用模板构造函数?

c++ - 将具有多个键的 perl 映射转换为 C++

qt - QInputMethodEvent 用法的任何示例?

Qt培训提示和技巧

c++ - QString 转 std::string Unicode 麻烦

c++ - 在 QAbstractItemView 中查找拖放操作的结束

c++ - 唯一的 10 位序列 ID - 200 个 ID/秒