Ubuntu中基於QT的系統網線連接狀態的實時監視

1.必要準備

         需包: #include <QNetworkInterface>

2.實現獲取當前的網線連接狀態

       以下是自己在網絡上搜到的一個解決方法,且沒有加入iface.flags().testFlag(QNetworkInterface::IsRunning) 這一邏輯判斷,經測試實時性極不可靠,在虛擬機裏調試時發現有時候有10s左右的延遲,但運行在嵌入式系統上時幾乎就是一擺設。於是自己閱讀QT幫助嘗試了多種方法並加以改造,發現加入了第二項條件判斷後,結果就非常的可靠了。

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

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

            // this loop is important
            for (int j=0; j<iface.addressEntries().count(); j++)
            {
                // 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 (isConnected == false)
                    isConnected = true;
            }
        }

    }

    return isConnected;
}

3. 實時性監測實現

    實時性的實現是利用了QT的定時器和信號與槽機制。這個大家甚至比我都清楚,就不囉嗦了。


發佈了34 篇原創文章 · 獲贊 11 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章