在网络编程中经常需要获取本地或远程主机的网络信息,如IP地址、子网掩码、广播地址等,Qt network模块中提供了一些方便的类,如QHostInfo、QNetworkInterface等。

本文将从三种情况介绍Qt网络编程中如何获取主机网络信息。

1.获取本机主机名和IP地址(利用QHostInfo类)

QHostInfo可以调用QHostInfo::localHostName()来获取本机主机名,并根据主机名来获取IP地址等信息,其中,所有的ip地址存放在QHostInfo::addresses()中。另外,根据address.protocol()可以筛选IPv4和IPv6地址。

示例:

    QString localHostName=QHostInfo::localHostName();qDebug()<<"Local host name:"<<localHostName;QHostInfo info=QHostInfo::fromName(localHostName);//根据上边获得的主机名来获取本机的信息foreach(QHostAddress address,info.addresses())//info.addresses()---QHostInfo的address函数获取本机ip地址{if(address.protocol()==QAbstractSocket::IPv4Protocol)//只取ipv4协议的地址qDebug()<<"IPV4 addresses:"<<address.toString();if(address.protocol()==QAbstractSocket::IPv6Protocol)//只取ipv6协议的地址qDebug()<<"IPV6 addresses:"<<address.toString();}

2.通过域名查找对应IP地址(利用QHostInfo类)

QHostInfo提供了一个强有力的查找成员lookupHost(),该函数基于信号与槽机制。

因此我们可以先定义一个继承自QObject的专用查找类,然后定义槽函数处理查找结果。

示例:

查找类LookupIp定义如下:

class LookupIp : public QObject
{Q_OBJECT
public:explicit LookupIp(QObject *parent=0);void startLookup(const QString &str);QString getHostName(void);void setHostName(const QString &name);signals:public slots:void lookedup(const QHostInfo &host);private:QString hostName;
};

成员函数实现:

LookupIp::LookupIp(QObject *parent)
{qDebug()<<"start lookup IP...";
}void LookupIp::startLookup(const QString &hostName)
{QHostInfo::lookupHost(hostName,this,SLOT(lookedup(QHostInfo)));
}void LookupIp::setHostName(const QString &name)
{hostName=name;
}QString LookupIp::getHostName()
{return hostName;
}void LookupIp::lookedup(const QHostInfo &host)
{qDebug()<<"IP address of"<<hostName<<"is:";foreach(QHostAddress address,host.addresses())//info.addresses()---QHostInfo的address函数获取本机ip地址{if(address.protocol()==QAbstractSocket::IPv4Protocol)//只取ipv4协议的地址qDebug()<<"IPV4 addresses:"<<address.toString();if(address.protocol()==QAbstractSocket::IPv6Protocol)//只取ipv6协议的地址qDebug()<<"IPV6 addresses:"<<address.toString();}
}

3.获取本机完整的网络接口信息(利用QNetworkInterface类)

若想获取比较完整的网络信息,包括网卡等硬件信息,可以利用QNetworkInterface类,该类存储所有网络设备的设备名、Mac地址、IP地址、子网掩码、广播地址等。

示例:

 QList<QNetworkInterface> list=QNetworkInterface::allInterfaces();//获取所有网络接口信息foreach(QNetworkInterface interface,list){//遍历每一个接口信息qDebug()<<"Device:"<<interface.name();//设备名称qDebug()<<"HardwareAddress:"<<interface.hardwareAddress();//获取硬件地址QList<QNetworkAddressEntry>entryList=interface.addressEntries();//获取ip地址和子网掩码和广播地址foreach(QNetworkAddressEntry entry,entryList){//遍历ip条目列表qDebug()<<"IP address:"<<entry.ip().toString();//获取ipqDebug()<<"Netmask:"<<entry.netmask().toString();//获取子网掩码qDebug()<<"Broadcast:"<<entry.broadcast().toString();//获取广播地址}}

关于Qt获取网络信息还有一些其他方法,本文给出的方法应该是比较方便快捷的,其他方法大家可以查看Qt帮助文档。

