qt获取网络ip地址的类
最近在学习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地址的类的更多相关文章
- java获取网络ip地址
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- java获取客户端ip地址工具类
public class IpUtils { private static final String[] HEADERS = { "X-Forwarded-For", " ...
- 获取网络IP地址
IPHostEntry iphost = Dns.GetHostEntry(txtDNS.Text);//解析并返回IPHostEntry对象 foreach (IPAddress ip in iph ...
- JSP获取网络IP地址
import javax.servlet.http.HttpServletRequest; public class RemoteAddress { public static String getR ...
- js获取本机的网络IP地址
JavaScript是一门脚本语言,是不能操作文件,读取本地信息的,所以想要获取IP,还需要借助后端技术.方法如下: //获取本机的网络ip地址 function jsonpCallback(res) ...
- netcore 获取本地网络IP地址
.net framework 下面可以用下面的代码获取到本地网络ip地址.netcore下面这个代码也依然可以用 System.Net.Dns.GetHostName() System.Net.Dns ...
- java获取真实的IP地址工具类
在实际项目中,有调用微信支付完成支付功能,在微信支付的请求参数中需要传递一个本机的ip地址,java代码运行环境目前为windows10以及centos7. 以下为获取ip地址工具类: package ...
- JAVA获取客户端请求的当前网络ip地址(附:Nginx反向代理后获取客户端请求的真实IP)
1. JAVA获取客户端请求的当前网络ip地址: /** * 获取客户端请求的当前网络ip * @param request * @return */ public static String get ...
- Linux C 网络编程 - 获取本地 ip 地址,mac,通过域名获取对应的 ip
获取本地 ip 地址,mac,通过域名获取对应的 ip, 是网络编程可能遇到的比较常见的操作了,所以总结如下(封装了3个函数), 直接上代码: #include <stdio.h> #in ...
随机推荐
- C# 静态构造函数,静态变量执行顺序(升华版)
上篇 是基本语法基础下的执行顺序,包括继承这个维度下的执行顺序,我们可以依照的规律顺下来,下面我们看下一些摸不到头脑的情况 我们实验 一个 类中的方法 去调用另一个非继承类的情况, 我们主要看下 ...
- Hibernate——(6)延迟加载机制
一.延迟加载机制的基本原理 当访问实体对象时,并不是立即到数据库中查找.而是在真正要使用实体对象的时候,才去数据库查询数据. 具备这样功能的方法 session.load(...) query.ite ...
- WPF 拼音输入法
原文:WPF 拼音输入法 本文来告诉大家如何使用 WPF 来写一个输入法,使用的方式是钩子. 目录 键盘 解析键盘 获得按键 输入流向 算法 实际上本文是在使用一个好用的软件 希沃白板 的时候发现在里 ...
- GammaRay is a tool to poke around in a Qt-application(确实很多功能)
GammaRay is a tool to poke around in a Qt-application and also to manipulate the application to some ...
- STL序列容器之vector
一,vector容器简介 1.vector容器的原理 vector是将元素置于一个动态数组中加以管理的容器. 2.vector容器的特点 vector容器可以随机存取元素,支持索引存取(即用数组下标的 ...
- 动态加载Layout
因为现在手头上做的需要显示很多不同布局,想着拆分开来不要全部都写到main.xml里,于是就想到动态加载Layout 目前试了下, LinearLayout page = (LinearLayout) ...
- 关于iis里面 .net framework 版本的切换
然而,即便这样还是不够的 在iis上浏览网站会报以下错误: 这是什么原因呢?这是因为应用程序池中没有使用asp.net v4.0 网站程序是用v4.0写的,所以我们要用4.0的程序池版本,当前应用程序 ...
- 自学 Python
如何系统地自学 Python? 最近开始系统的学习Python,以及整理的一些资料.github记录着个人自学 Python 的过程,持续更新.欢迎大家一起来完善这个自学Python学习的项目,给 ...
- WPF绘制自定义窗口
原文:WPF绘制自定义窗口 WPF是制作界面的一大利器,下面就用WPF模拟一下360的软件管理界面,360软件管理界面如下: 界面不难,主要有如下几个要素: 窗体的圆角 自定义标题栏及按钮 自定义状态 ...
- ATS项目更新(1) CC视图与备份路径同步
1: subst t: /d 2: subst t: D:\PublicViews\Automation_Framework\SQA_ATE_DEV 3: 4: rem ** update folde ...