QT网络编程---获取本机IP

  这一节中,我们会涉及到网络模块(QtNetwork Module)中的QHostInfo ,QHostAddress ,QNetworkInterface和QNetworkAddressEntry等几个类。

#include <QApplication>
#include <QDebug>
#include <QtNetwork>


int main(int argc,char* argv[ ])
{
    QApplication app(argc,argv);

    //使用QHostInfo获取主机名与IP地址

    //获取主机名
    QString localHostName = QHostInfo::localHostName();
    qDebug() << "localHostName" << localHostName;

    //获取本机的IP地址(可能有多条)
    QHostInfo info = QHostInfo::fromName(localHostName);
    qDebug()<<"IP Address:"<< info.addresses();

    //只输出IPv4地址(可能有多条)
    foreach(QHostAddress address,info.addresses())
    {
        if(address.protocol() == QAbstractSocket::IPv4Protocol)

            qDebug() <<"My localhost IPv4 address: "<< address.toString();
    }


    qDebug()<<"-------------------------------------------------------------------";
    //通过QNetworkInterface类来获取本机的IP地址和网络接口信息
    QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();
    //获取所有网络接口的列表
    foreach(QNetworkInterface interface,list)
    {
        //遍历每一个网络接口
        qDebug() << "Device: "<<interface.name();

        //设备名
        qDebug() << "HardwareAddress:"<<interface.hardwareAddress();

        //硬件地址
        QList<QNetworkAddressEntry> entryList = interface.addressEntries();

        //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址
        foreach(QNetworkAddressEntry entry,entryList)
        {
            //遍历每一个IP地址条目
            qDebug()<<"IP Address: "<<entry.ip().toString();

            //子网掩码
            qDebug()<<"Netmask: "<<entry.netmask().toString();

            //广播地址
            qDebug()<<"Broadcast: "<<entry.broadcast().toString();

            qDebug()<<endl;
        }
    }


    //如果我们只想利用QNetworkInterface类来获取IP地址,
    //这个类提供了一个便捷的函数allAddresses()来获取IP地址
    QString ad =QNetworkInterface::allAddresses().first().toString();
    qDebug()<<"QNetworkInterface::allAddresses().first().toString()"<<ad;
    return app.exec();
}

  其实,以后最常用的还是其中获取IP地址的方法。我们以后可以利用一个函数来获取IP地址:

QString getIP() //获取ip地址
{
    QList<QHostAddress> list =QNetworkInterface::allAddresses();
    foreach (QHostAddress address, list)
    {
       if(address.protocol() ==QAbstractSocket::IPv4Protocol)
           //我们使用IPv4地址
           returnaddress.toString();       
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_25800311/article/details/81068351