1
故事:我工作的一個C++/Qt的應用與WebSocket連接到服務器。在某些使用情況下,網絡連接可能始終不可用(例如,網絡覆蓋率不佳,有人拔出網線......)。因此,只要連接再次可用,應用程序就可以重新連接到服務器。C++/Qt的反應網絡狀態改變
問題:我發現一些關於此主題的線程,使用不同的方式。事情我想:
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);
};
我們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