欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Qt實現(xiàn)獲取基本網(wǎng)絡信息

 更新時間:2024年04月18日 08:30:25   作者:三號原子  
這篇文章主要為大家詳細介紹了Qt實現(xiàn)獲取基本網(wǎng)絡信息的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

前言

獲取主機的網(wǎng)絡地址和接口信息是進行網(wǎng)絡編程的第一步,也是網(wǎng)絡編程的基礎(chǔ)。Qt提供了網(wǎng)絡接口類 QNetworkInterface、網(wǎng)絡地址人口類 QNetworkAddressEntry 和主機地址類 QHostAddress 來獲取和使用地址信息。其中網(wǎng)絡接口類 QNetworkInterface 描述了主機的衛(wèi)地址和接口列表,網(wǎng)絡地址人口類 QNetworkAddressEntry 用于存放 IP 地址、子網(wǎng)掩碼和廣播地址,主機地址類QHostAddress 用于定義 Qt 環(huán)境下的地址類型。

 獲取網(wǎng)絡信息的步驟是:

  • 首先定義 QNetworkInterface 的實例,通過 QNetworkInterface 實例的 allAddresses()方法,得到主機地址 QHostAddress 的列表。
  • 如果需要獲得 IP 地址、子網(wǎng)掩碼,通過 QNetworkInterface 實例的 addressEntries()方法,獲得網(wǎng)絡地址入口 QNctworkAddressEntry 的列表。
  • 如果需要獲得網(wǎng)絡物理 MAC 地址,通過 QNetworkInterface 實例的 hardwareAddress()方法,獲得網(wǎng)絡物理地址。

下面用一個綜合的例子來演示這三個類的使用,新建一個工程,設計 ui 界面,其中三個按鈕分別演示上述的三個步驟,右邊是文本瀏覽器TextBrowser 部件。

在工程文件 *.pro 中添加 network 選項后編譯:

QT+=core qui network

獲取主機IP地址

在on_pushButton_clicked()函數(shù)中直接從網(wǎng)絡接口類中獲得主機地址列表:

#include<QNetworkInterface>
void MainWindow::on_pushButton_clicked()
{
    QNetworkInterface thisComputer;//實例化網(wǎng)絡接口類
    QList<QHostAddress> addressList;//創(chuàng)建主機地址列表
    addressList = thisComputer.allAddresses();//獲取所有主機地址
    QString displaystring;//用來存儲獲取來的地址
    int i;
    for(i=0;i<addressList.size();i++){
        displaystring+=tr("IPAddress %1:\n").arg(i+1);
        //前面的“%1”顯示的內(nèi)容是后面arg里面的內(nèi)容為了顯示是第幾個地址
        displaystring+=addressList.at(i).toString()+"\n";
        //將對應的第幾個地址添加到存儲字符串中
    }
    ui->textBrowser->setText(displaystring);//在文本顯示區(qū)域里面顯示
}

其中 QNetworkInterface 類中 allAddresses() 方法是 QNetworkInterface 類的靜態(tài)方法,也可以用下面的代碼直接獲得地址列表。

QList<QHostAddress> addresslist = QNetworkInterface::allAddresses ()

這種方法,直接從 QNetworkInterface 獲取主機地址信息,方便快捷;缺點是不能同時獲得相應的子網(wǎng)掩碼信息。

獲取主機 IP 地址和子網(wǎng)掩碼

繼續(xù)完成 GetNetworkEntry 按鈕實現(xiàn),該按鈕的功能是從 QNetworkAddressEntry 類中獲得 IP 地址和子網(wǎng)掩碼。獲取 QNetworkAddressEntry 的方法稍微復雜一些,需要首先通過 allInterfaces() 獲得實際的網(wǎng)絡接口列表,再通過列表中的 addressEntries()函數(shù)獲得網(wǎng)絡地址人口,最后根據(jù)網(wǎng)絡地址入口檢索出 IP 地址和子網(wǎng)掩碼。

void MainWindow::on_pushButton_2_clicked()
{
    QNetworkInterface thisComputer;//實例化網(wǎng)絡接口類
    QList<QNetworkAddressEntry> addressEntry;//創(chuàng)建網(wǎng)絡地址列表
    QList<QNetworkInterface> networkInterfaceList;//網(wǎng)絡接口類列表
    QString displaystring;
    networkInterfaceList = thisComputer.allInterfaces();//獲取主機的所有網(wǎng)絡接口
    int i;
    for(i=0; i< networkInterfaceList.size();i++){
        displaystring += tr("Network Interface %1:\n").arg(i+1);
        //前面的“%1”顯示的內(nèi)容是后面arg里面的內(nèi)容為了顯示是第幾個網(wǎng)絡接口
        displaystring += networkInterfaceList.at(i).name()+"\n";
        //獲取網(wǎng)絡接口名稱
        addressEntry = networkInterfaceList.at(i).addressEntries();
        //獲取對應的網(wǎng)絡接口的所有子網(wǎng)掩碼
        for(int j=0;j<addressEntry.size();j++){
            displaystring += addressEntry.at(j).ip().toString()+ "\n";
            displaystring += addressEntry.at(j).netmask().toString()+"\n";
        }
    }
    ui->textBrowser->setText(displaystring);
}

在上面的代碼中:addressEntry.at(j).ip()和 addressEntry. at(j).netmask()返回QHostAddress 的實例,用 QHostAddress 類 toString 的方法直接輸出地址值。

