QT获取本地的主机网络信息

  • 2019 年 12 月 11 日
  • 筆記

QHostInfo 类:查询与特定主机名相关联的主机的IP地址,或者与一个IP地址相关联的主机名。

QHostAddress 类:提供一个IP地址,可提供独立于平台和协议的方式来保存 IPv4和IPv6 地址。

QNetworkInterface 类:负责提供主机IP地址和网络接口的列表,表示了当前程序正在运行时与主机绑定的一个网络接口。

QNetworkAddressEntry 类:存储了一个网络接口所支持的一个IP地址,同时还有与之相关的子网掩码和广播地址。

#include <QCoreApplication>    #include <QHostInfo>  #include <QNetworkInterface>  #include <QString>    void getHostInformation();    int main(int argc, char *argv[])  {      QCoreApplication a(argc, argv);        getHostInformation();        return a.exec();  }    void getHostInformation()  {        /***********************************************************/      //QHostInfo 提供一系列有关网络信息的静态函数,可获取主机名、IP地址      QString localHostName = QHostInfo::localHostName();         // 获取本机主机名      qDebug() << "主机名: " << localHostName;      qDebug() << endl;        /***********************************************************/      //根据主机名获取相关主机信息,包括IP地址。      QHostInfo hostInfo = QHostInfo::fromName(localHostName);      QList<QHostAddress> addrList = hostInfo.addresses();        // 获取本主机上的IP地址列表      qDebug() << "本主机上的IP地址列表,总计: " << addrList.count() ;        /***********************************************************/      foreach (QHostAddress var, addrList) {          qDebug() << var.toString(); //本机IP地址列表      }      qDebug() << endl;        /***********************************************************/      if(!addrList.isEmpty()) //获得的主机IP地址列表可能为空。      {          // 在不为空情况下使用第一个IP地址,可能IPv6,也可能IPv4          qDebug() << "first ip addr:" << addrList.first().toString();      }      qDebug() << endl;        /***********************************************************/      QString ipAddress;      //QList<QHostAddress> addrList = QNetworkInterface::allAddresses(); //仅仅获取IP地址列表      for (int i = 0; i < addrList.size(); ++i) {          if (addrList.at(i) != QHostAddress::LocalHost &&              addrList.at(i).toIPv4Address()) { //是IPv4地址且非 QHostAddress::LocalHost              ipAddress = addrList.at(i).toString();              qDebug() << "first ipv4 addr:" << ipAddress;// 在不为空情况下使用第一个IPv4地址              break;          }      }      qDebug() << endl;        /***********************************************************/      // 获取本机的网络接口列表      QList<QNetworkInterface> ifaceList = QNetworkInterface::allInterfaces();      for (int i = 0; i < ifaceList.count(); i++){          QNetworkInterface var = ifaceList.at(i);          qDebug() << QString("########## 设备%1 ############").arg(i);          qDebug() << QString("接口名称:") << var.humanReadableName();          qDebug() << QString("设备名称:") << var.name();          qDebug() << QString("硬件地址:") << var.hardwareAddress();            /***********************************************************/          // 读取一个IP地址的关联信息列表          QList<QNetworkAddressEntry> entryList = var.addressEntries();          //qDebug() << "IP地址的关联信息列表: ";          //foreach(QNetworkAddressEntry entry, entryList){              //qDebug() << "IP: " << entry.ip().toString();              //qDebug() << "子网掩码:" << entry.netmask().toString();              //qDebug() << "广播地址:" << entry.broadcast().toString();          //}            /***********************************************************/          // 读取一个IPv4地址的关联信息列表          //qDebug() << "IPv4地址的关联信息列表: ";          foreach(QNetworkAddressEntry ipv4entry, entryList){              if (ipv4entry.ip().toIPv4Address())              {                  qDebug() << "IP: " << ipv4entry.ip().toString();                  qDebug() << "子网掩码:" << ipv4entry.netmask().toString();                  qDebug() << "广播地址:" << ipv4entry.broadcast().toString();              }            }      }        /***********************************************************/  }

版权声明:源文来自CSDN,点击这里查看源文!