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