自学内容网 自学内容网

鸿蒙网络管理模块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));  });});


原文地址:https://blog.csdn.net/harmonyClassRoom/article/details/142798625

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!