zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    OC中的block
    tips: NSCopying和NSMutableCopying
    tips: @property 、@synthesize和@dynamic
    静态库SDK引发的符号冲突
    复杂业务app中跨业务页面调用方案
    AOP
    【HTML 初学】3、HTML标题
    【HTML 初学】2、HTML属性
    【HTML 初学】1、HTML元素
    【Java编程思想】二、一切都是对象
  • 原文地址:https://www.cnblogs.com/findumars/p/5755045.html
Copyright © 2011-2022 走看看