logo
积分中心
鸿蒙网络管理模块05——数据流量统计
头像 蓝亭书序 2026-10-28 17:05:29    发布
0 浏览 0 点赞 0 收藏

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));
  });
});





©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除

京ICP备:2022009079号-2

京公网安备:11010502051901号

ICP证:京B2-20230255