跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 工具系统 > 数据分析 > [Qt网络编程]之获取基本网络信息

[Qt网络编程]之获取基本网络信息

时间:2024-04-19 15:00:24 来源:网络cs 作者:言安琪 栏目:数据分析 阅读:

标签: 网络  基本  信息  获取 

目录

前言

获取主机IP地址

获取主机 IP 地址和子网掩码

获取主机 MAC 地址 


前言

        获取主机的网络地址和接口信息是进行网络编程的第一步,也是网络编程的基础。Qt提供了网络接口类 QNetworkInterface、网络地址人口类 QNetworkAddressEntry 和主机地址类 QHostAddress 来获取和使用地址信息。其中网络接口类 QNetworkInterface 描述了主机的卫地址和接口列表,网络地址人口类 QNetworkAddressEntry 用于存放 IP 地址、子网掩码和广播地址,主机地址类QHostAddress 用于定义 Qt 环境下的地址类型。

 获取网络信息的步骤是:

首先定义 QNetworkInterface 的实例,通过 QNetworkInterface 实例的 allAddresses()方法,得到主机地址 QHostAddress 的列表。如果需要获得 IP 地址、子网掩码,通过 QNetworkInterface 实例的 addressEntries()方法,获得网络地址入口 QNctworkAddressEntry 的列表。如果需要获得网络物理 MAC 地址,通过 QNetworkInterface 实例的 hardwareAddress()方法,获得网络物理地址。

        下面用一个综合的例子来演示这三个类的使用,新建一个工程,设计 ui 界面,其中三个按钮分别演示上述的三个步骤,右边是文本浏览器TextBrowser 部件。

在工程文件 *.pro 中添加 network 选项后编译:

QT+=core qui network

获取主机IP地址

在on_pushButton_clicked()函数中直接从网络接口类中获得主机地址列表:

#include<QNetworkInterface>void MainWindow::on_pushButton_clicked(){    QNetworkInterface thisComputer;//实例化网络接口类    QList<QHostAddress> addressList;//创建主机地址列表    addressList = thisComputer.allAddresses();//获取所有主机地址    QString displaystring;//用来存储获取来的地址    int i;    for(i=0;i<addressList.size();i++){        displaystring+=tr("IPAddress %1:\n").arg(i+1);        //前面的“%1”显示的内容是后面arg里面的内容为了显示是第几个地址        displaystring+=addressList.at(i).toString()+"\n";        //将对应的第几个地址添加到存储字符串中    }    ui->textBrowser->setText(displaystring);//在文本显示区域里面显示}

        其中 QNetworkInterface 类中 allAddresses() 方法是 QNetworkInterface 类的静态方法,也可以用下面的代码直接获得地址列表。

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

        这种方法,直接从 QNetworkInterface 获取主机地址信息,方便快捷;缺点是不能同时获得相应的子网掩码信息。


获取主机 IP 地址和子网掩码

        继续完成 GetNetworkEntry 按钮实现,该按钮的功能是从 QNetworkAddressEntry 类中获得 IP 地址和子网掩码。获取 QNetworkAddressEntry 的方法稍微复杂一些,需要首先通过 allInterfaces() 获得实际的网络接口列表,再通过列表中的 addressEntries()函数获得网络地址人口,最后根据网络地址入口检索出 IP 地址和子网掩码。

void MainWindow::on_pushButton_2_clicked(){    QNetworkInterface thisComputer;//实例化网络接口类    QList<QNetworkAddressEntry> addressEntry;//创建网络地址列表    QList<QNetworkInterface> networkInterfaceList;//网络接口类列表    QString displaystring;    networkInterfaceList = thisComputer.allInterfaces();//获取主机的所有网络接口    int i;    for(i=0; i< networkInterfaceList.size();i++){        displaystring += tr("Network Interface %1:\n").arg(i+1);        //前面的“%1”显示的内容是后面arg里面的内容为了显示是第几个网络接口        displaystring += networkInterfaceList.at(i).name()+"\n";        //获取网络接口名称        addressEntry = networkInterfaceList.at(i).addressEntries();        //获取对应的网络接口的所有子网掩码        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 地址的方法和上面类似。有时候,一个网卡上支持了多个网络接口,所以不是每个网络接口都有 MAC地址,在本例子中,可以看到网络接口6没有 MAC地址。 

void MainWindow::on_pushButton_3_clicked(){    QNetworkInterface thisComputer;//实例化网络接口类    QList<QNetworkInterface> networkInterfaceList;//网络接口类列表    QString displaystring;    networkInterfaceList = thisComputer.allInterfaces();//获取主机的所有网络接口    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);}


感谢大家看到这里!我之后会持续发布有关Qt平台的一些内容,接下来还有一些网络编程的内容,希望大家可以关注我,我很希望能在这里和大家一起交流学习!!!大家也可以私信我哦!!!共同进步!!!

本文链接:https://www.kjpai.cn/news/2024-04-19/160360.html,文章来源:网络cs,作者:言安琪,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论