Qt 网络编程 网络信息获取操作
学习目标:网络信息获取操作
前置环境
运行环境:qt creator 4.12
学习内容
一、Qt 网络编程基础
- Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRequest/QNetworkAccessManager。
- Qt 网络编程模块还提供了基于安全套接字层协议(SSL)的安全网络通信类。
- 开发过程中需要在项目配置文件中添加 QT += network 以引入网络模块。
- QHostInfo 类提供了查询主机名、IP 地址、DNS 域名等信息的静态函数。
- QNetworkInterface 类用于获取主机所有 IP 地址和网络接口列表信息
QHostInfo类提供了一些常用的成员函数,用于获取主机名和IP地址等信息。以下是一些常用的成员函数:
- QHostInfo.localHostName(): 返回当前主机的主机名。
- QHostInfo.localDomainName(): 返回当前主机的域名。
- QHostInfo.addresses(): 返回与主机名关联的所有IP地址列表。
- QHostInfo.lookupHost(const QString &hostname, QObject *receiver, const char *member): 异步查找指定主机名对应的IP地址列表,当查找完成时会发送一个finished()信号。
- QHostInfo::fromName(const QString &name): 同步查找指定主机名对应的IP地址列表,返回一个QHostInfo对象。
- QHostInfo.error(): 返回最近一次查找操作中发生的错误。
- QHostInfo.errorString(): 返回最近一次查找操作中发生的错误描述。
- QHostInfo.addLookup(const QString &hostname): 添加一个新的主机名查找任务。
- QHostInfo.cancelAllLookups(): 取消所有正在进行的主机名查找任务。
QNetworkInterface是Qt中用于获取网络接口信息的类,它提供了以下一些常用的成员函数:
-
QList<QNetworkInterface> allInterfaces()
: 返回系统中所有可用的网络接口列表。 -
QList<QNetworkAddressEntry> addressEntries()
: 返回当前网络接口的所有IP地址条目。 -
QString name()
: 返回网络接口的名称。 -
QString humanReadableName()
: 返回更加易读的网络接口名称。 -
QNetworkInterface::InterfaceFlags flags()
: 返回网络接口的标志位,用于表示接口的状态和特性。 -
quint16 index()
: 返回网络接口的索引号。 -
QNetworkAddressEntry address()
: 返回网络接口的主IP地址。 -
QList<QNetworkAddressEntry> allAddresses()
: 返回网络接口的所有IP地址条目。 -
quint64 hardwareAddress()
: 返回网络接口的MAC地址。 -
bool isValid()
: 检查网络接口是否有效。 -
bool isLoopBack()
: 检查网络接口是否为回环接口。 -
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)
相关文章:
Qt 网络编程 网络信息获取操作
学习目标:网络信息获取操作 前置环境 运行环境:qt creator 4.12 学习内容 一、Qt 网络编程基础 Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRe…...
linux中的进程以及进程管理
程序和进程的区别和联系 程序(Program): 程序是一组指令的集合,通常存储在磁盘或其他存储设备上,是一种静态的概念。程序本身并没有运行,它只是一个可执行的文件或脚本,包含了一系列的指令和数…...
pyecharts可视化案例大全(11~20)
pyecharts可视化案例大全(11~20) 十一、设置动画效果十二、直方图带视觉组件十三、设置渐变色(线性渐变)十四、设置渐变色(径向渐变)十五、设置分割线十六、设置分隔区域十七、面积图十八、堆叠面积图十九、自定义线样式二十、折线图平滑处理十一、设置动画效果 在图表加载前…...
Docker在人工智能领域的应用与实战
摘要 人工智能(AI)技术的快速发展带来了对高效开发和部署工具的需求。Docker作为一个创新的容器化平台,为AI领域提供了强大的支持。本文详细介绍了Docker在AI模型开发、训练、部署以及服务器集群管理等方面的应用,并探讨了其在数…...
python基础篇(8):异常处理
在Python编程中,异常是程序运行时发生的错误,它会中断程序的正常执行流程。异常处理机制使得程序能够捕获这些错误,并进行适当的处理,从而避免程序崩溃。 1 错误类型 代码的错误一般会有语法错误和异常错误两种,语法错…...
FortiClient 用IPsec VPN 远程拨号到FortiGate说明文档
说明:本文档针对IPsec VPN 中的Remote VPN 进行说明,即远程用户使用PC中的FortiClient软件,通过VPN拨号的方式连接到公司总部FortiGate设备,访问公司内部服务器。在配置之前需要统一VPN策略和参数,如模式… 说明&#…...
Git-Unity项目版本管理
目录 准备GitHub新建项目并添加ssh密钥Unity文件夹 本文记录如何用git对unity 项目进行版本管理,并可传至GitHub远端。 准备 名称版本windows11Unity2202.3.9.f1gitN.A.githubN.A. GitHub新建项目并添加ssh密钥 GitHub新建一个repositorywindows11 生成ssh-key&…...
每日一题~ leetcode 402 (贪心+单调栈)
click me! 这个贪心的推导在leetcode上已经很明确了。 click me! 删除k个数,可以先考虑删除一个数。这也是一种常见的思路。(如果进行同样的操作多次,可以先只 考虑一次操作如何实现,或者他的影响。完成这一次操作后,…...
设计模式之模版方法
模版方法介绍 模版方法(Template Method)模式是一种行为型设计模式,它定义了一个操作(模板方法)的基本组合与控制流程,将一些步骤(抽象方法)推迟到子类中,使得子类可以在…...
docker部署redis/mongodb/
一、redis 创建/root/redis/conf/redis.conf 全部执行命令如下 docker run -it -d --name redis -p 6379:6379 --net mynet --ip 172.18.0.9 -m 400m -v /root/redis/conf:/usr/local/etc/redis -e TXAsia/Shangehai redis redis-server /usr/local/etc/redis/redis.conf 部署…...
LeetCode 581. 最短无序连续子数组
更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。 组队打卡,更多解法等你一起来参与哦! LeetCode 581. 最短无序连续子数组,难度中等。 排序 解题思路:首先对数组排序,然后找出两侧顺序的数组&#x…...
数据库可视化管理工具dbeaver试用及问题处理。
本文记录了在内网离线安装数据库可视化管理工具dbeaver的过程和相关问题处理方法。 一、下载dbeaver https://dbeaver.io/download/ 笔者测试时Windows平台最新版本为:dbeaver-ce-24.1.1-x86_64-setup.exe 二、安装方法 一路“下一步”即可 三、问题处理 1、问…...
29、php实现和为S的两个数字(含源码)
题目:php 实现 和为S的两个数字 描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数, 是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 输出描述: 对应每个测…...
Spring Boot中的全局异常处理
Spring Boot中的全局异常处理 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中实现全局异常处理,这是保证应用…...
中英双语介绍美国苹果公司(Apple Inc.)
中文版 苹果公司简介 苹果公司(Apple Inc.)是一家美国跨国科技公司,总部位于加利福尼亚州库比蒂诺。作为全球最有影响力的科技公司之一,苹果以其创新的产品和设计引领了多个科技领域的变革。以下是对苹果公司发展历史、主要产品…...
C语言牢大坠机
目录 开头程序程序的流程图《牢大坠机》结尾 开头 大家好,我叫这是我58,今天,我们要来看关于牢大坠机的一些东西。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #define HIGH 66 #include <stdio.h> #include <Windows.h> int ma…...
zdppy+vue3+antd 实现表格单元格编辑功能
初步实现 <template><a-button class"editable-add-btn" style"margin-bottom: 8px" click"handleAdd">Add</a-button><a-table bordered :data-source"dataSource" :columns"columns"><templa…...
elasticsearch索引怎么设计
Primary Shard(主分片) Primary Shard(主分片)是索引数据存储的基本单位,承担着数据写入和查询的职责。以下是关于Primary Shard的一些关键点: 1. 数据分布:每个索引在创建时会被分成多个主分…...
React 中 useState 和 useReducer 的联系和区别
文章目录 使用场景使用 useState使用 useReducer 联系区别用法状态更新逻辑适用场景可读性和可维护性 使用场景 使用 useState 状态逻辑简单。只涉及少量的状态更新。需要快速和简单的状态管理。 使用 useReducer 状态逻辑复杂。涉及多个子状态或多种状态更新逻辑。需要更好…...
Linux 定时任务详解:全面掌握 cron 和 at 命令
Linux 定时任务详解:全面掌握 cron 和 at 命令 Linux 系统中定时任务的管理对于运维和开发人员来说都是至关重要的。通过定时任务,可以在特定时间自动执行脚本或命令,提高系统自动化程度。本文将详细介绍 Linux 中常用的定时任务管理工具 cr…...
力扣考研经典题 反转链表
核心思想 头插法: 不断的将cur指针所指向的节点放到头节点之前,然后头节点指向cur节点,因为最后返回的是head.next 。 解题思路 1.如果头节点是空的,或者是只有一个节点,只需要返回head节点即可。 if (head null …...
opencv 设置超时时间
经常爬视频数据,然后用opencv做成图片 因此设置超时时间很重要 cap.set(cv2.CAP_PROP_FPS, timeout_ms) for idx, row in data.iterrows(): if idx < 400: continue try: # 打开视频文件 timeout_ms 5000 cap cv2.VideoCapture(row[PLAY_URL]) cap.set(cv2.C…...
2024年7月6日随笔
期末考试全部结束了,这个月是真累啊,一堆事,好在都熬过来了,上次参加的那个码题杯自己居然进国赛了,我看了一下职业赛道和本科赛道的题,本科赛道的感觉要难上不少,比赛时间是一周后,…...
Ubuntu 打开或关闭界面
设置开机默认关闭图形界面 1. 设置系统默认启动到多用户目标(命令行界面): o 使用以下命令将系统默认启动目标设置为多用户目标(这会关闭图形界面): sudo systemctl set-default multi-use…...
使用京东云主机搭建幻兽帕鲁游戏联机服务器全流程,0基础教程
使用京东云服务器搭建幻兽帕鲁Palworld游戏联机服务器教程,非常简单,京东云推出幻兽帕鲁镜像系统,镜像直接选择幻兽帕鲁镜像即可一键自动部署,不需要手动操作,真正的新手0基础部署幻兽帕鲁,阿腾云整理基于京…...
Python和MATLAB微机电健康推导算法和系统模拟优化设计
🎯要点 🎯惯性测量身体活动特征推导健康状态算法 | 🎯卷积网络算法学习惯性测量数据估计六自由度姿态 | 🎯全球导航卫星系统模拟,及惯性测量动态测斜仪算法、动态倾斜算法、融合算法 | 🎯微机电系统加速度…...
IT之家最新科技热点 | 小米 AI 研究院开创多模态通用模型
人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…...
黑色矩形块检测数据集VOC+YOLO格式2000张1类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2000 标注数量(xml文件个数):2000 标注数量(txt文件个数):2000 标注…...
Linux内存管理--系列文章柒——硬件架构
一、引子 之前文章讲解的是系统的虚拟内存,本章讲述这些硬件的架构和系统怎样统一管理这些硬件的。 二、物理内存模型 物理内存模型描述了计算机系统中的物理内存如何由操作系统组织和管理。它定义了物理内存如何划分为单元,如何寻址这些单元以及如何…...
QQ音乐Android一面凉经
最近面试了不少公司, 近期告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是QQ音乐Android一面凉经。 面试岗位: QQ音乐Android开发工程师面试时长: 50min(提问40min 反问10min)代码考核: 无 面试问题(40min) 自我介绍 工作经历, 重点…...
浅谈进程隐藏技术
前言 在之前几篇文章已经学习了解了几种钩取的方法 浅谈调试模式钩取浅谈热补丁浅谈内联钩取原理与实现导入地址表钩取技术 这篇文章就利用钩取方式完成进程隐藏的效果。 进程遍历方法 在实现进程隐藏时,首先需要明确遍历进程的方法。 CreateToolhelp32Snapsh…...
【C++】Google Test(gtest)单元测试
文章目录 Google Test(gtest)单元测试使用示例更多用法测试夹具 Google Test(gtest)单元测试 单元测试是一种软件测试方法,它旨在将应用程序的各个部分(通常是方法或函数)分离出来并独立测试&a…...
水箱高低水位浮球液位开关
水箱高低水位浮球液位开关概述 水箱高低水位浮球液位开关是一种用于监测和控制水箱中液位的自动化设备,它能够在水箱液位达到预设的高低限制时,输出开关信号,以控制水泵或电磁阀的开闭,从而维持水箱液位在一个安全的范围内。这类设…...
Autoware内容学习与初步探索(一)
0. 简介 之前作者主要是基于ROS2,CyberRT还有AutoSar等中间件完成搭建的。有一说一,这种从头开发当然有从头开发的好处,但是如果说绝大多数的公司还是基于现成的Apollo以及Autoware来完成的。这些现成的框架中也有很多非常好的方法。目前作者…...
【手写数据库内核组件】01 解析树的结构,不同类型的数据结构组多层的链表树,抽象类型统一引用格式
不同类型的链表 专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 不同类型…...
Pandas 进阶 —— 数据转换、聚合与可视化
引言 在数据分析的旅程中,Pandas 库提供了从数据转换到聚合再到可视化的全面解决方案。上篇我们掌握了数据的导入和清洗,本篇我们将探索如何通过 Pandas 对数据进行更高级的处理,包括数据转换、聚合分析以及可视化展示。 数据转换 数据转换…...
华为OD机试 - 来自异国的客人(Java 2024 D卷 100分)
华为OD机试 2024D卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(D卷C卷A卷B卷)》。 刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测…...
期末上分站——计组(3)
复习题21-42 21、指令周期是指__C_。 A. CPU从主存取出一条指令的时间 B. CPU执行一条指令的时间 C. CPU从主存取出一条指令的时间加上执行这条指令的时间。 D. 时钟周期时间 22、微型机系统中外设通过适配器与主板的系统总线相连接,其功能是__D_。 A. 数据缓冲和…...
IDA*——AcWing 180. 排书
IDA* 定义 IDA*(Iterative Deepening A*)是一种结合了深度优先搜索(DFS)的递归深度限制特性和A搜索的启发式估价函数的搜索算法。它主要用于解决启发式搜索问题,尤其是当搜索空间很大或者搜索成本不确定时。 IDA* 是…...
【云计算】公有云、私有云、混合云、社区云、多云
公有云、私有云、混合云、社区云、多云 1.云计算的形态1.1 公有云1.2 私有云1.3 混合云1.4 社区云1.5 多云1.5.1 多云和混合云之间的关系1.5.2 多云的用途1.5.3 影子 IT 和多云1.5.4 优缺点 2.不同云形态的对比 1.云计算的形态 张三⾃⼰在家做饭吃,这是 私有云&…...
MySQL中的MVCC解析
MySQL中的MVCC解析 多版本并发控制是MySQL中实现高并发的一种关键技术。通过对数据进行多版本的管理,MVCC能够在保证数据一致性的同时,提高数据库的并发性能。本文将深入探讨MySQL中的MVCC机制,包括其原理、实现方式以及优势。 MVCC的原理 …...
【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的生日聚会(100分) - 三语言AC题解(Python/Java/Cpp)
🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 …...
初识STM32:芯片基本信息
STM32简介 STM32是ST公司基于ARM公司的Cortex-M内核开发的32位微控制器。 ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。 ST公司于1987年由意大利的SGS微电子与法国的Thomson半导体合并…...
Zabbix 配置PING监控
Zabbix PING监控介绍 如果需要判断机房的网络或者主机是否正常,这就需要使用zabbix ping,Zabbix使用外部命令fping处理ICMP ping的请求,在基于ubuntu APT方式安装zabbix后默认已存在fping程序。另外zabinx_server配置文件参数FpingLocation默…...
异常解决(三)-- Wandb fails with ServiceStartProcessError
原文链接:https://github.com/wandb/wandb/issues/5765 我的环境配置: Python3.8.16 Wandb0.17.4 在使用Wandb记录实验数据时, 报以下错误: ServiceStartProcessError: The wandb service process exited with 1. Ensure that s…...
Qt调用Matlab(一)
目录 1 概述2 创建Qt工程2.1 增加Matlab支持3 调用Matlab3.1 widget.h3.2 widget.cpp4 运行4.1 配置4.2 运行1 概述 MATLAB是MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人,控制系统等领域…...
网络爬虫(二) 哔哩哔哩热榜高频词按照图片形状排列
我们有时候需要爬取结果生成为自定义的词云图 生成自定义的词云图通常需要以下步骤: 1. 爬取数据:使用爬虫工具或库,如requests、BeautifulSoup等,可以爬取网页、论坛、社交媒体等平台上的文本数据。 2. 数据预处理:…...
MySQL 常见错误及解决方案
1. Too many connections 运行环境:Winows11、Phpstudy V8.1.1.3、MySQL 5.7.26 同一时间 MySQL 的连接数量有限制,当超过上限时将提示下面错误信息: 1040 - Too many connections 查看当前最大连接数 mysql> show variables like %max_…...
STM32 - 内存分区与OTA
最近搞MCU,发现它与SOC之间存在诸多差异,不能沿用SOC上一些技术理论。本文以STM L4为例,总结了一些STM32 小白入门指南。 标题MCU没有DDR? 是的。MCU并没有DDR,而是让代码存储在nor flash上,临时变量和栈…...
RAG理论:ES混合搜索BM25+kNN(cosine)以及归一化
接前一篇:RAG实践:ES混合搜索BM25+kNN(cosine) https://blog.csdn.net/Xin_101/article/details/140230948 本文主要讲解混合搜索相关理论以及计算推导过程, 包括BM25、kNN以及ES中使用混合搜索分数计算过程。 详细讲解: (1)ES中如何通过BM25计算关键词搜索分数; (2)…...