鸿蒙网络管理模块05——数据流量统计

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。

1、概述

HarmonyOS供了基于物理网络的数据流量统计能力,支持基于网卡/UID 的流量统计。主要实现的功能如下:

    • 支持基于网卡/UID 的实时流量统计。

    • 支持基于网卡/UID 的历史流量统计。

    • 支持基于网卡/UID 的流量变化订阅。

数据流量统计能力由 statistics 模块提供。目前HarmonyOS提供的数据流量统计的能力有9种,我们分别讨论。

2、数据流量统计接口

👉🏻 获取指定网卡实时下行流量数据

针对异步场景HarmonyOS提供两套类似的API,一个是callback形式,另一个是promise形式(后文所有接口都按照此规律,不再重复说明)。

// 异步callback类型getIfaceRxBytes(nic: string, callback: AsyncCallback<number>): void;// 异步promise类型getIfaceRxBytes(nic: string): Promise<number>;

参数 nic 表示的是网卡名,callback或Promise返回值表示获取到的实时下行流量,单位(byte)。针对callback的示例如下:​​​​​​​

import { BusinessError } from '@kit.BasicServicesKit';import { statistics } from '@kit.NetworkKit';statistics.getIfaceRxBytes("wlan0", (error: BusinessError, stats: number) => {  console.log(JSON.stringify(error));  console.log(JSON.stringify(stats));});

error表示获取过程出现错误,错误码如下:

错误码 ID错误信息
401参数错误
2100002连接设备错误
2100003系统内部错误
2103005读取系统map失败。
2103011系统map创建失败
2103012获取网卡名失败

👉🏻 获取指定网卡实时上行流量数据。

接口形式分别为callback形式和promise形式。​​​​​​​

// callback形式接口getIfaceTxBytes(nic: string, callback: AsyncCallback<number>): void;// promise形式接口getIfaceTxBytes(nic: string): Promise<number>;

nic参数是网卡名,与下行流量接口类似,callback和Promise的返回值分别是上行流量,单位(byte)。针对Promise接口示例代码如下:​​​​​​​

import { statistics } from '@kit.NetworkKit';statistics.getIfaceRxBytes("wlan0").then((stats: number) => {  console.log(JSON.stringify(stats));});

【由于接口的使用方法基本相同,后文就不再举例示例代码介绍接口,直接看接口定义即可】

👉🏻 获取蜂窝实时下行流量数据​​​​​​​

// callback形式getCellularRxBytes(callback: AsyncCallback<number>): void;// promise形式getCellularRxBytes(): Promise<number>;

👉🏻 获取蜂窝实时上行流量数据​​​​​​​

// callback形式getCellularTxBytes(callback: AsyncCallback<number>): void;// Promise形式getCellularTxBytes(): Promise<number>;

👉🏻 获取所有网卡实时下行流量数据​​​​​​​

// callback接口getAllRxBytes(callback: AsyncCallback<number>): void;// promise接口getAllRxBytes(): Promise<number>;

👉🏻 获取所有网卡实时上行流量数据​​​​​​​

// callback接口形式getAllTxBytes(callback: AsyncCallback<number>): void;// Promise接口形式getAllTxBytes(): Promise<number>;

👉🏻 获取指定应用实时下行流量数据​​​​​​​

// callback接口getUidRxBytes(uid: number, callback: AsyncCallback<number>): void;// Promise接口getUidRxBytes(uid: number): Promise<number>;

👉🏻 获取指定应用实时上行流量数据​​​​​​​

// callback接口getUidTxBytes(uid: number, callback: AsyncCallback<number>): void;// promise接口getUidTxBytes(uid: number): Promise<number>;

👉🏻 获取Socket实时下行流量数据​​​​​​​

// callback接口getSockfdRxBytes(sockfd: number, callback: AsyncCallback<number>): void;// Promise接口getSockfdRxBytes(sockfd: number): Promise<number>;

【SocketFd的获取请参看后文的DEMO】

👉🏻 获取Socket实时上行流量数据​​​​​​​

// callback接口getSockfdTxBytes(sockfd: number, callback: AsyncCallback<number>): void;// Promise接口getSockfdTxBytes(sockfd: number): Promise<number>;

3、DEMO

  1. 获取指定网卡实时流量数据。

  2. 获取蜂窝实时流量数据。

  3. 获取所有网卡实时流量数据。

  4. 获取指定应用实时流量数据。

  5. 获取指定socket实时流量数据。

