Qt 网络编程 网络信息获取操作

学习目标:网络信息获取操作

前置环境

运行环境:qt creator 4.12

学习内容

一、Qt 网络编程基础

  1. Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRequest/QNetworkAccessManager。
  2. Qt 网络编程模块还提供了基于安全套接字层协议(SSL)的安全网络通信类。
  3. 开发过程中需要在项目配置文件中添加 QT += network 以引入网络模块。
  4. QHostInfo 类提供了查询主机名、IP 地址、DNS 域名等信息的静态函数。
  5. QNetworkInterface 类用于获取主机所有 IP 地址和网络接口列表信息

QHostInfo类提供了一些常用的成员函数,用于获取主机名和IP地址等信息。以下是一些常用的成员函数:

  1. QHostInfo.localHostName(): 返回当前主机的主机名。
  2. QHostInfo.localDomainName(): 返回当前主机的域名。
  3. QHostInfo.addresses(): 返回与主机名关联的所有IP地址列表。
  4. QHostInfo.lookupHost(const QString &hostname, QObject *receiver, const char *member): 异步查找指定主机名对应的IP地址列表,当查找完成时会发送一个finished()信号。
  5. QHostInfo::fromName(const QString &name): 同步查找指定主机名对应的IP地址列表,返回一个QHostInfo对象。
  6. QHostInfo.error(): 返回最近一次查找操作中发生的错误。
  7. QHostInfo.errorString(): 返回最近一次查找操作中发生的错误描述。
  8. QHostInfo.addLookup(const QString &hostname): 添加一个新的主机名查找任务。
  9. QHostInfo.cancelAllLookups(): 取消所有正在进行的主机名查找任务。  

QNetworkInterface是Qt中用于获取网络接口信息的类,它提供了以下一些常用的成员函数:

  1. QList<QNetworkInterface> allInterfaces(): 返回系统中所有可用的网络接口列表。

  2. QList<QNetworkAddressEntry> addressEntries(): 返回当前网络接口的所有IP地址条目。

  3. QString name(): 返回网络接口的名称。

  4. QString humanReadableName(): 返回更加易读的网络接口名称。

  5. QNetworkInterface::InterfaceFlags flags(): 返回网络接口的标志位,用于表示接口的状态和特性。

  6. quint16 index(): 返回网络接口的索引号。

  7. QNetworkAddressEntry address(): 返回网络接口的主IP地址。

  8. QList<QNetworkAddressEntry> allAddresses(): 返回网络接口的所有IP地址条目。

  9. quint64 hardwareAddress(): 返回网络接口的MAC地址。

  10. bool isValid(): 检查网络接口是否有效。

  11. bool isLoopBack(): 检查网络接口是否为回环接口。

  12. bool isPointToPoint(): 检查网络接口是否为点对点连接。

实现项目

1.通过域名查询对方主机ip

这里出现两个ip是因为百度进行了ip转发

2.本机网络信息获取 

Qt获取网络信息编程

