Qt网络通信——获取本机网络信息

查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能,Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询

1.QHostInfo 类(显示和查找本地的信息)是的主要函数

 类别  函数原型 作用
公共函数 QList address() 返回与hostName()主机关联的IP地址列表
QString hostName() 返回通过IP查找的主机的名称
静态函数 QHostInfo fromName(QSring &name) 返回指定主机名的IP地址
QHostInfo localHostName() 返回本机的主机名
int lookupHost(QString &name,QObject *receiver,char*member) 以异步方式根据主机名查找主机的IP地址,并返回一个表示本次查找的ID,可用于abortHostLookup()

int lookupHost(QString &name,QObject *receiver,char*member)

name可以是主机名,可以是域名或者是一个IP地址。receiver和member指定一个响应函数的接收者和槽函数名称。

2.QNetworkInterface 类(获得应用程序上所在主机的所有网络接口,包括子网掩码和广播地址等)的主要函数

类别  函数原型 作用
公共函数 QList addressEntries() 返回该网络接口(包括子网掩码和广播地址)的IP列表
QString   hardwareAddress() 返回该接口的低级硬件地址,以太网里就是MAC地址
QString  humanReadableName()

返回可以读懂的接口名称,如果名称不太确定,得到的就是name()函数的返回值

bool isValid() 如果接口信息有效就返回true
QString name() 返回网络接口名称
静态函数 QList allAddress() 返回主机上所有IP地址的列表
QList allInterfaces() 返回主机上所有接口的网络列表

QNetworkInterface 中包含的网络信息接口有IP地址,子网掩码和广播地址

分别用:ip()、netmask() 、broadcast()函数返回

NetworkInformation.h
#ifndef NETWORKINFORMATION_H
#define NETWORKINFORMATION_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
class NetworkInformation : public QWidget
{
    Q_OBJECT

public:
    NetworkInformation(QWidget *parent = nullptr);
    ~NetworkInformation();

    void getHostInformation();  //获取主机信息

public slots:
    void slotDetail();

private:

    QLabel *lab_host;
    QLineEdit *lineEdit_hostName;

    QLabel *lab_IpAdress;
    QLineEdit *lineEdit_IpAdress;

    QPushButton *btn_detail;
    QGridLayout *mainLayout;


};
#endif // NETWORKINFORMATION_H

NetworkInformation.cpp

#include "networkinformation.h"

NetworkInformation::NetworkInformation(QWidget *parent)
    : QWidget(parent)
{


    lab_host=new QLabel(QStringLiteral("主机名:"));
    lineEdit_hostName=new QLineEdit;

    lab_IpAdress=new QLabel(QStringLiteral("IP地址:"));
    lineEdit_IpAdress=new QLineEdit;

    btn_detail=new QPushButton(QStringLiteral("详细"));

    mainLayout=new QGridLayout;
    mainLayout->addWidget(lab_host,0,0);
    mainLayout->addWidget(lineEdit_hostName,0,1);
    mainLayout->addWidget(lab_IpAdress,1,0);
    mainLayout->addWidget(lineEdit_IpAdress,1,1);
    mainLayout->addWidget(btn_detail,2,0,1,2);
    mainLayout->addWidget(lab_host,0,0);

    setLayout(mainLayout);

    getHostInformation();
    connect(btn_detail,SIGNAL(clicked()),this,SLOT(slotDetail()));

}

NetworkInformation::~NetworkInformation()
{
}

//获取主机信息
void NetworkInformation::getHostInformation()
{
   QString localHostName=QHostInfo::localHostName();   //获取主机名
   lineEdit_hostName->setText(localHostName);

   QHostInfo hostInfo=QHostInfo::fromName(localHostName);//本机的IP地址

   QList listAdress=hostInfo.addresses();  //IP地址列表
   if(!listAdress.isEmpty())
   {
       lineEdit_IpAdress->setText(listAdress.first().toString());  //如果主机的IP列表不为空,则使用其第一个IP地址
   }

}

//获得与网络接口相关的信息
void NetworkInformation::slotDetail()
{
   QString detail="";
   QList list=QNetworkInterface::allInterfaces(); //主机上所有的接口的网络列表

   for(int i=0;i entryList=interface.addressEntries();  //返回网络接口(包括子网掩码和广播地址)的Ip地址列表
       for(int j=0;j

结果:

Qt网络通信——获取本机网络信息_第1张图片

你可能感兴趣的:(qt,网络,开发语言)