// 从@kit.NetworkKit中导入statistics命名空间import { statistics, socket } from '@kit.NetworkKit';import { BusinessError } from '@kit.BasicServicesKit';// 获取指定网卡实时下行流量数据。statistics.getIfaceRxBytes("wlan0").then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取指定网卡实时上行流量数据。statistics.getIfaceTxBytes("wlan0").then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取蜂窝实时下行流量数据。statistics.getCellularRxBytes().then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取蜂窝实时上行流量数据。statistics.getCellularTxBytes().then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取所有网卡实时下行流量数据。statistics.getAllRxBytes().then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取所有网卡实时上行流量数据。statistics.getAllTxBytes().then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取指定应用实时下行流量数据。let uid = 20010038;statistics.getUidRxBytes(uid).then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取指定应用实时上行流量数据。let uids = 20010038;statistics.getUidTxBytes(uids).then((stats: number) => {  console.log(JSON.stringify(stats));});// 获取指定socket实时下行流量数据。let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();tcp.getSocketFd().then((sockfd: number) => {  statistics.getSockfdRxBytes(sockfd).then((stats: number) => {    console.log(JSON.stringify(stats));  }).catch((err: BusinessError) => {    console.error(JSON.stringify(err));  });});// 获取指定socket实时上行流量数据。tcp.getSocketFd().then((sockfd: number) => {  statistics.getSockfdTxBytes(sockfd).then((stats: number) => {    console.log(JSON.stringify(stats));  }).catch((err: BusinessError) => {    console.error(JSON.stringify(err));  });});

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

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

相关文章

【PS2020】Adobe Photoshop 2020 中文免费版

photoshop 2020是全球最大的图像处理软件&#xff0c;为用户提供了广泛的专业级润饰工具套件&#xff0c;集成了专为激发灵感而设计的强大编辑功能&#xff0c;帮助用户制作出满意的图片效果&#xff0c;是很多摄影师、广告师等专业人员必备的一款图像及照片后期处理大型专业软…

网络受限情况下安装openpyxl模块提示缺少Jdcal,et_xmlfile

1.工作需要处理关于Excel文件内容的东西 2.用公司提供的openpyxl模块总是提示缺少jdcal文件,因为网络管控,又没办法直接使用命令下载&#xff0c;所以网上找了资源&#xff0c;下载好后上传到个人资源里了 资源路径 openpyxl jdcal et_xmlfile 以上模块来源于&#xff1a;Py…

Java-进阶二

单列集合&#xff1a; ----------List ArrayList的源代码分析&#xff08;扩容原理&#xff09; 1 使用空参构造的集合&#xff0c;在底层创建一个容量为0的数组。2 添加第一个元素时&#xff0c;底层会扩容创建一个容量为10的数组。3 存满时会扩容1.5倍。4 如果一次添加多个…

大模型基础:基本概念、Prompt、RAG、Agent及多模态

随着大模型的迅猛发展&#xff0c;LLM 作为人工智能的核心力量&#xff0c;正以前所未有的方式重塑着我们的生活、学习和工作。无论是智能语音助手、自动驾驶汽车&#xff0c;还是智能决策系统&#xff0c;大模型都是幕后英雄&#xff0c;让这些看似不可思议的事情变为可能。本…

Redis SpringBoot项目学习

Redis 是一个高性能的key-value内存数据库。它支持常用的5种数据结构&#xff1a;String字符串、Hash哈希表、List列表、Set集合、Zset有序集合 等数据类型。 Redis它解决了2个问题&#xff1a; 第一个是&#xff1a;性能 通常数据库的读操作&#xff0c;一般都要几十毫秒&…

虚拟机没有网络怎么解决

CentOS7为例 进入虚拟网络编辑器 1.更改设置 2.选中NAT模式点击3点击移除网络 4添加网络&#xff0c;随便选一个 5.点开NAT设置&#xff0c;记住网关 6.DHCP设置&#xff0c;注意虚拟机设置ip必须在起始ip和结束ip范围内 进入虚拟机网络适配器&#xff0c;自定义选中第4步操作…

【Kubernetes】常见面试题汇总(五十二)

目录 116. K8S 集群服务暴露失败&#xff1f; 117.外网无法访问 K8S 集群提供的服务&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-…

torchvision.transforms.Resize()的用法

今天我在使用torchvision.transforms.Resize()的时候发现&#xff0c;一般Resize中放的是size或者是(size,size)这样的二元数。 这两个里面&#xff0c;torchvision.transforms.Resize((size,size))&#xff0c;大家都很清楚&#xff0c;会将图像的h和w大小都变成size。 但是…

