C ++ / Qt对网络状态的反应发生了变化

时间:2016-07-26 07:54:09

标签: c++ qt networking

故事:我正在使用与服务器的Websocket连接的 C ++ / Qt-Application 。在某些用例中,网络连接可能始终不可用(即网络覆盖不良,有人拔出网线......)。因此,只要连接再次可用,应用程序就会重新连接到服务器。

问题:我使用不同的方式找到了关于此主题的一些主题。我试过的事情:

    带有QNetworkConfigurationManager信号的
  • onlineStateChanged 带有QNetworkSession信号
  • stateChanged

但我的插槽onNetworkStateChange永远不会被调用。但是,Linux本身会识别我是否拔下网线:

默认控制台

[ 2573.338735] libphy: 4a101000.mdio:00 - Link is Down
[ 2584.358925] libphy: 4a101000.mdio:00 - Link is Up - 100/Full

源代码:

websocketclient.h

class WebSocketClient : public QObject
{
    Q_OBJECT
public:
    explicit WebSocketClient(const QUrl &url, QObject *parent = 0);

private slots:
    //way 1: QNetworkConfigurationManager
    void onNetworkStateChanged1(bool isOnline);
    //way 2: QNetworkSession
    void onNetworkStateChanged2(QNetworkSession::State state);
};

websocketclient.cpp

#include "websocketclient.h"

WebSocketClient::WebSocketClient(const QUrl &url, QObject *parent) :
    QObject(parent),
    url(url)
{
    //way 1
    QNetworkConfigurationManager ncm;
    connect(&ncm, SIGNAL(onlineStateChanged(bool)), this, SLOT(onNetworkStateChanged1(bool)));

    //way 2
    QNetworkConfiguration ncfg = ncm.defaultConfiguration() //i also tried the configurationFromIdentifier("eth0")
    QNetworkSession session(ncfg);
    connect(&session, SIGNAL(stateChanged(QNetworkSession::State)), this, SLOT(onNetworkStateChanged(QNetworkSession::State)));

    //some websocket stuff
}

void WebSocketClient::onNetworkStateChanged1(bool isOnline)
{
    qDebug() << "Network state changed, now" << isOnline;
}

void WebSocketClient::onNetworkStateChanged2(QNetworkSession::State state)
{
    qDebug() << "Network state changed, now" << state;
}

1 个答案:

答案 0 :(得分:1)

构造函数执行完成后,

ncmncfg超出范围,将ncmncfg实现为WebSocketClient成员。