最近在学习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. LR杂记 - Linux的系统监控工具vmstat详细说明

    一.前言 非常显然从名字中我们就能够知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,可是如何通过vmstat来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回想一下 ...

  2. Linux命令list

    文件和目录 cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回 ...

  3. Leetcode 318 Maximum Product of Word Lengths 字符串处理+位运算

    先介绍下本题的题意: 在一个字符串组成的数组words中,找出max{Length(words[i]) * Length(words[j]) },其中words[i]和words[j]中没有相同的字母 ...

  4. 使用batch批处理做目录及流程选择

    @echo off rem -- http://phpnow.org rem -- YinzCN_at_Gmail.com setlocal enableextensions if exist Pn\ ...

  5. 极简代码(七)—— SNR

    10⋅log10∑x=1Nx∑y=1Nyf2(x,y)∑x=1Nx∑y=1Ny(f(x,y)−f^(x,y))2 这里不妨先用 matlab 所支持的函数对象(函数式编程)定义这样一个函数变量,可作为 ...

  6. WPF中StringFormat的用法

    原文:WPF中StringFormat的用法 WPF中StringFormat的用法可以参照C#中string.Format的用法 1. C#中用法: 格式化货币(跟系统的环境有关,中文系统默认格式化 ...

  7. 二叉树C语言

    几乎报价http://blog.csdn.net/hopeyouknow/article/details/6740616.为了这细微的地方进行了修改.他能够执行. bitree.h typedef i ...

  8. CentOS 7.3最小系统安装KVM

    一.准备工作 安装wget和vim yum install -y wget vim 修改yum源为阿里源 wget -O /etc/yum.repos.d/CentOS-Base.repo http: ...

  9. Telnet协议详解(远程登陆协议)

    1. 概述 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议.Telnet协议的目的是提供一个相对通用的,双向的,面向八位字节的通信方法,允许界面终端设备和面向终 ...

  10. jquery 访问cookie

    <!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...