qt獲得本地IP的方法
本文部落格連結: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;
- }
相關文章
- Qt下如何獲得本地網路卡IPQT
- 獲得ip地理資訊的幾種方法【最全】
- 關於java獲取本地ip的幾種方法Java
- 獲得客戶端ip的方法,排除代理伺服器客戶端伺服器
- 獲取本地的IP地址(內網)內網
- Java/JSP獲得客戶端網路卡MAC地址的三種方法解析(附:獲得真實IP)JavaJS客戶端Mac
- 怎樣獲得EJB的本地Home介面引用?
- 使用代理IP輕鬆獲得韓國IP地址
- java Socket 獲取本地主機ipJava
- 獲取本地IP和mac等資訊Mac
- 獲取IP地址方法
- 在SAP中用CALL METHOD求本地IP的方法
- Spring中獲得dataSurce物件的方法Spring物件
- 【C#學習筆記】獲得本機IPC#筆記
- 怎樣無線上網無法獲得IP地址的問題
- C#獲得本機的計算機名及IP地址C#計算機
- 從刷票瞭解如何獲得客戶端IP客戶端
- 在Intranet中獲得客戶端IP地址客戶端
- oracle利用索引關聯獲得資料的方法Oracle索引
- 如何獲得db server端和client端的ip和host_nameServerclient
- 無線網路卡無法獲得IP地址的解決方案(轉)
- Apapche獲取真實IP地址方法
- 動態IP代理-如何讓文章獲得高閱讀量?
- PHP獲取IP地址的方法,防止偽造IP地址注入攻擊PHP
- java中獲得檔案大小,用RandomAccessFile的lengh方法JavarandomMac
- [轉]用Whois獲得電信運營商的IP地址是如何分配的?
- 從EBS中獲得值集對應的SQL的方法SQL
- js根據ip地址獲取省份城市的方法JS
- 獲取爬蟲動態IP的三種方法爬蟲
- 【LanceZhang】ASP.NET獲取IP的6種方法ASP.NET
- Linux下設定靜態IP和獲取動態IP的方法Linux
- 獲得目標SQL語句執行計劃的方法SQL
- 前端Js獲取本網IP和外網IP方法總彙前端JS
- 如何獲得server端和client端ip address和host name!Serverclient
- 獲得類的屬性
- 【原創】Java網路程式設計從入門到精通(8):用getAddress方法獲得IP地址Java程式設計
- Android的CameraX獲得相機支援解析度的方法Android
- Mastercard獲得管理加密貨幣“部分儲備”方法的專利AST加密