qt获得本地IP的方法,qt中域名解析的方法
本文博客链接: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;
- }
http://blog.csdn.net/jdh99/article/details/6679692
qt中提供了可以实现域名解析功能的类QHostInfo,这个类解析域名提供两种机制,一种是阻塞式,一种是非阻塞信号槽机制,下面介绍第二种机制的实现方法。
qt的帮助中给出了这个类的例子:
- QHostInfo::lookupHost("www.kde.org",this, SLOT(lookedUp(QHostInfo)));
- //当解析成功域名后,会调用lookedUp槽函数
- void MyWidget::lookedUp(const QHostInfo &host)
- {
- if (host.error() != QHostInfo::NoError) {
- qDebug() << "Lookup failed:" << host.errorString();
- return;
- }
- foreach (QHostAddress address, host.addresses())
- qDebug() << "Found address:" << address.toString();
- }
仿照这个例子,我做了google域名的解析测试:
- QHostInfo::lookupHost("www.google.com",this,SLOT(slot_get_ip(QHostInfo)));
- void test::slot_get_ip(QHostInfo host_info)
- {
- if (host_info.error() != QHostInfo::NoError)
- {
- qDebug() << "Lookup failed:" << host_info.errorString();
- return;
- }
- for (int i = 0;i < host_info.addresses().size();i++)
- {
- qDebug() << "Found address:" << host_info.addresses()[i].toString() << endl;
- }
- }
在调试窗口可以看到解析结果:
- Found address: "64.233.183.106"
- Found address: "64.233.183.147"
- Found address: "64.233.183.99"
- Found address: "64.233.183.103"
- Found address: "64.233.183.104"
- Found address: "64.233.183.105"
http://blog.csdn.net/jdh99/article/details/6675670
qt获得本地IP的方法,qt中域名解析的方法的更多相关文章
- python获取本地ip地址的方法
#_*_coding:utf8_*_ #以下两种方法可以在ubuntu下或者windows下获得本地的IP地址 import socket # 方法一 localIP = socket.gethost ...
- JNI学习笔记_Java调用C —— Android中使用的方法
一.笔记 1.JNI(Java Native Interface),就是如何使用java去访问C/C++编写的那些库.若想深入了解JNI可以看官方文档jni.pdf.优秀博文:Android JNI知 ...
- 如何重写Java中的equals方法
Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...
- C#编程(六十一)------------LINQ中的扩展方法
原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...
- 常用的兼容IE和火狐FF等浏览器的js方法(js中ie和火狐的一些差别)
介绍了网页上常用的IE/火狐兼容性该页的做法,并给出了代码,相当实用了.为了方便大家阅读代码,以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefo ...
- 49. ArrayList LinkedList中特有的方法
集合的体系:--------------| Collection 单列集合的根接口 ----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复 ------|A ...
- Day07_39_集合中的remove()方法 与 迭代器中的remove()方法
集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...
- 解析Qt中QThread使用方法
本文讲述的是在Qt中QThread使用方法,QThread似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用QThread,随便用goog ...
- Qt中事件处理的方法(三种处理方法,四种覆盖event函数,notify函数,event过滤,事件处理器。然后继续传递给父窗口。可观察QWidget::event的源码,它是虚拟保护函数,可改写)
一.Qt中事件处理的方式 1.事件处理模式一 首先是事件源产生事件,最后是事件处理器对这些事件进行处理.然而也许大家会问, Qt中有这么多类的事件,我们怎么样比较简便的处理每个事件呢?设想,如果是 ...
随机推荐
- experiment : 在私有堆和默认进程堆中, 测试能分配的堆空间总和, 每次能分配的最大堆空间
实验环境: Win7X64Sp1 + vs2008, 物理内存16GB. 实验结论: * 进程堆的最大Size并没有使用完剩余的物理内存 * 每次能分配的最大堆空间接近2M, 不管是私有堆 ...
- MySQL分区表使用方法
原文:MySQL分区表使用方法 1. 确认MySQL服务器是否支持分区表 命令: show plugins; 2. MySQL分区表的特点 在逻辑上为一个表,在物理上存储在多个文件中 HASH分区(H ...
- 【20.19%】【codeforces 629D】Babaei and Birthday Cake
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【87.65%】【codeforces 731A】Night at the Museum
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- CLR托管内存
在物理内存中观察CLR托管内存及GC行为 虽然看了一些书,还网络上的一些博文,不过对CLR托管内存细节依然比较模糊.而且因为工作原因总会有很多质疑,想要亲眼看到内存里二进制数据的变化. 所以借助w ...
- Vue插件资料
UI组件element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 iview ★5801 - 基于 Vuejs 的开源 UI ...
- respondsToSelector的作用
1.respondsToSelector 用来推断某一个方法时候实现(以下的代码意思:假设baseAPIdidStartRequest这种方法实现了,那么就去调用,防止出现异常) if ([self. ...
- C#使用Selenium实现QQ空间数据抓取 说说抓取
上一篇讲的是如何模拟真人操作登录QQ空间,本篇主要讲述一下如何抓取QQ说说数据 继续登录空间后的操作 登陆后我们发现QQ空间的菜单其实是固定的,只需要找到对应元素就可以,继续XPath 可以得到地址 ...
- WPF 4 DataGrid 控件(进阶篇二)
原文:WPF 4 DataGrid 控件(进阶篇二) 上一篇<WPF 4 DataGrid 控件(进阶篇一)>中我们通过DataGridTemplateColumn 类自定义编辑 ...
- 【Linux】使用crontab,让linux定时执行shell脚本
阅读目录 1. cron服务[Ubuntu环境] 2. crontab用法 3. vim编辑crontab文件 4.Cron各项描述 5.例子解释 Linux中,周期执行的任务一般由cron这个守护进 ...