獲取主機 MAC 地址 

獲取主機 MAC 地址的方法和上面類似。有時候,一個網(wǎng)卡上支持了多個網(wǎng)絡接口,所以不是每個網(wǎng)絡接口都有 MAC地址,在本例子中,可以看到網(wǎng)絡接口6沒有 MAC地址。 

void MainWindow::on_pushButton_3_clicked()
{
    QNetworkInterface thisComputer;//實例化網(wǎng)絡接口類
    QList<QNetworkInterface> networkInterfaceList;//網(wǎng)絡接口類列表
    QString displaystring;
    networkInterfaceList = thisComputer.allInterfaces();//獲取主機的所有網(wǎng)絡接口
    int i;
    for(i=0;i<networkInterfaceList.size();i++){
        displaystring+=tr("Network Interface %1:\n").arg(i+1);
        displaystring+=networkInterfaceList.at(i).name()+ "\n";
        displaystring+=networkInterfaceList.at(i).hardwareAddress()+ "\n";
    }
    ui->textBrowser->setText(displaystring);
}

到此這篇關(guān)于Qt實現(xiàn)獲取基本網(wǎng)絡信息的文章就介紹到這了,更多相關(guān)Qt獲取網(wǎng)絡信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 利用上下文屬性將?C++?對象嵌入?QML?里

    利用上下文屬性將?C++?對象嵌入?QML?里

    這篇文章主要介紹了利用上下文屬性將?C++?對象嵌入?QML里,將?QML?對象加載到?C++?應用程序中時,直接嵌入一些可在?QML?代碼中使用的?C++?數(shù)據(jù)會很有用。例如,這使得在嵌入對象上調(diào)用?C++?方法或使用?C++?對象實例作為?QML?視圖的數(shù)據(jù)模型成為可能,下面一起來學習該內(nèi)容吧
    2021-12-12
  • C++ 漢諾塔問題知識點總結(jié)

    C++ 漢諾塔問題知識點總結(jié)

    在本篇文章里小編給大家整理的是關(guān)于C++ 漢諾塔問題知識點內(nèi)容,有需要的朋友們可以參考下。
    2020-02-02
  • C++?JSON庫?nlohmann::basic_json::array?的用法示例詳解

    C++?JSON庫?nlohmann::basic_json::array?的用法示例詳解

    nlohmann::json是一個C++的JSON庫,它提供了一種容易和直觀的方法來處理JSON數(shù)據(jù),nlohmann::json::array()是用來創(chuàng)建一個JSON數(shù)組的方法,這篇文章主要介紹了C++ JSON庫nlohmann::basic_json::array的用法,需要的朋友可以參考下
    2023-06-06
  • C/C++實現(xiàn)crc碼計算和校驗

    C/C++實現(xiàn)crc碼計算和校驗

    循環(huán)冗余校驗(Cyclic Redundancy Check, CRC)是一種根據(jù)網(wǎng)絡數(shù)據(jù)包或計算機文件等數(shù)據(jù)產(chǎn)生簡短固定位數(shù)校驗碼的一種信道編碼技術(shù)。本文主要介紹了C++實現(xiàn)crc碼計算和校驗的方法,需要的可以參考一下
    2023-03-03
  • C調(diào)用C++代碼的方法步驟

    C調(diào)用C++代碼的方法步驟

    本文主要介紹了C調(diào)用C++代碼的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Matlab實現(xiàn)四種HSV色輪圖繪制的示例代碼

    Matlab實現(xiàn)四種HSV色輪圖繪制的示例代碼

    色輪圖就是色彩相位圖,它完整表現(xiàn)了色相環(huán)360度的全部顏色。本文將利用Matlab語言繪制四種不同的HSV色輪圖,感興趣的可以動手嘗試一下
    2022-07-07
  • C語言指針基礎(chǔ)詳解

    C語言指針基礎(chǔ)詳解

    這篇文章主要介紹了C語言指針的基礎(chǔ),主要對C語言中指針的本質(zhì)及常見用法做了較為通俗易懂的分析,是后續(xù)深入學習C語言的基礎(chǔ),需要的朋友可以參考下
    2021-10-10
  • C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11標準為C++引入右值引用語法的同時,還解決了一個短板,即使用簡單的方式即可在函數(shù)模板中實現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。本文就來講講二者的應用,需要的可以參考一下
    2022-09-09
  • C++ 如何實現(xiàn)一個日期類

    C++ 如何實現(xiàn)一個日期類

    通過對類和對象的學習,理解了類是對象的抽象描述,實現(xiàn)日期類涉及定義年月日屬性及成員函數(shù)如打印日期、日期加減,重點介紹了運算符重載的概念和作用,通過代碼示例展示了如何實現(xiàn)一個日期類,包括頭文件和源文件的分離編寫
    2024-10-10
  • C語言深入探究動態(tài)規(guī)劃之線性DP

    C語言深入探究動態(tài)規(guī)劃之線性DP

    線性動態(tài)規(guī)劃,是較常見的一類動態(tài)規(guī)劃問題,其是在線性結(jié)構(gòu)上進行狀態(tài)轉(zhuǎn)移,這類問題不像背包問題、區(qū)間DP等有固定的模板,線性動態(tài)規(guī)劃的目標函數(shù)為特定變量的線性函數(shù),約束是這些變量的線性不等式或等式,目的是求目標函數(shù)的最大值或最小值
    2022-04-04

最新評論