狂码一生_优质编程技术资源与您共享

狂码一生_优质编程技术资源与您共享

狂码一生技术博客站主要是以优质编程技术资源共享为核心,以交流学习为目的搭建的在线平台。我们共享一些优质的资源出来,供同行业的同胞交流与学习,让彼此之间在自身的技术上得到提升,本站主要提供程序方面的资源给大家,像PHP,C++,Javascript,html,asp.net,数据库等等方面的资源,本站计划将在后期会不断完善,建设更多类目的资源,希望能得到更多同行的支持!

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

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,点击这里查看源文!
[若此文确切存在侵权,请联系本站管理员进行删除!]

评论