故事:我正在使用与服务器的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;
}
答案 0 :(得分:1)
ncm
和ncfg
超出范围,将ncm
和ncfg
实现为WebSocketClient
成员。