1.本机网络信息获取

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);
}Dialog::~Dialog()
{delete ui;
}void Dialog::on_pushButton_2_clicked() //获取ip/主机名称
{QString localname = QHostInfo::localHostName();ui->lineEdit->setText(localname);QHostInfo info = QHostInfo::fromName(localname);QList<QHostAddress> ipaddr = info.addresses();foreach(const QHostAddress& addr,ipaddr){if(addr.protocol() == QAbstractSocket::IPv4Protocol){qDebug()<<"IPv4 address:"<<addr.toString();ui->lineEdit_2->setText(addr.toString());}else if(addr.protocol() == QAbstractSocket::IPv6Protocol){qDebug()<<"IPv6 address:"<<addr.toString();}}}void Dialog::on_pushButton_clicked() //获取详细信息
{//枚举所有的网络接口,然后获取每个接口的IP地址条目,同样区分IPv4和IPv6地址进行输出。QList<QNetworkInterface> netinterface = QNetworkInterface::allInterfaces();QString result;for (int i=0;i<netinterface.size();i++) { //遍历所有网络接口QNetworkInterface interface=netinterface.at(i);result+="设备名称:"+interface.name()+"\n";      // 返回网络接口的名称,如"以太网"或"WLAN"等。result+="硬件地址:"+interface.hardwareAddress()+"\n";   //获取当前网络接口的硬件地址(MAC地址),//从当前网络接口获取所有的地址条目列表。 QNetworkAddressEntry 表示一个IP地址条目,包含IP地址、子网掩码和广播地址等信息。QList<QNetworkAddressEntry> entrylist = interface.addressEntries();for (int k=0;k<entrylist.size();k++) {QNetworkAddressEntry etry =entrylist.at(k);result+="Ip地址:"+etry.ip().toString()+"\n";result+="子网掩码:"+etry.netmask().toString()+"\n";result+="广播地址:"+etry.broadcast().toString()+"\n";}}qDebug()<<"网卡接口全部信息:"<<result;QTextEdit *set =new QTextEdit(result,this);ui->verticalLayout_3->addWidget(set);
}

 2.通过域名查询对方主机ip

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);
}Dialog::~Dialog()
{delete ui;
}void Dialog::on_pushButton_2_clicked() //查询dns
{QString name =ui->lineEdit->text();ui->plainTextEdit->appendPlainText("正在查询的主机信息:"+name);QHostInfo info =QHostInfo::fromName(name);QList<QHostAddress> addrs = info.addresses();for (int i=0;i<addrs.size();i++) {QHostAddress addr =addrs.at(i);QString proto;switch (addr.protocol()) {case QAbstractSocket::IPv4Protocol:proto+= "IPv4 Protocol";break;case QAbstractSocket::IPv6Protocol:proto+= "IPv6 Protocol";break;case QAbstractSocket::AnyIPProtocol:proto+= "Any IP Protocol";break;default:proto+= "Unknown Network Layer Protocol";}ui->plainTextEdit->appendPlainText("协议类型:"+proto);ui->plainTextEdit->appendPlainText("主机IP地址: "+addr.toString());}}void Dialog::on_pushButton_clicked() //清空
{ui->plainTextEdit->clear();
}

 总结

计算机ip信息获取,主要通过name 交由QhostInfo,然后通过info 获取addr等信息,之后遍历ip表即可获得。      

最后附上源代码链接
对您有帮助的话,帮忙点个star

32-networkinfo · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

