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是本地回环地址,不符合我的需求。
代码:
- //获取本地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;
- }
0 0
- qt获得本地IP的方法
- qt获得本地IP的方法
- 获得本地IP的三种方法
- Qt下如何获得本地网卡IP
- 获得本地IP,发起请求的IP。
- 获得ip的方法
- 获得本地的ip地址和用户名
- 获得本地计算机的IP地址
- 获得本地主机IP
- 获得本地IP地址
- linux获得本地IP
- javascript获得本地IP
- 获得本地IP
- 获得本地IP地址
- 获得IP地址的方法
- 获得本地计算机名称&获得本地IP
- QT获取本地ip
- qt获取本地ip
- 算法、数据结构、排序
- ccah-500 第27题 where does the Mapper place the intermediate data of each Map Task
- C++之多线程(C++11 thread.h文件实现多线程)
- 怎样设定windows服务的启动顺序
- Java IO 笔记
- qt获得本地IP的方法
- OpenStack with Ceph as volume
- 彻底理解ThreadLocal
- tips 设
- 解决Pyh中编写html出现乱码问题
- javascript之邮箱验证
- RecyclerView点击事件与长按事件,并添加点击效果
- ROW_NUMBER() OVER函数的基本用法
- 白盒测试与黑盒测试