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

环境:Ubuntu10.04 + Qt4.7.0

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

1.用QHostInfo类解析

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

代码:

  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. if (info.error() != QHostInfo::NoError)
  7. {
  8. qDebug() << "Lookup failed:" << info.errorString();
  9. return;
  10. }
  11. for (int i = 0;i < info.addresses().size();i++)
  12. {
  13. qDebug() << "Found address:" << info.addresses()[i].toString() << endl;
  14. }

2.用QNetworkInterface解析

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

参考代码截取:

  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. }
  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. }

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

    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. }

http://blog.csdn.net/jdh99/article/details/6679692

qt中提供了可以实现域名解析功能的类QHostInfo,这个类解析域名提供两种机制,一种是阻塞式,一种是非阻塞信号槽机制,下面介绍第二种机制的实现方法。

qt的帮助中给出了这个类的例子:

  1. QHostInfo::lookupHost("www.kde.org",this, SLOT(lookedUp(QHostInfo)));
  2. //当解析成功域名后,会调用lookedUp槽函数
  3. void MyWidget::lookedUp(const QHostInfo &host)
  4. {
  5. if (host.error() != QHostInfo::NoError) {
  6. qDebug() << "Lookup failed:" << host.errorString();
  7. return;
  8. }
  9. foreach (QHostAddress address, host.addresses())
  10. qDebug() << "Found address:" << address.toString();
  11. }

仿照这个例子,我做了google域名的解析测试

  1. QHostInfo::lookupHost("www.google.com",this,SLOT(slot_get_ip(QHostInfo)));
  2. void test::slot_get_ip(QHostInfo host_info)
  3. {
  4. if (host_info.error() != QHostInfo::NoError)
  5. {
  6. qDebug() << "Lookup failed:" << host_info.errorString();
  7. return;
  8. }
  9. for (int i = 0;i < host_info.addresses().size();i++)
  10. {
  11. qDebug() << "Found address:" << host_info.addresses()[i].toString() << endl;
  12. }
  13. }

在调试窗口可以看到解析结果:

    1. Found address: "64.233.183.106"
    2. Found address: "64.233.183.147"
    3. Found address: "64.233.183.99"
    4. Found address: "64.233.183.103"
    5. Found address: "64.233.183.104"
    6. Found address: "64.233.183.105"

http://blog.csdn.net/jdh99/article/details/6675670

qt获得本地IP的方法,qt中域名解析的方法的更多相关文章

  1. python获取本地ip地址的方法

    #_*_coding:utf8_*_ #以下两种方法可以在ubuntu下或者windows下获得本地的IP地址 import socket # 方法一 localIP = socket.gethost ...

  2. JNI学习笔记_Java调用C —— Android中使用的方法

    一.笔记 1.JNI(Java Native Interface),就是如何使用java去访问C/C++编写的那些库.若想深入了解JNI可以看官方文档jni.pdf.优秀博文:Android JNI知 ...

  3. 如何重写Java中的equals方法

    Java中,只有8种基本类型不是对象,例如:4种整形类型(byte, short, int,long),2种浮点类型(flout, double),boolean, char不是对象,其他的所有类型, ...

  4. C#编程(六十一)------------LINQ中的扩展方法

    原文链接: http://blog.csdn.net/shanyongxu/article/details/47208401 LINQ中的扩展方法 LINQ中where扩展方法,要想使用,必须导入us ...

  5. 常用的兼容IE和火狐FF等浏览器的js方法(js中ie和火狐的一些差别)

    介绍了网页上常用的IE/火狐兼容性该页的做法,并给出了代码,相当实用了.为了方便大家阅读代码,以下以 IE 代替 Internet Explorer,以 MF/FF 代替 Mozzila Firefo ...

  6. 49. ArrayList LinkedList中特有的方法

    集合的体系:--------------| Collection  单列集合的根接口 ----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复 ------|A ...

  7. Day07_39_集合中的remove()方法 与 迭代器中的remove()方法

    集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...

  8. 解析Qt中QThread使用方法

    本文讲述的是在Qt中QThread使用方法,QThread似乎是很难的一个东西,特别是信号和槽,有非常多的人(尽管使用者本人往往不知道)在用不恰当(甚至错误)的方式在使用QThread,随便用goog ...

  9. Qt中事件处理的方法(三种处理方法,四种覆盖event函数,notify函数,event过滤,事件处理器。然后继续传递给父窗口。可观察QWidget::event的源码,它是虚拟保护函数,可改写)

    一.Qt中事件处理的方式   1.事件处理模式一 首先是事件源产生事件,最后是事件处理器对这些事件进行处理.然而也许大家会问, Qt中有这么多类的事件,我们怎么样比较简便的处理每个事件呢?设想,如果是 ...

随机推荐

  1. java中unicode utf-8以及汉字之间的转换工具类

    1.       汉字字符串与unicode之间的转换 1.1          stringToUnicode /** * 获取字符串的unicode编码 * 汉字"木"的Uni ...

  2. Qtcreator中常用快捷键总结(有必要牢记,提高编程效率)

    F1        查看帮助F2        跳转到函数定义(和Ctrl+鼠标左键一样的效果)Shift+F2    声明和定义之间切换F4        头文件和源文件之间切换Ctrl+1     ...

  3. 实现在 .net 中使用 HttpClient 下载文件时显示进度

    在 .net framework 中,要实现下载文件并显示进度的话,最简单的做法是使用 WebClient 类.订阅 DownloadProgressChanged 事件就行了. 但是很可惜,WebC ...

  4. Shell Step by Step (3) —— Stdin &amp; if

    4.输入输出 #! /bin/bash # Read users input and then get his name read -p "Please input your first n ...

  5. QWidget之Alien与Native小记(果然是DirectUI的方式,QWidget居然提供了nativeParentWidget函数,而且可以动态设置native父窗口)good

    在QWidget 之paint部分杂记提到了从Qt4.4开始,Alien Widget被引入.那么...这是什么东西呢,我们在使用中又可能会感受到什么东西? 用例子来说话似乎比用源码来说话来得容易,所 ...

  6. 概率图模型(PGM) —— 贝叶斯网络(Bayesian Network)

    概率图模型是图论与概率方法的结合产物.Probabilistic graphical models are a joint probability distribution defined over ...

  7. UITextField设置leftView的Insets

    Insets就是css中的padding 我们给UITextField设置了leftView,目的是在文本输入框左側显示一个图标.可是在ios7里,这个图标会紧紧地挨着TextField的左边框,非常 ...

  8. uva 11892 - ENimEN(推理)

    题目链接:uva 11892 - ENimEN 题目大意:给定n堆石子的个数,两人轮流选择石子堆取石子,直到不能取为失败,附加条件,假设前一次操作,即队手的操作,没有将选中石子堆中的石子取完,那么当前 ...

  9. 《TIME》时代周刊阅读

    0. 常识 tribunal 是解决民事诉讼和民事纠纷的地方,以调解为主,使用主席制.主席是受过司法培训,具有一定法律基础的,但不能像法官一样直接给你判决,也不能强制执行. Court 一般针对严重案 ...

  10. python_简单的DB统计

    import numpy as npimport pylab as pldates=['20170314','20170315','20170316','20170317','20170318','2 ...