33-dns-netinfo · jbjnb/Qt demo - 码云 - 开源中国 (gitee.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/42171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【简单介绍下Memcached】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

昇思25天学习打卡营第08天 | 模型训练

昇思25天学习打卡营第08天 | 模型训练 文章目录 昇思25天学习打卡营第08天 | 模型训练超参数损失函数优化器优化过程 训练与评估总结打卡 模型训练一般遵循四个步骤&#xff1a; 构建数据集定义神经网络模型定义超参数、损失函数和优化器输入数据集进行训练和评估 构建数据集和…

uniapp 去掉小数末尾多余的0

文章目录 在uniapp或者一般的JavaScript环境中&#xff0c;要去掉小数末尾的0&#xff0c;可以使用以下几种方法&#xff1a; 使用parseFloat()函数 let num 123.4500; let result parseFloat(num); console.log(result); // 输出: 123.45字符串处理 将数字转换为字符串&am…

24年沈阳教师招聘报名全流程(电脑版)

公开招聘1876名事业编制工作人员 报名时间&#xff1a;7月8日10:00至7月11日16:00&#xff1b; 报名网站&#xff1a;&#xff1a;沈阳市考试院 报名流程&#xff1a; 1.报名 ①登录沈阳市考试院填写报名信息&#xff0c;上传照片 本人近期免冠2寸正面电子证jian照片&#xff0…

接口依赖-动态参数+数据依赖的代码

怎么写测试用例 接口名:被依赖的返回值的jsonpath表达式&#xff0c;有几个依赖往后写就可以 代码 如果caseinfo里的getisdep等于yes&#xff0c;并且&#xff0c;depkey不为空 用正则解析 在testrun里增加判断 判断的内容是正则表达式&#xff0c;先去匹配&#xff0c;再去…

2024年世界人工智能大会(WAIC)各大佬的精彩发言

2024年世界人工智能大会&#xff08;WAIC&#xff09;在上海举行&#xff0c;受到了广泛关注和参与。以下是大会首日的主要观点和议题的总结&#xff1a; AI 应用落地&#xff1a;大会讨论了AI应用如何落地&#xff0c;即如何在当前阶段利用大模型技术实现实际应用。 AI 安全&…

flask缓存、信号的使用

【 一 】flask-ache ​ 它为 Flask 应用程序提供了缓存支持。缓存是 Web 应用程序中非常常见的做法&#xff0c;用于存储频繁访问但不太可能经常更改的数据&#xff0c;以减少对数据库或其他慢速存储系统的访问&#xff0c;从而提高应用程序的性能和响应速度。 ​ Flask-Cach…

041基于SSM+Jsp的高校校园点餐系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

昇思MindSpore学习笔记4-05生成式--Pix2Pix实现图像转换

摘要&#xff1a; 记录昇思MindSpore AI框架使用Pix2Pix模型生成图像、判断图像真实概率的原理和实际使用方法、步骤。包括环境准备、下载数据集、数据加载和处理、创建cGAN神经网络生成器和判别器、模型训练、模型推理等。 一、概念 1.Pix2Pix模型 条件生成对抗网络&#x…

科研绘图系列:R语言两组数据散点分布图(scatter plot)

介绍 展示两组数据的散点分布图是一种图形化表示方法,用于显示两个变量之间的关系。在散点图中,每个点代表一个数据点,其x坐标对应于第一组数据的值,y坐标对应于第二组数据的值。以下是散点图可以展示的一些结果: 线性关系:如果两组数据之间存在线性关系,散点图将显示出…

HUAWEI VRRP 实验

实验要求&#xff1a;在汇聚交换机上SW1和SW2中实施VRRP以保证终端网关的高可靠性(当某一个网关设备失效时&#xff0c;其他网关设备依旧可以实现业务数据的转发。) 1.在SW1和SW2之间配置链路聚合&#xff0c;以提高带宽速度。 2.PC1 访问远端网络8.8.8.8 &#xff0c;优先走…

视频汇聚/安防监控/GB28181国标EasyCVR视频综合管理平台出现串流的原因排查及解决

安防视频监控系统/视频汇聚EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;视频汇聚EasyCVR平台支持设备…

Git-Unity项目版本管理

目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理&#xff0c;并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…

【python】python母婴数据分析模型预测可视化(数据集+论文+PPT+源码)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

(阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

阿里通义音频生成大模型 FunAudioLLM 开源!

01 导读 人类对自身的研究和模仿由来已久&#xff0c;在我国2000多年前的《列子汤问》里就描述了有能工巧匠制作出会说话会舞动的类人机器人的故事。声音包含丰富的个体特征及情感情绪信息&#xff0c;对话作为人类最常使用亲切自然的交互模式&#xff0c;是连接人与智能世界…

uniapp报错--app.json: 在项目根目录未找到 app.json

【问题】 刚创建好的uni-app项目&#xff0c;运行微信小程序控制台报错如下&#xff1a; 【解决方案】 1. 程序根目录打开project.config.json文件 2. 配置miniprogramRoot&#xff0c;指定小程序代码的根目录 我的小程序代码编译后的工程文件目录为&#xff1a;dist/dev/mp…

Java | Leetcode Java题解之第220题存在重复元素III

题目&#xff1a; 题解&#xff1a; class Solution {public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {int n nums.length;Map<Long, Long> map new HashMap<Long, Long>();long w (long) t 1;for (int i 0; i < n; i) {long i…

CANoe的capl调用Qt制作的dll

闲谈 因为Qt封装了很多个人感觉很好用的库&#xff0c;所以一直想通过CAPL去调用Qt实现一些功能&#xff0c;但是一直没机会&#xff08;网络上也没看到这方面的教程&#xff09;&#xff0c;这次自己用了两天&#xff0c;踩了很多坑&#xff0c;终于是做成了一个初步的调用方…

文件系统技术架构分析

一文读懂&#xff1a;什么是文件系统 &#xff0c;有哪几类&#xff1f; ▉ 什么是文件系统&#xff1f; 技术大拿眉头皱了皱&#xff0c;忍住快要爆发的情绪。解释到&#xff1a; 数据以二进制形式存储于介质&#xff0c;但高低电平含义难解。文件系统揭秘这些二进制背后的意…