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

目录

前言

获取主机IP地址

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

获取主机 MAC 地址 


前言

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

 获取网络信息的步骤是:

  1. 首先定义 QNetworkInterface 的实例,通过 QNetworkInterface 实例的 allAddresses()方法,得到主机地址 QHostAddress 的列表
  2. 如果需要获得 IP 地址、子网掩码,通过 QNetworkInterface 实例的 addressEntries()方法,获得网络地址入口 QNctworkAddressEntry 的列表。
  3. 如果需要获得网络物理 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平台的一些内容,接下来还有一些网络编程的内容,希望大家可以关注我,我很希望能在这里和大家一起交流学习!!!大家也可以私信我哦!!!共同进步!!!

  • 44
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值