Qt网络编程之获取网络信息相关推荐

  1. java获取主机信息大全,网络编程:Java获取网络主机信息

    java.net.InetAddress类表示互联网协议 (IP) 地址. 有两个子类:Inet4Address, Inet6Address 通过 InetAddress可以方便获取一个域名下的IP, ...

  2. Linux网络编程之获取网络天气信息

    需求分析:1.需要Linux c 网络编程基础,2.需要了解 http 协议3.需要天气信息相关api(可以从阿里云上购买,很便宜的!)4.需要cJSON解析库(因为获取到的天气信息一般是用cJSON ...

  3. C# 通过豆瓣网络编程API获取图书信息

    这篇文章主要是关于如何通过豆瓣API获取信息的书籍,起初,我看到了原来的想法的内容是"C# 网络编程之网页简单下载实现"中通过HttpWebResponse类下载源代码,再通过正則 ...

  4. Android复习05【网络编程---WebView获取文章信息、保存用户名与密码、设置菜单样式、收藏文章列表】

    2020-04-02-星期四[源码可私聊我,QQ:386335886] 写篇文章不容易,点个赞再走吧,求求了~  目   录 网络访问-思维导图 玩Android网站---查看登录Cookie 适配器 ...

  5. php获得注册信息,PHP网络编程:获取用户的注册信息[2]

    PHP网络编程:获取用户的注册信息[2]以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!     --此文章摘自<P ...

  6. python网络通信传输的数据类型_Python网络编程中的网络数据和网络错误。

    上一个章节我们说的是套接字名和DNS.这篇文章我们主要解决下面问题. 我们在两台主机之间建立与关闭TCP流连接以及UDP数据报连接后.我们应该怎么准备我们需要传输的数据,该怎么对数据进行编码与格式化. ...

  7. 【Java 18】网络编程 - 概述、网络编程要素、IP和端口号、网络协议、TCP、UDP、URL

    网络编程 - 概述.网络编程要素.IP和端口号.网络协议.TCP.UDP.URL 网络编程 1 网络编程概述 2 网络通信要素概述 3 通信要素1:IP和端口号 3.1 内容 3.2 InetAddr ...

  8. 使用java网络编程模拟简单网络即时通信

    使用java网络编程模拟简单网络即时通信 通信流程图: 解析: 1.在上图中我们可以看出对于任何一个客户端,都由两部分构成,发送端和接收端(分别由两个线程来维系) 2.客户端在每一次请求链接时都会轮询 ...

  9. 【JavaSe】网络编程篇(一) 网络编程入门

    JavaSe·网络编程篇(一) 网络编程入门 1. 软件结构 C/S结构:全称为Client/Server结构,是指客户端和服务器结构.常见程序有QQ.百度网盘等软件 B/S结构 :全称为Browse ...

  10. 网络编程笔记之网络编程入门

    网络编程的概念 网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的.中间最主要的就是数据包的组装,数据包的过滤 ...

最新文章

  1. STM32开发 -- 打开网址测试脚本编写
  2. 请求的安全信息不可用或无法显示
  3. windows设置网卡参数
  4. 【bzoj】 1412: [ZJOI2009]狼和羊的故事
  5. Spring Bean的一生
  6. XSLT的处理模型(1)
  7. ASP.NET连接SQL、Access、Excel数据库(三)——工厂模式
  8. DataSnap 2009 系列之三 (生命周期篇)
  9. 1.maven下仅shiro框架对shiro的测试使用
  10. 多多云手机多少钱一月_多多云手机一机分身千变万化 高亢性能体验更加流畅...
  11. excel退出打印预览快捷键?
  12. paypal支付注意事项
  13. 苹果台式电脑怎么使用计算机,MAC电脑连接台式电脑显示器怎么操作
  14. 初中计算机数学,初中数学
  15. 10+ 条 Go 官方谚语,你知道几条?
  16. 计算机开放电子书归档 2018 1
  17. 易基因2022年度DNA甲基化研究高分项目文章精选
  18. Booth编码以及运算实例
  19. 1.PostgreSQL下载安装
  20. android sdk集成文档,android jpush sdk 集成文档.pdf

热门文章

  1. 【NOIP2017】李电下棋
  2. Linux的百度云有限速吗,mac(linux)下配置aria2解决百度云限速问题
  3. 升级到AppCompat v22.1.0,现在获得IllegalArgumentException:AppCompat不支持当前的主题功能
  4. Maven安装配置操作方法
  5. 汽车质量管理体系IATF 16949和培训及相关的标准(主要是电动汽车)
  6. SQLMAP 脱库过程(get请求)
  7. 银河麒麟系统安装字体
  8. LTE学习笔记:频带、信道带宽和频点号EARFCN
  9. caxa自动保存的文件在哪里_CAXA2011突然退出如何找回未保存文件,新建菜单里的文档恢复没有存档。...
  10. 微信公众号查询粉丝列表