当前位置: 首页 > article >正文

Qt之QNetworkInterface

简介

用于表示网络接口(即网卡)信息

常用接口

static QList<QNetworkInterface> allInterfaces();
static QList<QHostAddress> allAddresses();
QList<QNetworkAddressEntry> addressEntries() const;

接口类型

用枚举InterfaceType表示

enum InterfaceType {Loopback = 1,Virtual,Ethernet,Slip,CanBus,Ppp,Fddi,Wifi,Ieee80211 = Wifi,   // aliasPhonet,Ieee802154,SixLoWPAN,  // 6LoWPAN, but we can't start with a digitIeee80216,Ieee1394,Unknown = 0};

接口状态

用枚举InterfaceFlag表示

enum InterfaceFlag {IsUp = 0x1,IsRunning = 0x2,CanBroadcast = 0x4,IsLoopBack = 0x8,IsPointToPoint = 0x10,CanMulticast = 0x20};

结构

QNetworkInterface
- QSharedDataPointer<QNetworkInterfacePrivate> d
QNetworkInterfacePrivate
+ int index
+ int mtu
+ QNetworkInterface::InterfaceFlags flags
+ QNetworkInterface::InterfaceType type
+ QString name
+ QString friendlyName
+ QString hardwareAddress
+ QList<QNetworkAddressEntry> addressEntries
QHostAddress
- QExplicitlySharedDataPointer<QHostAddressPrivate> d
QHostAddressPrivate
+ QString scopeId
+ quint32 a
+ qint8 protocol
QNetworkAddressEntryPrivate
+ QHostAddress address
+ QHostAddress broadcast
+ QDeadlineTimer preferredLifetime
+ QDeadlineTimer validityLifetime
+ QNetmask netmask
+ bool lifetimeKnown
+ QNetworkAddressEntry::DnsEligibilityStatus dnsEligibility
QNetworkAddressEntry
QSharedData

QNetworkAddressEntry :用来表示网络地址实体,即包含地址,广播地址以及掩码
QHostAddress:包含地址以及协议
QHostAddressPrivate成员包含:

QString scopeId;union {Q_IPV6ADDR a6; // IPv6 addressstruct { quint64 c[2]; } a6_64;struct { quint32 c[4]; } a6_32;
};
quint32 a;    // IPv4 address
qint8 protocol;

QNetworkInterfaceManager

网络接口管理器,获取电脑上所有可用的网络接口
定义有全局静态变量

Q_GLOBAL_STATIC(QNetworkInterfaceManager, manager)

其结构为

QNetworkInterfaceManager
+ QSharedDataPointer<QNetworkInterfacePrivate> empty
+static uint interfaceIndexFromName(const QString &name)
+static QString interfaceNameFromIndex(uint index)
+QList~QSharedDataPointer~QNetworkInterfacePrivate~ ~ allInterfaces()
-QList~QNetworkInterfacePrivate *~ scan()

allInterfaces:获取所有的网络接口,先通过scan得到所有网络接口,winrt,win,unix不同平整对scan有不同实现,然后调用 postProcess作后处理

QList<QSharedDataPointer<QNetworkInterfacePrivate> > QNetworkInterfaceManager::allInterfaces()
{const QList<QNetworkInterfacePrivate *> list = postProcess(scan());QList<QSharedDataPointer<QNetworkInterfacePrivate> > result;result.reserve(list.size());for (QNetworkInterfacePrivate *ptr : list) {if ((ptr->flags & QNetworkInterface::IsUp) == 0) {// if the network interface isn't UP, the addresses are ineligible for DNSfor (auto &addr : ptr->addressEntries)addr.setDnsEligibility(QNetworkAddressEntry::DnsIneligible);}result << QSharedDataPointer<QNetworkInterfacePrivate>(ptr);}return result;
}static QList<QNetworkInterfacePrivate *> postProcess(QList<QNetworkInterfacePrivate *> list)
{// Some platforms report a netmask but don't report a broadcast address// Go through all available addresses and calculate the broadcast address// from the IP and the netmask//// This is an IPv4-only thing -- IPv6 has no concept of broadcasts// The math is://    broadcast = IP | ~netmaskfor (QNetworkInterfacePrivate *interface : list) {for (QNetworkAddressEntry &address : interface->addressEntries) {if (address.ip().protocol() != QAbstractSocket::IPv4Protocol)continue;if (!address.netmask().isNull() && address.broadcast().isNull()) {QHostAddress bcast = address.ip();bcast = QHostAddress(bcast.toIPv4Address() | ~address.netmask().toIPv4Address());address.setBroadcast(bcast);}}}return list;
}

相关文章:

Qt之QNetworkInterface

简介 用于表示网络接口&#xff08;即网卡&#xff09;信息 常用接口 static QList<QNetworkInterface> allInterfaces(); static QList<QHostAddress> allAddresses(); QList<QNetworkAddressEntry> addressEntries() const;接口类型 用枚举InterfaceTy…...

pom导包成功,但是就是无法使用相关类,同时报错:Library:Maven ‘xxx‘ has broken path

开发环境&#xff1a;Intellij 2023 一、问题记录 在maven工程的pom文件导入如下某一依赖(JGit)。没有显示导包的错误&#xff0c;同时在maven仓库里面找到对应的包是正常下载到相应jar的。 但是就是无法引入相关的类。打开Project Structure&#xff0c;在Dependencies中发现…...

大数据技术之Scala

Spark运行架构核心是一个计算引擎 核心组件 1. Driver&#xff08;驱动器&#xff09; 角色&#xff1a;Spark作业的“大脑”&#xff0c;负责解析用户代码、生成任务并调度执行。 功能&#xff1a; 将用户程序转换为作业&#xff08;Job&#xff09;。 …...

LeetCode刷题常见的Java排序

1. 字符串排序(字母排序) 首先,你的代码实现了根据字母表顺序对字符串中的字母进行排序,忽略了大小写并且保留了非字母字符的位置。关键点是: 提取和排序字母:通过 Character.isLetter() 判断是否为字母,并利用 Character.toLowerCase() 来忽略大小写进行排序。保留非字…...

mysql的下载和安装2025.4.8

mysql下载和安装 MySQL的下载网址&#xff1a; https://www.mysql.com/downloads/ 点击进入Windows版本下载&#xff1a;我们可以选择需要的MySQL版本以及所需的操作系统&#xff0c;这里选择离线安装&#xff1a; 注意&#xff1a;MySQL 8.0 是带有 MySQL Installer 的最后一…...

QML Loader:延迟加载与动态切换

目录 引言相关阅读工程结构LoaderDelay.qml - 延迟加载实现完整代码HeavyComponent.qml代码解析运行效果 LoaderSwitch.qml - 动态切换组件完整代码代码解析运行效果 Main.qml - 主界面实现完整代码主界面结构代码解析 总结下载链接 引言 QML的Loader组件提供了一种强大的机制…...

Python和MicroPython的解释器区别

Python和MicroPython的解释器不是同一个&#xff0c;它们在设计目标、实现方式和运行环境上都有显著的区别。以下是它们的主要区别&#xff1a; 1. 底层实现 Python解释器&#xff08;CPython&#xff09;&#xff1a; Python的标准解释器是CPython&#xff08;C语言实现的Pyt…...

Git 的进阶功能和技巧

1、分支的概念和使用 1.1、什么是分支&#xff1f; 分支&#xff08;Branch&#xff09;是在版本控制中非常重要的概念。几乎所有版本控制系统都支持某种形式的分支。在 Git 中&#xff0c;分支是 Git 强大功能之一&#xff0c;它允许我们从主开发线分离出来&#xff0c;在不…...

解析HiveQL的ALTER TABLE ADD/REPLACE COLUMNS语句

阅读以下ALTER TABLE的ADD/REPLACE COLUMNS语句的语法,用C#编写解析函数,一个一个字符解析,所有关键字不区分大小写,一个或多个空格、Tab和换行的组合都可以是关键词之间的分隔,表名和字段名可能包含空格和Tab,语句中可以用`包裹表名和字段名,解析以下HiveQL语句在所有可…...

Spark Core编程

一 Spark 运行架构 1 运行架构 定义 Spark 框架的核心是一个计算引擎&#xff0c;整体来说&#xff0c;它采用了标准 master-slave 的结构 如图所示 2 核心组件 Spark 框架有两个核心组件: 1)Driver 2)Spark 驱动器节点&#xff08;用于执行 Spark 任务中的 main 方法&…...

在Ubuntu内网环境中为Gogs配置HTTPS访问(通过Apache反向代理使用IP地址)

一、准备工作 确保已安装Gogs并运行在HTTP模式(默认端口3000) 确认服务器内网IP地址(如192.168.1.100) 二、安装Apache和必要模块 sudo apt update sudo apt install apache2 -y sudo a2enmod ssl proxy proxy_http rewrite headers 三、创建SSL证书 1. 创建证书存储目录…...

Kafka和RocketMQ相比有什么区别?那个更好用?

Kafka和RocketMQ相比有什么区别?那个更好用? Kafka 和 RocketMQ 都是广泛使用的消息队列系统&#xff0c;它们有很多相似之处&#xff0c;但也有一些关键的区别。具体选择哪个更好用&#xff0c;要根据你的应用场景和需求来决定。以下是它们之间的主要区别&#xff1a; 1. …...

无人机装调与测试

文章目录 前言一、无人机基本常识/预备知识&#xff08;一&#xff09;无人机飞行原理无人机硬件组成/各组件作用1.飞控2.GPS3.接收机4.电流计5.电调6.电机7.电池8.螺旋桨9.UBEC&#xff08;稳压模块&#xff09; &#xff08;二&#xff09;飞控硬件简介&#xff08;三&#x…...

JavaScript Hook JSON.stringify和JSON.parse:逆向与修改实战指南

在JavaScript逆向工程中&#xff0c;Hook JSON.stringify和JSON.parse方法是一种重要的技术&#xff0c;可以用来捕获、修改或分析JSON数据的序列化和反序列化过程。本文将结合具体案例&#xff0c;详细讲解如何实现这些方法的Hook操作。 一、Hook JSON.stringify和JSON.parse…...

【图书管理系统】全栈开发图书管理系统获取图书列表接口(后端:计算图书页数、查询当前页展示的书籍)

图书列表 实现服务器代码(计算图书总数量查询当前页需要展示的书籍) 后端响应时&#xff0c;需要响应给前端的数据 records&#xff1a;第 pageNum 页要展示的图书有哪些&#xff08;存储到List集合中&#xff09;total&#xff1a;计算一共有多少本书&#xff08;用于告诉前…...

正则表达式补充——python

简介 本章是对前面正则表达式的补充。 一、复杂的查找替换等任务 content 张三是脑卒中病 李四&#xff0c;是高血脂 苏齐&#xff0c;是肺结核病 六六&#xff0c;是血血血血import re p re.compile(r...病) for one in p.findall(content):print(one) 运行结果&#xf…...

Kotlin日常使用函数记录

文章目录 前言字符串集合1.两个集合的差集2.集合转数组2.1.集合转基本数据类型数组2.2.集合转对象数组 Map1.合并Map1.1.使用 操作符1.2.使用 操作符1.3.使用 putAll 方法1.4.使用 merge 函数 前言 记录一些kotlin开发中&#xff0c;日常使用的函数和方式之类的&#xff0c;…...

Android 回答视频边播放边下载的问题

分层次的回答突出 技术深度、架构思维 和 实战优化&#xff0c;从基础实现到高阶优化&#xff1a; 一、核心技术方案&#xff08;基础回答&#xff09; 如何实现视频边下边播&#xff1f; 1. **网络请求**&#xff1a;使用 HTTP Range 请求&#xff08;Header: Range: bytes0…...

RHCSA Linux系统 数据流和重定向 tee 命令

一.数据流和重定向 1. 数据流 (1) 标准输入&#xff08;stdin&#xff0c;代码 0&#xff09;&#xff1a;默认从键盘获取输入&#xff0c;只读。 (2) 标准输出&#xff08;stdout&#xff0c;代码 1&#xff09;&#xff1a;命令执行正确信息默认输出到屏幕&#xff0c;只写…...

[ctfshow web入门] web7

信息收集 题目提示&#xff1a;版本控制很重要&#xff0c;但不要部署到生产环境更重要。 那么很有可能&#xff0c;版本控制相关的信息被部署到环境了&#xff0c;比如比如version.txt记录了一些相关配件的版本&#xff0c;git版本管理工具中的.git文件夹未删除 信息收集就是…...

DeepSeek-V3 API:开启下一代AI应用开发的新篇章

引言 在人工智能技术日新月异的今天&#xff0c;大型语言模型(LLM)正以前所未有的速度改变着我们与技术互动的方式。DeepSeek-V3作为国内领先的大语言模型之一&#xff0c;其API的开放为开发者提供了强大的AI能力集成方案。 DeepSeek-V3 API的核心优势 1.强大的语言理解与生…...

华为数字芯片机考2025合集3已校正

1. 题目内容 下列说法正确的是&#xff08;&#xff09;。 1. 解题步骤 1.1 选项分析 选项描述正误依据A异步 FIFO 采用格雷码是为了省功耗✗格雷码用于消除多比特信号跨时钟域的位跳变风险&#xff0c;与功耗无关B单比特信号打两拍可以完全避免亚稳态✗双触发器同步仅降低…...

控制 ElementUI el-table 树形表格多选框的显示层级

1、你可以通过 selectable 属性来控制哪些行可以选择&#xff08;显示多选框&#xff09; <el-table:data"tableData"row-key"id"default-expand-all:tree-props"{children: children, hasChildren: hasChildren}"select"handleSelect&…...

go语言应该如何学习

以下是学习Go语言的高效路径及关键技巧&#xff0c;结合多个优质来源整理而成&#xff0c;适合不同基础的学习者&#xff1a; 一、基础语法快速入门&#xff08;1-2周&#xff09; 1、环境搭建 下载安装Go SDK&#xff0c;配置GOPATH和GOROOT环境变量&#xff0c;推荐使用Go…...

NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)

路径类dp是线性dp的⼀种&#xff0c;它是在⼀个nm的矩阵中设置⼀个⾏⾛规则&#xff0c;研究从起点⾛到终点的⽅案数、最⼩路径和或者最⼤路径和等等的问题 矩阵的最小路径和_牛客题霸_牛客网 状态表⽰&#xff1a; dp[i][j]表⽰&#xff1a;到达[i, j]位置处&#xff0c;最⼩…...

React + TipTap 富文本编辑器 实现消息列表展示,类似Slack,Deepseek等对话框功能

经过几天折腾再折腾&#xff0c;弄出来了&#xff0c;弄出来了&#xff01;&#xff01;&#xff01; 消息展示 在位编辑功能。 两个tiptap实例1个用来展示 消息列表&#xff0c;一个用来在位编辑消息。 tiptap灵活富文本编辑器&#xff0c;拓展性太好了!!! !!! 关键点&#x…...

博途 TIA Portal之1200做主站与汇川EASY的TCP通讯

前言,虽然已经做了几篇关于TCP通讯的文章,但是不同的PLC之间的配合可能不同,下面将演示这种差异。 关于汇川EASY做从站的配置请参见下方链接文章:汇川EASY系列之以太网通讯(套接字socket做从站)_汇川以太网tcp套接字fb块-CSDN博客 1、硬件准备: 1200PLC,汇川EASY320…...

蓝桥杯速成刷题清单(上)

一、1.排序 - 蓝桥云课 &#xff08;快速排序&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …...

力扣第444场周赛

这次力扣周赛对我来说难度确实大, 只做出两题, 但还是想分享一下的做题经验和感受 1. 移除最小数对使数组有序 I 题目链接&#xff1a;力扣 给你一个数组 nums&#xff0c;你可以执行以下操作任意次数&#xff1a; 选择 相邻 元素对中 和最小 的一对。如果存在多个这样的对&a…...

Redis 持久化机制详解:RDB/AOF 过程、优缺点及配置。Redis持久化中的Fork与Copy-on-Write技术解析。

Redis 持久化机制详解&#xff1a;RDB/AOF 过程、优缺点及配置 一、RDB 持久化过程及特性 核心机制 生成快照&#xff1a;通过 fork 子进程生成内存数据的二进制快照文件&#xff08;.rdb&#xff09;&#xff0c;父进程继续处理请求。写时复制&#xff08;Copy-On-Write&…...