大学生课程设计报告--基于JavaGUI的贪吃蛇

前言 ​ 贪吃蛇游戏是一个基础且经典的视频游戏,它适合作为学习编程的人进行一些更深入的学习,可以更加了解关于循环,函数的使用,以及面向对象是如何应用到实际项目中的; ​ 不仅如此,贪吃蛇游戏的规则在思考后可以拆分,有利于学生将更多精力去设计游戏的核心逻辑,而…

TM1618控制共阳极数码管的数据传送问题

数据传送中的问题 首先每个字节是按照一个地址写入的&#xff0c;而共阳极数码管的公共端是SEG引脚连接的。这使得数码管显示的编码是按照竖向的字节。如下图所示中&#xff0c;横向是公共端&#xff0c;竖向是实际编码字符字节。 数据转换方式 这样可以一次写入所有需要显示…

腾讯云SDK项目管理

音视频终端 SDK&#xff08;腾讯云视立方&#xff09;控制台提供项目管理功能&#xff0c;您可参照以下步骤为您的应用快速添加音视频通话能力和多人音视频互动能力。 若需正式开发并上线音视频应用&#xff0c;请在完成创建后&#xff0c;参照 集成指南 进行开发包下载、集成…

yolov11人物背景扣除

有时候我们需要对图片进行背景扣除和替换,本文将基于yolov11对一张图片进行背景扣除,对视频的处理同理。 安装 pip install ultralytics 2 、获取测试图片 3、代码 from ultralytics import YOLO import cv2 import nu

【概率论】泊松分布

泊松分布 若 &#xff0c;则 归一性 例子 泊松分布多出现在当X表示一定时间或一定空间内出现的事件的个数这种场合&#xff0c;如在一定时间内某交通路口所发生的事故的个数。 将泊松分布假设为二项分布 假设条件: &#xff08;1&#xff09;泊松分布一般为一段时间或一…

ChatGPT:引领人工智能新潮流!

一、ChatGPT 是什么&#xff1f; 1. ChatGPT 的强大功能和广泛应用。 ChatGPT 作为一款先进的 AI 语言模型&#xff0c;拥有众多强大功能。它可以进行文本生成、文本分类、情感分析、机器翻译等多种自然语言处理任务。同时&#xff0c;ChatGPT 还能进行对话式交互&#xff0c;…

C++版iwanna2

第二篇目录 程序的流程图程序游玩的效果下一篇博客要说的东西 程序的流程图 #mermaid-svg-lFW0ZjCdi5Xvl3gE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lFW0ZjCdi5Xvl3gE .error-icon{fill:#552222;}#mermaid-s…

信息安全工程师(40)防火墙技术应用

一、防火墙的基本概念 防火墙是一种网络安全设备&#xff0c;用于监控和控制网络流量&#xff0c;以保护网络免受未经授权的访问和攻击。它可以是装配多张网卡的通用计算机&#xff0c;也可能是通用的物理设备。防火墙通过在网络之间设置访问控制策略&#xff0c;对进出的通信流…

Window系统编程 - 文件操作

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天主要介绍使用windows系统编程操作读写文件 文件 CreateFile()函数讲解 介绍:该函数用于打开文件或者I/O流设备&#xff0c;文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot 和…

Java Collection接口

01 Collection体系 1.Collection是父接口&#xff0c;List和Set是子接口&#xff0c;用于实现父接口。接口不能被实例化&#xff0c;因为接口没有构造方法。 2.第三行和第四行的class就是这些接口的实现类。 02 Collection父接口 1.特点&#xff1a;代表一组任意类型的对象、…

【计算机毕设】springboot-家具销售电商平台(附源码)

摘 要 Abstracts 目 录 第1章 绪论 1.1课题背景 1.2研究意义 1.3研究内容 第2章 技术介绍 2 2.1相关技术 3 2.2 Java技术 3 2.3 MySQL数据库 4 2.4 Tomcat介绍 4 2.5 Spring Boot框架 5 第3章 需求分析 5 3.1需求分析概述 6 3.2可行性分析 6 3.2.1经济可行性 6 3.2.2技…

十二、血条UI

一、制作血条UI 注&#xff1a;一般不用Slider制作血条&#xff1b;而是用两个Image制作&#xff0c;选择为填充 使用Slider滑动条制作UI 人物血条&#xff1a;背景深绿色&#xff1b;滑条浅绿色 在场景中的画布选择为OverLay 敌人血条&#xff1a; 在预制体里面制作&#x…