[Qt网络编程]之获取基本网络信息
温馨提示:这篇文章已超过372天没有更新,请注意相关的内容是否还可用!
目录
前言
获取主机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
void MainWindow::on_pushButton_clicked()
{
QNetworkInterface thisComputer;//实例化网络接口类
QList addressList;//创建主机地址列表
addressList = thisComputer.allAddresses();//获取所有主机地址
QString displaystring;//用来存储获取来的地址
int i;
for(i=0;itextBrowser->setText(displaystring);//在文本显示区域里面显示
}
其中 QNetworkInterface 类中 allAddresses() 方法是 QNetworkInterface 类的静态方法,也可以用下面的代码直接获得地址列表。
QList addresslist = QNetworkInterface::allAddresses ()
这种方法,直接从 QNetworkInterface 获取主机地址信息,方便快捷;缺点是不能同时获得相应的子网掩码信息。
获取主机 IP 地址和子网掩码
继续完成 GetNetworkEntry 按钮实现,该按钮的功能是从 QNetworkAddressEntry 类中获得 IP 地址和子网掩码。获取 QNetworkAddressEntry 的方法稍微复杂一些,需要首先通过 allInterfaces() 获得实际的网络接口列表,再通过列表中的 addressEntries()函数获得网络地址人口,最后根据网络地址入口检索出 IP 地址和子网掩码。
void MainWindow::on_pushButton_2_clicked()
{
QNetworkInterface thisComputer;//实例化网络接口类
QList addressEntry;//创建网络地址列表
QList networkInterfaceList;//网络接口类列表
QString displaystring;
networkInterfaceList = thisComputer.allInterfaces();//获取主机的所有网络接口
int i;
for(i=0; isetText(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 networkInterfaceList;//网络接口类列表
QString displaystring;
networkInterfaceList = thisComputer.allInterfaces();//获取主机的所有网络接口
int i;
for(i=0;itextBrowser->setText(displaystring);
}
感谢大家看到这里!我之后会持续发布有关Qt平台的一些内容,接下来还有一些网络编程的内容,希望大家可以关注我,我很希望能在这里和大家一起交流学习!!!大家也可以私信我哦!!!共同进步!!!

![[Qt网络编程]之获取基本网络信息](https://img-blog.csdnimg.cn/direct/5629aac449544e94921df7717cfd0c97.png)
![[Qt网络编程]之获取基本网络信息](https://img-blog.csdnimg.cn/direct/c5c48cc152744fe98080390f23d54d9e.png)
![[Qt网络编程]之获取基本网络信息](https://img-blog.csdnimg.cn/direct/ad1dd4739e334ff6a989e6bedf55c9ba.png)
![[Qt网络编程]之获取基本网络信息](https://img-blog.csdnimg.cn/direct/d137a71f4e25403ebd91bb9c161a1b7c.png)