1# 网络管理子系统<a name="ZH-CN_TOPIC_0000001162422291"></a> 2 3- [简介](#section104mcpsimp) 4- [目录](#section119mcpsimp) 5- [使用说明](#section128mcpsimp) 6 - [接收指定网络的状态变化通知](#section1458213210369) 7 - [发起网络请求](#section750135512369) 8 9- [相关仓](#section152mcpsimp) 10 11## 简介<a name="section104mcpsimp"></a> 12 13网络管理子系统,作为设备联网的必备组件,提供了对不同类型网络连接的统一管理,并提供了网络协议栈能力。应用可以通过调用API来获取数据网络的连接信息,查询和订阅数据网络的连接状态等,并可通过网络协议栈进行数据传输。 14 15各个部件主要作用如下: 16 17- 基础网络连接管理部件:主要功能是提供基础网络连接管理和对应的JS/Native API,包括不同网络连接优先级管理、网络连接信息查询、网络连接状态变化、DNS解析以及物理网络管理等。 18- 网络协议栈部件:主要功能是提供基础的网络协议栈和对应的JS API,包括HTTP、HTTPS、TCP、UDP等基础网络协议栈能力。 19 20**图 1** 子系统架构图 21 22 23 24## 目录<a name="section119mcpsimp"></a> 25 26``` 27foundation/communication/ 28├── netmanager_base # 基础网络连接管理 29└── netstack # 网络协议栈 30``` 31 32## 使用说明<a name="section128mcpsimp"></a> 33 34### 接收指定网络的状态变化通知<a name="section1458213210369"></a> 35 361. 从@ohos.net.connection.d.ts中导入connection命名空间。 37 382. 调用createNetConnection方法,指定网络能力、网络类型和超时时间(可选,如不传入代表默认网络),创建一个NetConnection对象。 39 403. 调用该对象的on方法,传入type和callback,订阅关心的事件。 41 424. 调用该对象的register方法,订阅指定网络状态变化的通知。 43 445. 当网络可用时,会收到netAvailable事件的回调。 45 466. 当不使用该网络时,可以调用该对象的unregister方法,取消订阅。 47 48 ``` 49 // 引入包名 50 import connection from '@ohos.net.connection' 51 52 let netCap = { 53 // 指定网络类型为蜂窝网络 54 bearerTypes: [connection.NetBearType.BEARER_CELLULAR], 55 // 指定网络能力为Internet 56 networkCap: [connection.NetCap.NET_CAPABILITY_INTERNET], 57 }; 58 let netSpec = { 59 netCapabilities: netCap, 60 }; 61 // 指定超时时间为10s 62 let timeout = 10 * 1000; 63 // 创建NetConnection对象 64 let conn = connection.createNetConnection(netSpec, timeout); 65 // 订阅事件,以on_netAvailable为例 66 conn.on('netAvailable', (data=> { 67 console.log("net is available, netId is " + data.netId); 68 })); 69 // 订阅指定网络状态变化的通知 70 conn.register((err, data) => {}); 71 // 当不使用该网络时,可以调用该对象的unregister方法,取消订阅 72 conn.unregister((err, data) => {}); 73 ``` 74 75 76### 发起网络请求<a name="section750135512369"></a> 77 781. 从@ohos.net.http.d.ts中导入http命名空间。 792. 调用createHttp方法,创建一个HttpRequest对象。 803. 调用该对象的on方法,订阅http响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息。 814. 调用该对象的request方法,传入http请求的url地址和可选参数,发起网络请求。 825. 开发者按照实际业务需要,解析返回结果。 836. 当该请求使用完毕时,调用destroy方法主动销毁。 84 85``` 86// 引入包名 87import http from '@ohos.net.http'; 88 89// 每一个httpRequest对应一个http请求任务,不可复用 90let httpRequest = http.createHttp(); 91// 用于订阅http响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息 92httpRequest.on('headersReceive', (data) => { 93 console.info('header: ' + data.header); 94}); 95httpRequest.request( 96 // 填写http请求的url地址,可以带参数也可以不带参数。URL地址需要开发者自定义。GET请求的参数可以在extraData中指定 97 "EXAMPLE_URL", 98 { 99 method: 'POST', // 可选,默认为“GET” 100 // 开发者根据自身业务需要添加header字段 101 header: { 102 'Content-Type': 'application/json' 103 }, 104 // 当使用POST请求时此字段用于传递内容 105 extraData: { 106 "data": "data to send", 107 }, 108 connectTimeout: 60000, // 可选,默认为60s 109 readTimeout: 60000, // 可选,默认为60s 110 },(err, data) => { 111 if (!err) { 112 // data.result为http响应内容,可根据业务需要进行解析 113 console.info('Result:' + data.result); 114 console.info('code:' + data.responseCode); 115 // data.header为http响应头,可根据业务需要进行解析 116 console.info('header:' + data.header); 117 console.info('header:' + data.cookies); 118 } else { 119 console.info('error:' + err); 120 } 121 // 当该请求使用完毕时,调用destroy方法主动销毁。 122 httpRequest.destroy(); 123 } 124); 125``` 126 127 128## 相关仓<a name="section152mcpsimp"></a> 129 130**网络管理子系统** 131 132[communication_netmanager_base](https://gitee.com/openharmony/communication_netmanager_base/blob/master/README_zh.md) 133 134[communication_netstack](https://gitee.com/openharmony/communication_netstack/blob/master/README_zh.md)