前言
在Qt中判斷網絡是否連接有兩種方式,其中一種是網絡連接但是不一定能上網,可能只是連接了網線或者Wi-Fi,但不一定能夠上互聯網。另一種判斷該網絡是否可以連接互聯網,兩種情況的判別方式有所區別。
正文
第一種:只需要判斷網絡是否有連接,不一定能上網
這個很簡單,直接通過Qt的類QNetworkConfigurationManager自帶的函數就可以判斷(該方法也適用於Android平台):
bool CommonParameter::isNetWorkOnline() { QNetworkConfigurationManager mgr; return mgr.isOnline(); }
第二種:判斷是否能上網
這種方式是檢查是否連接互聯網,原理:通過訪問指定的網站,如果能訪問成功表示已正常連接。
void CommonParameter::checkNetWorkOnline() { QHostInfo::lookupHost("www.baidu.com",this,SLOT(onLookupHost(QHostInfo))); } void CommonParameter::onLookupHost(QHostInfo host) { if (host.error() != QHostInfo::NoError) { qDebug() << "Lookup failed:" << host.errorString(); //網絡未連接,發送信號通知 emit sigLookUpHostResult(false); } else{ emit sigLookUpHostResult(true); } }
通過靜態函數QHostInfo::lookupHost訪問指定網絡后會將結果返回到槽里面,然后再將結果發送信號出去。
監測網絡變化
第一種方法可以獲取到當前網絡狀態,但是如果要實時監測到網絡變化,可以通過QNetworkConfigurationManager中的信號來獲取,如下
void onlineStateChanged(bool isOnline)
官方說明:This signal is emitted when the device changes from online to offline mode or vice versa. isOnline represents the new state of the device.
The state is considered to be online for as long as allConfigurations(QNetworkConfiguration::Active) returns a list with at least one entry.
所以,可以通過連接這個信號來實現網絡監測,親測可用。
轉自:https://blog.csdn.net/luoyayun361/article/details/60865337