2010-03-19 63 views
6

我有一個運行需要網絡連接的工具的應用程序。現在我的目標是檢查用戶是否有網絡連接,如果他沒有網絡連接,我可以直接顯示錯誤而無需繼續進行。如果他有,他可以繼續處理我的申請。所以我的基本需求是檢查用戶是否有網絡連接。我如何通過Qt 4.4實現?我正在使用Windows XP。使用Qt 4.4驗證網絡連接

回答

10

此代碼將幫助你。

#include <QtCore/QCoreApplication> 
#include <QtNetwork/QNetworkInterface> 

bool isConnectedToNetwork() 
{ 
    QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces(); 
    bool result = false; 

    for (int i = 0; i < ifaces.count(); i++) 
    { 
     QNetworkInterface iface = ifaces.at(i); 
     if (iface.flags().testFlag(QNetworkInterface::IsUp) 
      && !iface.flags().testFlag(QNetworkInterface::IsLoopBack)) 
     { 

#ifdef DEBUG 
      // details of connection 
      qDebug() << "name:" << iface.name() << endl 
        << "ip addresses:" << endl 
        << "mac:" << iface.hardwareAddress() << endl; 
#endif 

      // this loop is important 
      for (int j=0; j<iface.addressEntries().count(); j++) 
      { 
#ifdef DEBUG 
       qDebug() << iface.addressEntries().at(j).ip().toString() 
         << "/" << iface.addressEntries().at(j).netmask().toString() << endl; 
#endif 

       // we have an interface that is up, and has an ip address 
       // therefore the link is present 

       // we will only enable this check on first positive, 
       // all later results are incorrect 
       if (result == false) 
        result = true; 
      } 
     } 

    } 

    return result; 
} 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    QTextStream output(stdout); 


    output << endl << "Connection Status: " << ((isConnectedToNetwork())?"Connected":"Disconnected") << endl; 


    return a.exec(); 
} 
+1

就像我在我的回答中寫道的那樣:QNetworkInterface會告訴你只有與某個網絡的連接已經啓動。它可能是沒有互聯網接入的局域網,可以將筆記本電腦與移動設備,虛擬機網絡等連接起來的ad-hoc wlan。我不認爲這是OP所尋找的信息。 – chalup 2010-03-19 09:15:59

+0

是的...這就夠了..做了伎倆... – liaK 2010-03-19 11:49:20

+1

感謝您的代碼。但是如果有人在她/他的計算機中安裝了虛擬機(像我一樣),則此代碼將失敗。如果我有時間,我會盡力解決它。 – 2013-01-20 19:47:28

1

我假定通過「網絡連接」,你的意思是「互聯網連接」,即你不關心局域網或你的桌面和移動設備之間的一些特定網絡。

最簡單的方法就是連接到您的應用程序需要的互聯網服務,讓操作系統處理網絡請求。如果您收到回覆,則表示有連接,如果請求超時,則表示沒有連接。

您可以通過QNetworkInterface :: flags()檢查網絡接口的狀態,但是這並不能告訴您接口所連接的網絡的信息:接口可能已經啓動,但只連接到沒有Internet的LAN訪問。