qt获得本地IP的方法

来源:互联网 发布:淘宝网上商城 编辑:程序博客网 时间:2024/06/05 08:24

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

环境:Ubuntu10.04 + Qt4.7.0

Linux获得本地IP的方法,我尝试了两种

1.用QHostInfo类解析

QHostInfo类可以解析域名,理论上也可以解析本地IP,可是经过尝试,我发现解析出来的IP是127.0.0.1是本地回环地址,不符合我的需求。

代码:

[cpp] view plain copy
  1. //获取本地IP  
  2.     QHostInfo info=QHostInfo::fromName(QHostInfo::localHostName());  
  3.     //QHostInfo info=QHostInfo::fromName("www.google.com");  
  4.     //Sys_Res.local_ip = info.addresses().first().toString();  
  5.     //qDebug() << Sys_Res.local_ip;  
  6.   
  7.     if (info.error() != QHostInfo::NoError)  
  8.     {  
  9.          qDebug() << "Lookup failed:" << info.errorString();  
  10.          return;  
  11.     }  
  12.   
  13.     for (int i = 0;i < info.addresses().size();i++)  
  14.     {  
  15.          qDebug() << "Found address:" << info.addresses()[i].toString() << endl;  
  16.     }  

2.用QNetworkInterface解析

用这个类可以获取系统底层的网络参数,经过实践是可行的,我参考的文章:http://qt.csdn.net/articles.aspx?pointid=489&pointid2=7

参考代码截取:

[cpp] view plain copy
  1. 2.通过QNetworkInterface类来获取本机的IP地址和网络接口信息。  
  2. QNetworkInterface类提供了程序所运行时的主机的IP地址和网络接口信息的列表。在每一个网络接口信息中都包含了0个或多个IP地址,而每一个IP地址又包含了和它相关的子网掩码和广播地址,它们三者被封装在一个QNetworkAddressEntry对象中。网络接口信息中也提供了硬件地址信息。我们将widge.cpp构造函数中以前添加的代码删除,然后添加以下代码。  
  3. QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();  
  4.     //获取所有网络接口的列表  
  5.     foreach(QNetworkInterface interface,list)  
  6.     {  //遍历每一个网络接口  
  7.         qDebug() << “Device: “<<interface.name();  
  8.         //设备名  
  9.         qDebug() << “HardwareAddress: “<<interface.hardwareAddress();  
  10.         //硬件地址  
  11.         QList<QNetworkAddressEntry> entryList = interface.addressEntries();  
  12.      //获取IP地址条目列表,每个条目中包含一个IP地址,一个子网掩码和一个广播地址  
  13.         foreach(QNetworkAddressEntry entry,entryList)  
  14.         {//遍历每一个IP地址条目  
  15.             qDebug()<<”IP Address: “<<entry.ip().toString();  
  16.             //IP地址  
  17.             qDebug()<<”Netmask: “<<entry.netmask().toString();  
  18.             //子网掩码  
  19.             qDebug()<<”Broadcast: “<<entry.broadcast().toString();  
  20.             //广播地址  
  21.         }  
  22. }  
[cpp] view plain copy
  1. 其实,如果我们只想利用QNetworkInterface类来获取IP地址,那么就没必要像上面那样复杂,这个类提供了一个便捷的函数allAddresses()来获取IP地址,例如:  
  2. QString address = QNetworkInterface::allAddresses().first().toString();  
  3. 3.总结。  
  4. 在这一节中我们学习了如何来查找本机网络设备的相关信息。其实,以后最常用的还是其中获取IP地址的方法。我们以后可以利用一个函数来获取IP地址:  
  5. QString Widget::getIP()  //获取ip地址  
  6. {  
  7.     QList<QHostAddress> list = QNetworkInterface::allAddresses();  
  8.     foreach (QHostAddress address, list)  
  9.     {  
  10.        if(address.protocol() == QAbstractSocket::IPv4Protocol)  
  11. //我们使用IPv4地址  
  12.             return address.toString();  
  13.     }  
  14.        return 0;  
  15. }  

把这段代码嵌入到我的程序中:

[cpp] view plain copy
  1. QList<QHostAddress> list = QNetworkInterface::allAddresses();  
  2.     foreach (QHostAddress address, list)  
  3.     {  
  4.         if(address.protocol() == QAbstractSocket::IPv4Protocol)  
  5.         {  
  6.             //IPv4地址  
  7.             if (address.toString().contains("127.0."))  
  8.             {  
  9.                 continue;  
  10.             }  
  11.             Sys_Res.local_ip = address.toString();  
  12.         }  
  13.     }  
  14.     if (Sys_Res.local_ip == "127.0.0.1")  
  15.     {  
  16.         qDebug() << "get local ip fail";  
  17.         return;  
  18.     }  
  19.     else  
  20.     {  
  21.         qDebug() << Sys_Res.local_ip;  
  22.     }  
0 0
原创粉丝点击