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