最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

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

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

在工程文件 *.pro 中添加 network 選項(xiàng)后編譯:

QT+=core qui network

獲取主機(jī)IP地址

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

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

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

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

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

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

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

void MainWindow::on_pushButton_2_clicked()
{
    QNetworkInterface thisComputer;//實(shí)例化網(wǎng)絡(luò)接口類
    QList<QNetworkAddressEntry> addressEntry;//創(chuàng)建網(wǎng)絡(luò)地址列表
    QList<QNetworkInterface> networkInterfaceList;//網(wǎng)絡(luò)接口類列表
    QString displaystring;
    networkInterfaceList = thisComputer.allInterfaces();//獲取主機(jī)的所有網(wǎng)絡(luò)接口
    int i;
    for(i=0; i< networkInterfaceList.size();i++){
        displaystring += tr("Network Interface %1:\n").arg(i+1);
        //前面的“%1”顯示的內(nèi)容是后面arg里面的內(nèi)容為了顯示是第幾個(gè)網(wǎng)絡(luò)接口
        displaystring += networkInterfaceList.at(i).name()+"\n";
        //獲取網(wǎng)絡(luò)接口名稱
        addressEntry = networkInterfaceList.at(i).addressEntries();
        //獲取對(duì)應(yīng)的網(wǎng)絡(luò)接口的所有子網(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 的實(shí)例,用 QHostAddress 類 toString 的方法直接輸出地址值。

獲取主機(jī) MAC 地址 

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

void MainWindow::on_pushButton_3_clicked()
{
    QNetworkInterface thisComputer;//實(shí)例化網(wǎng)絡(luò)接口類
    QList<QNetworkInterface> networkInterfaceList;//網(wǎng)絡(luò)接口類列表
    QString displaystring;
    networkInterfaceList = thisComputer.allInterfaces();//獲取主機(jī)的所有網(wǎng)絡(luò)接口
    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實(shí)現(xiàn)獲取基本網(wǎng)絡(luò)信息的文章就介紹到這了,更多相關(guān)Qt獲取網(wǎng)絡(luò)信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++的sstream標(biāo)準(zhǔn)庫(kù)詳細(xì)介紹

    C++的sstream標(biāo)準(zhǔn)庫(kù)詳細(xì)介紹

    以下是對(duì)C++中的的sstream標(biāo)準(zhǔn)庫(kù)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法

    C語(yǔ)言中結(jié)構(gòu)體(struct)的幾種初始化方法

    相信大家都知道struct結(jié)構(gòu)體是C語(yǔ)言中非常重要的復(fù)合類型,初始化的方法很多,那么小編下面對(duì)這些方法進(jìn)行總結(jié),便于自己和大家以后查閱,有需要的可以參考借鑒。
    2016-08-08
  • C語(yǔ)言深入細(xì)致講解動(dòng)態(tài)內(nèi)存管理

    C語(yǔ)言深入細(xì)致講解動(dòng)態(tài)內(nèi)存管理

    動(dòng)態(tài)內(nèi)存是相對(duì)靜態(tài)內(nèi)存而言的。所謂動(dòng)態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動(dòng)態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語(yǔ)言中動(dòng)態(tài)內(nèi)存的管理
    2022-05-05
  • C++中的auto_ptr智能指針的作用及使用方法詳解

    C++中的auto_ptr智能指針的作用及使用方法詳解

    這篇文章主要介紹了C++中的auto_ptr智能指針的作用及使用方法詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • C++單一職責(zé)原則示例代碼淺析

    C++單一職責(zé)原則示例代碼淺析

    我們?cè)谠O(shè)計(jì)一個(gè)類時(shí)要學(xué)會(huì)發(fā)現(xiàn)職責(zé),并把那些職責(zé)相互分離,其實(shí)要去判斷是否應(yīng)該分離出一個(gè)類來(lái)并不難,前面說(shuō)過(guò),一個(gè)類應(yīng)該只有一個(gè)引起它變化的原因,如果你能想到其它的原因也能去改變這個(gè)類,那么這個(gè)類就具有多于1個(gè)的職責(zé),就應(yīng)該考慮類的職責(zé)分離
    2023-02-02
  • C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理你了解嗎

    C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言的動(dòng)態(tài)內(nèi)存管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • C++第三方庫(kù)jsoncpp超詳細(xì)講解

    C++第三方庫(kù)jsoncpp超詳細(xì)講解

    這篇文章主要介紹了C++第三方庫(kù)jsoncpp的相關(guān)資料,JSONcpp是一個(gè)在C++中用于處理JSON數(shù)據(jù)的庫(kù),支持JSON格式的序列化和反序列化,通過(guò)JSONcpp,可以輕松地將數(shù)據(jù)對(duì)象組織成JSON格式的字符串,需要的朋友可以參考下
    2024-10-10
  • c++實(shí)現(xiàn)逐行讀取配置文件寫入內(nèi)存的示例

    c++實(shí)現(xiàn)逐行讀取配置文件寫入內(nèi)存的示例

    這篇文章主要介紹了c++實(shí)現(xiàn)逐行讀取配置文件寫入內(nèi)存的示例,需要的朋友可以參考下
    2014-05-05
  • C語(yǔ)言深入講解語(yǔ)句與選擇結(jié)構(gòu)的使用

    C語(yǔ)言深入講解語(yǔ)句與選擇結(jié)構(gòu)的使用

    這篇文章主要為大家介紹了C語(yǔ)言的語(yǔ)句與選擇結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • C語(yǔ)言超詳細(xì)講解雙向帶頭循環(huán)鏈表

    C語(yǔ)言超詳細(xì)講解雙向帶頭循環(huán)鏈表

    帶頭雙向循環(huán)鏈表:結(jié)構(gòu)最復(fù)雜,一般用在單獨(dú)存儲(chǔ)數(shù)據(jù)。實(shí)際中使用的鏈表數(shù)據(jù)結(jié)構(gòu),都是帶頭雙向循環(huán)鏈表。另外這個(gè)結(jié)構(gòu)雖然結(jié)構(gòu)復(fù)雜,但是使用代碼實(shí)現(xiàn)以后會(huì)發(fā)現(xiàn)結(jié)構(gòu)會(huì)帶來(lái)很多優(yōu)勢(shì),實(shí)現(xiàn)反而簡(jiǎn)單
    2023-02-02

最新評(píng)論

平定县| 泰安市| 阜南县| 依兰县| 永州市| 会昌县| 辽阳县| 定结县| 襄城县| 乌拉特后旗| 深泽县| 晴隆县| 安平县| 确山县| 旌德县| 蒙自县| 沈丘县| 仁化县| 五大连池市| 黄大仙区| 永城市| 新宾| 宾阳县| 教育| 武川县| 张家港市| 蒙城县| 陆良县| 东台市| 德兴市| 林州市| 会泽县| 石门县| 乃东县| 泸水县| 汝城县| 徐州市| 西吉县| 永仁县| 登封市| 阿城市|