1. 程式人生 > >qt獲得本地IP的方法

qt獲得本地IP的方法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

本文部落格連結:http://blog.csdn.net/jdh99,作者:jdh,轉載請註明.

環境:Ubuntu10.04 + Qt4.7.0

Linux獲得本地IP的方法,我嘗試了兩種

1.用

QHostInfo類解析

QHostInfo類可以解析域名,理論上也可以解析本地IP,可是經過嘗試,我發現解析出來的IP是127.0.0.1是本地迴環地址,不符合我的需求。

程式碼:

//獲取本地IP    QHostInfo info=QHostInfo::fromName(QHostInfo::localHostName());    //QHostInfo info=QHostInfo::fromName("www.google.com");    //Sys_Res.local_ip = info.addresses().first().toString();
    //qDebug() << Sys_Res.local_ip;    if (info.error() != QHostInfo::NoError)    {         qDebug() << "Lookup failed:" << info.errorString();         return;    }    for
(int i = 0;i < info.addresses().size();i++)    {         qDebug() << "Found address:" << info.addresses()[i].toString() << endl;    }

2.用QNetworkInterface解析

用這個類可以獲取系統底層的網路引數,經過實踐是可行的,我參考的文章:http://qt.csdn.net/articles.aspx?pointid=489&pointid2=7

參考程式碼擷取:

2.通過QNetworkInterface類來獲取本機的IP地址和網路介面資訊。QNetworkInterface類提供了程式所執行時的主機的IP地址和網路介面資訊的列表。在每一個網路介面資訊中都包含了0個或多個IP地址,而每一個IP地址又包含了和它相關的子網掩碼和廣播地址,它們三者被封裝在一個QNetworkAddressEntry物件中。網路介面資訊中也提供了硬體地址資訊。我們將widge.cpp建構函式中以前新增的程式碼刪除,然後新增以下程式碼。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();            //IP地址            qDebug()<<”Netmask: “<<entry.netmask().toString();            //子網掩碼            qDebug()<<”Broadcast: “<<entry.broadcast().toString();            //廣播地址        }}
其實,如果我們只想利用QNetworkInterface類來獲取IP地址,那麼就沒必要像上面那樣複雜,這個類提供了一個便捷的函式allAddresses()來獲取IP地址,例如:QString address = QNetworkInterface::allAddresses().first().toString();3.總結。在這一節中我們學習瞭如何來查詢本機網路裝置的相關資訊。其實,以後最常用的還是其中獲取IP地址的方法。我們以後可以利用一個函式來獲取IP地址:QString Widget::getIP()  //獲取ip地址{    QList<QHostAddress> list = QNetworkInterface::allAddresses();    foreach (QHostAddress address, list)    {       if(address.protocol() == QAbstractSocket::IPv4Protocol)//我們使用IPv4地址            return address.toString();    }       return 0;}

把這段程式碼嵌入到我的程式中:

QList<QHostAddress> list = QNetworkInterface::allAddresses();    foreach (QHostAddress address, list)    {        if(address.protocol() == QAbstractSocket::IPv4Protocol)        {            //IPv4地址            if (address.toString().contains("127.0."))            {                continue;            }            Sys_Res.local_ip = address.toString();        }    }    if (Sys_Res.local_ip == "127.0.0.1")    {        qDebug() << "get local ip fail";        return;    }    else    {        qDebug() << Sys_Res.local_ip;    }



           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述