• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 以太网连接管理(仅对系统应用开放)
2<!--Kit: Network Kit-->
3<!--Subsystem: Communication-->
4<!--Owner: @wmyao_mm-->
5<!--Designer: @guo-min_net-->
6<!--Tester: @tongxilin-->
7<!--Adviser: @zhang_yixin13-->
8
9## 简介
10
11以太网连接的功能是提供支持设备通过硬件接口,以插入网线的形式访问互联网的能力。 设备接入网线后,可以获取动态分配的IP地址,子网掩码,Gateway,DNS等一系列网络属性;通过静态模式,手动配置与获取设备的网络属性。
12
13> **说明:**
14> 为了保证应用的运行效率,大部分API调用都是异步的,对于异步调用的API均提供了callback和Promise两种方式,以下示例均采用promise函数,更多方式可以查阅[API参考](../reference/apis-network-kit/js-apis-net-ethernet-sys.md)。
15
16## 约束
17
18- 开发语言:JS
19- 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
20
21## 场景介绍
22
23以太网连接的典型场景有:
24
25- DHCP模式,通过动态分配IP地址,子网掩码,Gateway,DNS等一系列网络属性,使能访问网络。
26- 静态模式,通过静态配置IP地址,子网掩码,Gateway,DNS等一系列网络属性,使能访问网络。
27
28以下分别介绍具体开发方式。
29
30## 接口说明
31
32完整的JS API说明以及实例代码请参考:[以太网连接](../reference/apis-network-kit/js-apis-net-ethernet-sys.md)。
33
34| 类型 | 接口 | 功能说明 |
35| ---- | ---- | ---- |
36| setIfaceConfig(iface: string, ic: InterfaceConfiguration, callback: AsyncCallback\<void>): void | 配置指定以太网的网络属性,iface为网口名称,ic为配置信息,调用callback。 | 设置网络接口配置信息。 |
37| getIfaceConfig(iface: string, callback: AsyncCallback\<InterfaceConfiguration>): void | 获取指定以太网的网络属性,iface为网口名称,调用callback。 | 获取指定网络接口信息。 |
38| isIfaceActive(iface: string, callback: AsyncCallback\<number>): void | 判断指定网口是否已激活,iface为网卡名称(无参为是否有激活网口),调用callback。 | 判断接口是否已激活。 |
39| getAllActiveIfaces(callback: AsyncCallback\<Array\<string>>): void | 获取所有活动的网络接口,调用callback。 | 获取活动的网络接口。 |
40| on(type: 'interfaceStateChange', callback: Callback\<{ iface: string, active: boolean }\>): void | 注册网络接口监听函数。 | 注册网卡热插拔事件。 |
41| off(type: 'interfaceStateChange', callback?: Callback\<{ iface: string, active: boolean }\>): void | 解除注册网络接口监听函数。 | 注销网卡热插拔事件。 |
42
43## 以太网连接-DHCP模式
44
451. 设备通过硬件接口,插入网线。
462. 从@kit.NetworkKit中导入ethernet命名空间。
473. 调用getAllActiveIfaces方法,获取所有激活的有线网卡名称,如:“eth0”,“eth1”。
484. 用户态通过isIfaceActive方法,来判断网口“eth0”是否已激活。
495. 用户态通过getIfaceConfig方法,来获取指定网口“eth0”的网络属性,未设置过的以太网络默认为DHCP模式,获取自动分配的网络属性。
50
51```ts
52// 从@kit.NetworkKit中导入ethernet命名空间
53import { ethernet } from '@kit.NetworkKit';
54import { BusinessError } from '@kit.BasicServicesKit';
55
56// getAllActiveIfaces获取所有活动的网络设备名称
57ethernet.getAllActiveIfaces().then((data: string[]) => {
58  console.log("getAllActiveIfaces promise data.length = " + JSON.stringify(data.length));
59  for (let i = 0; i < data.length; i++) {
60    console.log("getAllActiveIfaces promise  = " + JSON.stringify(data[i]));
61  }
62}).catch((error:BusinessError) => {
63  console.error("getAllActiveIfaces promise error = " + JSON.stringify(error));
64});
65
66// isIfaceActive判断指定网口是否已激活
67ethernet.isIfaceActive("eth0").then((data: number) => {
68  console.log("isIfaceActive promise = " + JSON.stringify(data));
69}).catch((error: BusinessError) => {
70  console.error("isIfaceActive promise error = " + JSON.stringify(error));
71});
72
73// getIfaceConfig获取指定以太网的网络属性
74ethernet.getIfaceConfig("eth0").then((data: ethernet.InterfaceConfiguration) => {
75  console.log("getIfaceConfig promise mode = " + JSON.stringify(data.mode));
76  console.log("getIfaceConfig promise ipAddr = " + JSON.stringify(data.ipAddr));
77  console.log("getIfaceConfig promise route = " + JSON.stringify(data.route));
78  console.log("getIfaceConfig promise gateway = " + JSON.stringify(data.gateway));
79  console.log("getIfaceConfig promise netMask = " + JSON.stringify(data.netMask));
80  console.log("getIfaceConfig promise dnsServers = " + JSON.stringify(data.dnsServers));
81}).catch((error: BusinessError) => {
82  console.error("getIfaceConfig promise error = " + JSON.stringify(error));
83});
84```
85
86## 以太网连接-静态模式
87
88### 开发步骤
89
901. 设备通过硬件接口,插入网线。
912. 从@kit.NetworkKit中导入ethernet命名空间。
923. 用户态通过getAllActiveIfaces方法,来获取所有活动的网络设备名称,如:“eth0”,“eth1”。
934. 用户态通过isIfaceActive方法,来判断网口“eth0”是否已激活。
945. 用户态调用setIfaceConfig方法,来设置指定网口"eth0"为静态模式,手动IP地址,子网掩码,Gateway,DNS等网络属性。
956. 用户态通过getIfaceConfig方法,来获取指定网口“eth0”的静态网络属性。
96
97```ts
98// 从@kit.NetworkKit中导入ethernet命名空间
99import { ethernet } from '@kit.NetworkKit';
100import { BusinessError } from '@kit.BasicServicesKit';
101
102// getAllActiveIfaces获取所有活动的网络设备名称
103ethernet.getAllActiveIfaces().then((data: string[]) => {
104  console.log("getAllActiveIfaces promise data.length = " + JSON.stringify(data.length));
105  for (let i = 0; i < data.length; i++) {
106    console.log("getAllActiveIfaces promise  = " + JSON.stringify(data[i]));
107  }
108}).catch((error:BusinessError) => {
109  console.error("getAllActiveIfaces promise error = " + JSON.stringify(error));
110});
111
112// isIfaceActive判断指定网口是否已激活
113ethernet.isIfaceActive("eth0").then((data: number) => {
114  console.log("isIfaceActive promise = " + JSON.stringify(data));
115}).catch((error: BusinessError) => {
116  console.error("isIfaceActive promise error = " + JSON.stringify(error));
117});
118
119// setIfaceConfig配置指定以太网的网络属性
120let config: ethernet.InterfaceConfiguration = {
121  mode: 0,
122  ipAddr: "192.168.xx.xxx",
123  route: "192.168.xx.xxx",
124  gateway: "192.168.xx.xxx",
125  netMask: "255.255.255.0",
126  dnsServers: "1.1.1.1"
127};
128
129const setConfigPromise = ethernet.setIfaceConfig("eth0", config);
130
131setConfigPromise.then(() => {
132  console.log("setIfaceConfig promise ok");
133}).catch((error: BusinessError)  => {
134  console.error("setIfaceConfig promise error = " + JSON.stringify(error));
135});
136
137// getIfaceConfig获取指定以太网的网络属性
138ethernet.getIfaceConfig("eth0").then((data: ethernet.InterfaceConfiguration) => {
139  console.log("getIfaceConfig promise mode = " + JSON.stringify(data.mode));
140  console.log("getIfaceConfig promise ipAddr = " + JSON.stringify(data.ipAddr));
141  console.log("getIfaceConfig promise route = " + JSON.stringify(data.route));
142  console.log("getIfaceConfig promise gateway = " + JSON.stringify(data.gateway));
143  console.log("getIfaceConfig promise netMask = " + JSON.stringify(data.netMask));
144  console.log("getIfaceConfig promise dnsServers = " + JSON.stringify(data.dnsServers));
145}).catch((error: BusinessError) => {
146  console.error("getIfaceConfig promise error = " + JSON.stringify(error));
147});
148```
149
150## 监听网络设备接口状态变化
151
152### 开发步骤
153
1541. 从@kit.NetworkKit中导入ethernet命名空间。
1552. 调用该对象的on()方法,订阅interfaceStateChange事件。可以根据业务需要订阅此消息。
1563. 订阅interfaceStateChange事件后,回调函数会在网卡设备的接口状态发生变化时触发。
1574. 调用该对象的off()方法,取消订阅interfaceStateChange事件。
158
159```ts
160// 从@kit.NetworkKit中导入ethernet命名空间
161import { ethernet } from '@kit.NetworkKit';
162
163// 订阅interfaceStateChange事件
164class EthernetData{
165  iface: string = ""
166  active: boolean = false
167}
168
169ethernet.on('interfaceStateChange', (data: EthernetData) => {
170  console.log(JSON.stringify(data));
171});
172
173// 取消事件订阅
174ethernet.off('interfaceStateChange');
175```
176