• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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![](figures/zh-cn_architecture-of-netmanager-subsystem.png)
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)