1
話題:私はのC++/QtアプリケーションとWebsocketをサーバに接続しています。いくつかのユースケースでは、ネットワーク接続が常に利用可能でない場合があります(ネットワーク接続が悪い、ネットワークケーブルを抜くなど)。したがって、アプリケーションは、接続が再び利用可能になるとすぐにサーバーに再接続する必要があります。C++/Qtがネットワーク状態に反応しました。
問題:このトピックに関するいくつかのスレッドを、さまざまな方法で見つけました。
stateChanged
信号とonlineStateChanged
信号
QNetworkSession
で
QNetworkConfigurationManager
をしかし、私のスロットが呼ばれることは決してありませんonNetworkStateChange:私が試したもの。デフォルトのコンソール
[ 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); };
しかし、Linux自体は、私は、ネットワークケーブルを引く場合を認識し、我々 bsocketclient.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; }
コンストラクタの実行が完了したら 'ncm'と' ncfg'がスコープから外れることがあります。おそらく 'ncm'と' ncfg'を 'WebSocketClient'メンバとして実装するべきでしょうか? – KernelPanic
あなたはそれを解決しました、ありがとう! – Cheesi