最近在学习qt网络编程,基于tcp和udp协议。

看了一些别人的程序和qt4自带的例子,困扰我最大的问题就是获取ip的类,总结起来还挺多的。

主要介绍常用的QtNetwork Module中的QHostInfo,QHostAddress,QNetworkInterface和QNetAddressEntry等类。

1。QHostInfo类获取主机名和ip地址

(1)获取主机名: QHostInfo::localHostName()

QString localHostName=QHostInfo::localHostName();

(2)获取ip地址: QHostInfo info=QHostInfo::fromName(localHostName);//根据上边获得的主机名来获取本机的信息

info.addresses();//QHostInfo的address函数获取本机ip地址

如果存在多条ip地址ipv4和ipv6:

foreach(QHostAddressaddress,info.addresses())

{

if(address.protocol()==QAbstractSocket::IPv4P)//只取ipv4协议的地址

qDebug()<<address.toString();

}

如果是ipv6地址,可以使用QAbstractSocket::ipv6Protocol来实现。

QHostAddress类是管理ip地址的类,所有的ip都归这个类管理。

(3)以主机名获取ip

QHostInfo类可以获取任意主机名的ip,比如获取网站的ip地址,可以用lookupHost()函数来获取,他是基于信号和槽的,一旦发现ip地址就会触发槽函数。

首先定义一个槽函数:

void lookedup(const QHostInfo &host)

{

qDebug()<<host.addresses() .first().toString();//输出了第一个 ip地址

}

QHostInfo::lookupHost("www.baidu.com" ,

this,SLOT(lookedUp(QHostInfo)));

通过查询百度网址的ip地址,如果查找到,就会执行lookedUp()函数。

(4)通过ip地址获取主机名

调用lookupHost()函数,通过输入ip地址反向查找主机名。将上面的函数换掉。

2。QNetworkInterface类获取程序运行本机的ip地址和网络接口信息

QNetworkInterface类提供了程序所运行的主机ip地址和网络接口信息的列表.  在一个网络接口信息中,包含一个或多个ip地址,每一个ip地址又包含和它相关的子网掩码和广播地址.他们三者别封装在一个对象中QNetworkAddressEntry,网络接口信息也包含了硬件地址信息.

QList<QNetworkInterface>list=QNetworkInterface;:allInterfaces();//获取所有网络接口信息

foreach(QNetworkInterfaceinterface,list)

{

//便利每一个接口信息

qDebug<<"Device:"<<interface.name();//设备名称

qDebug<<"HardwareAddress:"<<interface.hardwareAdderss();//获取硬件地址

QList<QNetworkAddressEntry>entryList=interface.addressEntries();//获取ip地址和子网掩码和广播地址

foreach(QNetworkAddressEntryentry,entryList)

{//便利ip条目列表

qDebug<<"IP address:"<<entry.ip().toString();//获取ip

qDebug<<"Netmask:"<<entry.netmask().toString();//获取子网掩码

qDebug<<"Broadcast:"<<entry.broadcast().toString();//获取广播地址

}

}

如果只想获取ip地址可以调用QNetworkInterface类的allAddresses()来获取ip地址,如:

QStringaddress=QNetworkInterface::allAddresses().first().toString();

获取所有ip地址:

QList<QHostAddress>list=QNetworkInteface::allAddresses();

{

foreach(QHostAddressaddress,list)

{

if(address.protocol()==QAbstractSocket::ipv4protocol)

qDebug<<address.toString();

}

}

http://blog.csdn.net/cateatapple/article/details/40824871

qt获取网络ip地址的类的更多相关文章

  1. java获取网络ip地址

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...

  2. java获取客户端ip地址工具类

    public class IpUtils { private static final String[] HEADERS = { "X-Forwarded-For", " ...

  3. 获取网络IP地址

    IPHostEntry iphost = Dns.GetHostEntry(txtDNS.Text);//解析并返回IPHostEntry对象 foreach (IPAddress ip in iph ...

  4. JSP获取网络IP地址

    import javax.servlet.http.HttpServletRequest; public class RemoteAddress { public static String getR ...

  5. js获取本机的网络IP地址

    JavaScript是一门脚本语言,是不能操作文件,读取本地信息的,所以想要获取IP,还需要借助后端技术.方法如下: //获取本机的网络ip地址 function jsonpCallback(res) ...

  6. netcore 获取本地网络IP地址

    .net framework 下面可以用下面的代码获取到本地网络ip地址.netcore下面这个代码也依然可以用 System.Net.Dns.GetHostName() System.Net.Dns ...

  7. java获取真实的IP地址工具类

    在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...

  8. JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)

    1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...

  9. Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip

    获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数), 直接上代码: #include <stdio.h> #in ...

随机推荐

  1. C# 反射调用私有事件

    原文:C# 反射调用私有事件 在 C# 反射调用私有事件经常会不知道如何写,本文告诉大家如何调用 假设有 A 类的代码定义了一个私有的事件 class A { private event EventH ...

  2. 使用HAXM为QEMU for Windows加速

    QEMU是一款支持多种CPU的虚拟化软件,本身基于软件虚拟化,效率不高,在linux下可以基于KVM加速,据说可以获得接近物理机的性能.网上有很多关于QEMU+KVM的使用说明,但是KVM仅用于lin ...

  3. WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)

    原文 WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object) 众所周知的,WPF 中多数对象都继承自 Dispatch ...

  4. override 与overload 的差别

    方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现.   重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个 ...

  5. 《北京IT报道》你可以成为下一个《万万没有想到》?

    10一个月29当天上午,一位名为<北京IT报道>在视频短剧IT朋友谁快速刷新的互联网商业圈.这种制作粗糙.演员表情僵硬.安置赤裸网络剧,但对布局和内容因IT互联网从业者的生活,深受广大用户 ...

  6. JS数组操作:去重,交集,并集,差集

    原文:JS数组操作:去重,交集,并集,差集 1. 数组去重 方法一: function unique(arr) { //定义常量 res,值为一个Map对象实例 const res = new Map ...

  7. ehcache hibernate4整合问题

    当在原有hibernate使用ehcache缓存的项目中加入ehcache时,报如下错误时 Caused by: org.hibernate.service.spi.ServiceException: ...

  8. (转)总结:JavaScript异步、事件循环与消息队列、微任务与宏任务

    前言 Philip Roberts 在演讲 great talk at JSConf on the event loop 中说:要是用一句话来形容 JavaScript,我可能会这样: “JavaSc ...

  9. [WPF] PerformClick ?

    原文:[WPF] PerformClick ? [WPF] PerformClick ?  周银辉 WPF没有提供这个方法,还真是让人觉得有些讨厌啊.而关于这个嘛,Google中搜一下,一大堆,但一般 ...

  10. 存储过程和输出分辨率表菜单JSON格式字符串

    表的结构,如以下: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo] ...