1# 网络管理子系统<a name="ZH-CN_TOPIC_0000001162422291"></a> 2 3 4## 简介<a name="section104mcpsimp"></a> 5 6网络管理子系统,作为设备联网的必备组件,提供了对不同类型网络连接的统一管理、流量管理、策略管理、网络共享,并提供了网络协议栈能力。应用可以通过调用API来获取数据网络的连接信息,查询和订阅数据网络的连接状态,网络流量数据,网络策略以及网络共享等,并可通过网络协议栈进行数据传输。 7 8下图所示为网络管理子系统架构图。各个部件主要作用如下: 9 10- 网络管理基础部件:主要功能是提供基础网络连接管理能力和对应的JS/Native API,包括不同网络连接优先级管理、网络连接信息查询、网络连接状态变化、DNS解析、流量统计管理、联网策略管理以及物理网络管理等。 11- 网络管理扩展部件:主要功能是提供网络管理扩展能力和对应的JS/Native API,包括以太网连接、热点网络共享等。 12- 网络协议栈部件:主要功能是提供基础的网络协议栈和对应的JS API,包括HTTP、HTTPS、WebSocket、TCP/UDP/TLS Socket等基础网络协议栈能力。 13 14**图 1** 子系统架构图 15 16![](figures/zh-cn_architecture-of-netmanager-subsystem.png) 17 18## 目录<a name="section119mcpsimp"></a> 19 20``` 21foundation/communication/ 22├── netmanager_base # 网络管理基础 23├── netmanager_ext # 网络管理扩展 24└── netstack # 网络协议栈 25``` 26 27## 使用说明<a name="section128mcpsimp"></a> 28 29### 接收指定网络的状态变化通知<a name="section1458213210369"></a> 30 311. 从@ohos.net.connection.d.ts中导入connection命名空间。 32 332. 调用createNetConnection方法,指定网络能力、网络类型和超时时间(可选,如不传入代表默认网络),创建一个NetConnection对象。 34 353. 调用该对象的on()方法,传入type和callback,订阅关心的事件。 36 374. 调用该对象的register()方法,订阅指定网络状态变化的通知。 38 395. 当网络可用时,会收到netAvailable事件的回调。 40 416. 当不使用该网络时,可以调用该对象的unregister()方法,取消订阅。 42 43 ``` 44 // 引入包名 45 import connection from '@ohos.net.connection' 46 47 let netCap = { 48 // 指定网络类型为蜂窝网络 49 bearerTypes: [connection.NetBearType.BEARER_CELLULAR], 50 // 指定网络能力为Internet 51 networkCap: [connection.NetCap.NET_CAPABILITY_INTERNET], 52 }; 53 let netSpec = { 54 netCapabilities: netCap, 55 }; 56 // 指定超时时间为10s 57 let timeout = 10 * 1000; 58 // 创建NetConnection对象 59 let conn = connection.createNetConnection(netSpec, timeout); 60 // 订阅事件,以on_netAvailable为例 61 conn.on('netAvailable', (data=> { 62 console.log("net is available, netId is " + data.netId); 63 })); 64 // 订阅指定网络状态变化的通知 65 conn.register((err, data) => {}); 66 // 当不使用该网络时,可以调用该对象的unregister()方法,取消订阅 67 conn.unregister((err, data) => {}); 68 ``` 69 70### 网络共享<a name="section2458213210369"></a> 71 721. 从@ohos.net.sharing中导入sharing命名空间。 732. 设定共享类型 743. 开始共享 754. 停止共享 76``` 77// 引入包名 78import sharing from '@ohos.net.sharing'; 79// 设定共享类型 80this.sharingType = 0; // 0: WIFI 1: USB 2: BLUETOOTH 81// 开始共享 82sharing.startSharing(this.sharingType,(err)=>{ 83 this.callBack(err); 84}) 85// 停止共享 86sharing.stopSharing(this.sharingType,(err)=>{ 87 this.callBack(err); 88}) 89``` 90 91### 发起网络请求<a name="section750135512369"></a> 92 931. 从@ohos.net.http.d.ts中导入http命名空间。 942. 调用createHttp()方法,创建一个HttpRequest对象。 953. 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。 964. 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。 975. 按照实际业务需要,解析返回结果。 986. 调用该对象的off()方法,取消订阅http响应头事件。 997. 当该请求使用完毕时,调用destroy()方法主动销毁。 100 101``` 102// 引入包名 103import http from '@ohos.net.http'; 104 105// 每一个httpRequest对应一个HTTP请求任务,不可复用 106let httpRequest = http.createHttp(); 107// 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息 108// 从API 8开始,使用on('headersReceive', Callback)替代on('headerReceive', AsyncCallback)。 8+ 109httpRequest.on('headersReceive', (header) => { 110 console.info('header: ' + JSON.stringify(header)); 111}); 112httpRequest.request( 113 // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定 114 "EXAMPLE_URL", 115 { 116 method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET 117 // 开发者根据自身业务需要添加header字段 118 header: { 119 'Content-Type': 'application/json' 120 }, 121 // 当使用POST请求时此字段用于传递内容 122 extraData: { 123 "data": "data to send", 124 }, 125 expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型 126 usingCache: true, // 可选,默认为true 127 priority: 1, // 可选,默认为1 128 connectTimeout: 60000, // 可选,默认为60000ms 129 readTimeout: 60000, // 可选,默认为60000ms 130 usingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定 131 usingProxy: false, //可选,默认不使用网络代理,自API 10开始支持该属性 132 }, (err, data) => { 133 if (!err) { 134 // data.result为HTTP响应内容,可根据业务需要进行解析 135 console.info('Result:' + JSON.stringify(data.result)); 136 console.info('code:' + JSON.stringify(data.responseCode)); 137 // data.header为HTTP响应头,可根据业务需要进行解析 138 console.info('header:' + JSON.stringify(data.header)); 139 console.info('cookies:' + JSON.stringify(data.cookies)); // 8+ 140 } else { 141 console.info('error:' + JSON.stringify(err)); 142 // 取消订阅HTTP响应头事件 143 httpRequest.off('headersReceive'); 144 // 当该请求使用完毕时,调用destroy方法主动销毁。 145 httpRequest.destroy(); 146 } 147 } 148); 149``` 150 151## 相关仓<a name="section152mcpsimp"></a> 152 153**网络管理子系统** 154 155[communication_netmanager_base](https://gitee.com/openharmony/communication_netmanager_base/blob/master/README_zh.md) 156[communication_netmanager_ext](https://gitee.com/openharmony/communication_netmanager_ext/blob/master/README_zh.md) 157[communication_netstack](https://gitee.com/openharmony/communication_netstack/blob/master/README_zh.md)