qt獲得本地IP的方法
阿新 • • 發佈:2018-11-15
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
本文部落格連結:http://blog.csdn.net/jdh99,作者:jdh,轉載請註明.
環境:Ubuntu10.04 + Qt4.7.0
Linux獲得本地IP的方法,我嘗試了兩種
1.用
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; }