• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.net.webSocket (WebSocket连接)
2
3<!--Kit: Network Kit-->
4<!--Subsystem: Communication-->
5<!--Owner: @wmyao_mm-->
6<!--Designer: @guo-min_net-->
7<!--Tester: @tongxilin-->
8<!--Adviser: @zhang_yixin13-->
9
10> **说明:**
11>
12> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
13
14给第三方应用提供webSocket客户端和服务端服务器,实现客户端与服务端的双向连接,目前服务端仅支持智慧屏使用。
15
16客户端:使用WebSocket建立服务器与客户端的双向连接,需要先通过[createWebSocket](#websocketcreatewebsocket6)方法创建[WebSocket](#websocket6)对象,然后通过[connect](#connect6)方法连接到服务器。当连接成功后,客户端会收到[open](#onopen6)事件的回调,之后客户端就可以通过[send](#send6)方法与服务器进行通信。当服务器发信息给客户端时,客户端会收到[message](#onmessage6)事件的回调。当客户端想要取消此连接时,通过调用[close](#close6)方法主动断开连接后,客户端会收到[close](#onclose6)事件的回调。若在上述任一过程中发生错误,客户端会收到[error](#onerror6)事件的回调。
17
18服务端:(目前服务端仅支持智慧屏使用)使用WebSocket建立服务器与客户端的双向连接,需要先通过[createWebSocketServer](#websocketcreatewebsocketserver19)方法创建[WebSocketServer](#websocketserver19)对象,然后通过[start](#start19)方法启动服务器,监听客户端的申请建链的消息。当连接成功后,服务端会收到[connect](#onconnect19)事件的回调,之后服务端可以通过[send](#send19)方法与客户端进行通信,或者通过[listAllConnections](#listallconnections19)方法列举出当前与服务端建链的所有客户端信息。当客户端给服务端发消息时,服务端会收到[messageReceive](#onmessagereceive19)事件回调。当服务端想断开与某个客户端的连接时,可以通过调用[close](#close19)方法主动断开与某个客户端的连接,之后服务端会收到[close](#onclose19)事件的回调。当服务端想停止service时,可以调用[stop](#stop19)方法。若在上述任一过程中发生错误,服务端会收到[error](#onerror19)事件的回调。
19
20## 导入模块
21
22```ts
23import { webSocket } from '@kit.NetworkKit';
24```
25
26## webSocket.createWebSocket<sup>6+</sup>
27
28createWebSocket(): WebSocket
29
30创建一个WebSocket对象,里面包括建立连接、关闭连接、发送数据和订阅/取消订阅WebSocket连接的打开事件、接收到服务器消息事件、关闭事件和错误事件。
31
32**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
33
34**系统能力**:SystemCapability.Communication.NetStack
35
36**返回值:**
37
38| 类型                                | 说明                                                         |
39| :---------------------------------- | :----------------------------------------------------------- |
40| [WebSocket](#websocket6) | 返回一个WebSocket对象,里面包括connect、send、close、on和off方法。 |
41
42**示例:**
43
44```ts
45let ws: webSocket.WebSocket = webSocket.createWebSocket();
46```
47
48## WebSocket<sup>6+</sup>
49
50在调用WebSocket的方法前,需要先通过[webSocket.createWebSocket](#websocketcreatewebsocket6)创建一个WebSocket。
51
52### connect<sup>6+</sup>
53
54connect(url: string, callback: AsyncCallback\<boolean\>): void
55
56根据URL地址,建立一个WebSocket连接,使用callback方式作为异步方法。
57
58> **说明:**
59>
60> 可通过监听error事件获得该接口的执行结果。
61
62**需要权限**:ohos.permission.INTERNET
63
64**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
65
66**系统能力**:SystemCapability.Communication.NetStack
67
68**注意:** URL地址长度不能超过1024个字符,否则会连接失败。从API15开始,URL地址长度限制由1024修改为2048。
69
70**参数:**
71
72| 参数名   | 类型                     | 必填 | 说明                         |
73| -------- | ------------------------ | ---- | ---------------------------- |
74| url      | string                   | 是   | 建立WebSocket连接的URL地址。 |
75| callback | AsyncCallback\<boolean\> | 是   | 回调函数。true:连接请求创建成功;false:连接请求创建失败。                   |
76
77**错误码:**
78
79以下错误码的详细介绍参见[webSocket错误码](errorcode-net-webSocket.md)和[通用错误码](../errorcode-universal.md)。
80
81| 错误码ID              | 错误信息                                   |
82| --------------------- | ------------------------------------------ |
83| 401                   | Parameter error.                           |
84| 201                   | Permission denied.                         |
85| 2302001               | Websocket url error.                       |
86| 2302002               | Websocket certificate file does not exist. |
87| 2302003               | Websocket connection already exists.       |
88| 2302998               | It is not allowed to access this domain.   |
89| 2302999               | Internal error.             |
90
91
92**示例:**
93
94```ts
95import { webSocket } from '@kit.NetworkKit';
96import { BusinessError } from '@kit.BasicServicesKit';
97
98let ws = webSocket.createWebSocket();
99let url = "ws://";
100ws.connect(url, (err: BusinessError, value: boolean) => {
101  if (!err) {
102    console.info("connect success")
103  } else {
104    console.error(`connect fail. Code: ${err.code}, message: ${err.message}`)
105  }
106});
107```
108
109### connect<sup>6+</sup>
110
111connect(url: string, options: WebSocketRequestOptions, callback: AsyncCallback\<boolean\>): void
112
113根据URL地址,建立一个WebSocket连接,使用callback方式作为异步方法。
114
115> **说明:**
116>
117> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。
118
119**需要权限**:ohos.permission.INTERNET
120
121**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
122
123**系统能力**:SystemCapability.Communication.NetStack
124
125**注意:** URL地址长度不能超过1024个字符,否则会连接失败。
126
127**参数:**
128
129| 参数名   | 类型                     | 必填 | 说明                                                    |
130| -------- | ------------------------ | ---- | ------------------------------------------------------- |
131| url      | string                   | 是   | 建立WebSocket连接的URL地址。                            |
132| options  | WebSocketRequestOptions  | 是   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
133| callback | AsyncCallback\<boolean\> | 是   | 回调函数。true:连接请求创建成功;false:连接请求创建失败。                                              |
134
135**错误码:**
136
137以下错误码的详细介绍参见[webSocket错误码](errorcode-net-webSocket.md)和[通用错误码](../errorcode-universal.md)。
138
139| 错误码ID              | 错误信息                                   |
140| --------------------- | ------------------------------------------ |
141| 401                   | Parameter error.                           |
142| 201                   | Permission denied.                         |
143| 2302001               | Websocket url error.                       |
144| 2302002               | Websocket certificate file does not exist. |
145| 2302003               | Websocket connection already exists.       |
146| 2302998               | It is not allowed to access this domain.   |
147| 2302999               | Internal error.             |
148
149**示例:**
150
151```ts
152import { webSocket } from '@kit.NetworkKit';
153import { BusinessError } from '@kit.BasicServicesKit';
154
155let ws = webSocket.createWebSocket();
156let options: webSocket.WebSocketRequestOptions | undefined;
157if (options !=undefined) {
158  options.header = {
159     name1: "value1",
160     name2: "value2",
161     name3: "value3"
162  };
163  options.caPath = "";
164}
165let url = "ws://"
166ws.connect(url, options, (err: BusinessError, value: Object) => {
167  if (!err) {
168    console.info("connect success")
169  } else {
170    console.error(`connect fail. Code: ${err.code}, message: ${err.message}`)
171  }
172});
173```
174
175### connect<sup>6+</sup>
176
177connect(url: string, options?: WebSocketRequestOptions): Promise\<boolean\>
178
179根据URL地址和header,建立一个WebSocket连接。使用Promise异步回调。
180
181> **说明:**
182>
183> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。
184
185**需要权限**:ohos.permission.INTERNET
186
187**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
188
189**系统能力**:SystemCapability.Communication.NetStack
190
191**注意:** URL地址长度不能超过1024个字符,否则会连接失败。
192
193**参数:**
194
195| 参数名  | 类型                    | 必填 | 说明                                                    |
196| ------- | ----------------------- | ---- | ------------------------------------------------------- |
197| url     | string                  | 是   | 建立WebSocket连接的URL地址。                            |
198| options | WebSocketRequestOptions | 否   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
199
200**返回值:**
201
202| 类型               | 说明                              |
203| :----------------- | :-------------------------------- |
204| Promise\<boolean\> | 回调函数。true:连接请求创建成功;false:连接请求创建失败。 |
205
206**错误码:**
207
208以下错误码的详细介绍参见[webSocket错误码](errorcode-net-webSocket.md)和[通用错误码](../errorcode-universal.md)。
209
210| 错误码ID              | 错误信息                                   |
211| --------------------- | ------------------------------------------ |
212| 401                   | Parameter error.                           |
213| 201                   | Permission denied.                         |
214| 2302001               | Websocket url error.                       |
215| 2302002               | Websocket certificate file does not exist. |
216| 2302003               | Websocket connection already exists.       |
217| 2302998               | It is not allowed to access this domain.   |
218| 2302999               | Internal error.             |
219
220**示例:**
221
222```ts
223import { webSocket } from '@kit.NetworkKit';
224
225let ws = webSocket.createWebSocket();
226let url = "ws://"
227let promise = ws.connect(url);
228promise.then((value: boolean) => {
229  console.info("connect success")
230}).catch((err:string) => {
231  console.error("connect fail, error:" + JSON.stringify(err))
232});
233```
234
235### send<sup>6+</sup>
236
237send(data: string | ArrayBuffer, callback: AsyncCallback\<boolean\>): void
238
239通过WebSocket连接发送数据,使用callback方式作为异步方法。
240
241**需要权限**:ohos.permission.INTERNET
242
243**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
244
245**系统能力**:SystemCapability.Communication.NetStack
246
247**参数:**
248
249| 参数名   | 类型                     | 必填 | 说明         |
250| -------- | ------------------------ | ---- | ------------ |
251| data     | string \| ArrayBuffer | 是   | 发送的数据。<br>API 6及更早版本仅支持string类型。API 8起同时支持string和ArrayBuffer类型。 |
252| callback | AsyncCallback\<boolean\> | 是   | 回调函数。true:发送请求创建成功;false:发送请求创建失败。   |
253
254**错误码:**
255
256以下错误码的详细介绍参见[通用错误码](../errorcode-universal.md)。
257
258| 错误码ID | 错误信息                 |
259| ------- | ----------------------- |
260| 401     | Parameter error.        |
261| 201     | Permission denied.      |
262
263**示例:**
264
265```ts
266import { webSocket } from '@kit.NetworkKit';
267import { BusinessError } from '@kit.BasicServicesKit';
268
269let ws = webSocket.createWebSocket();
270let url = "ws://"
271class OutValue {
272  status: number = 0
273  message: string = ""
274}
275ws.connect(url, (err: BusinessError, value: boolean) => {
276    if (!err) {
277      console.info("connect success")
278    } else {
279      console.error(`connect fail. Code: ${err.code}, message: ${err.message}`)
280    }
281});
282ws.on('open', (err: BusinessError, value: Object) => {
283  console.info("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message)
284    ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
285    if (!err) {
286      console.info("send success")
287    } else {
288      console.error(`send fail. Code: ${err.code}, message: ${err.message}`)
289    }
290  });
291});
292```
293
294> **说明:**
295>
296> send接口必须在监听到open事件后才可以调用。
297
298### send<sup>6+</sup>
299
300send(data: string | ArrayBuffer): Promise\<boolean\>
301
302通过WebSocket连接发送数据。使用Promise异步回调。
303
304**需要权限**:ohos.permission.INTERNET
305
306**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
307
308**系统能力**:SystemCapability.Communication.NetStack
309
310**参数:**
311
312| 参数名 | 类型   | 必填 | 说明         |
313| ------ | ------ | ---- | ------------ |
314| data     | string \| ArrayBuffer | 是   | 发送的数据。<br>API 6及更早版本仅支持string类型。API 8起同时支持string和ArrayBuffer类型。 |
315
316**返回值:**
317
318| 类型               | 说明                              |
319| :----------------- | :-------------------------------- |
320| Promise\<boolean\> | 以Promise形式返回发送数据的结果。true:发送请求创建成功;false:发送请求创建失败。 |
321
322**错误码:**
323
324以下错误码的详细介绍参见[通用错误码](../errorcode-universal.md)。
325
326| 错误码ID | 错误信息                 |
327| ------- | ----------------------- |
328| 401     | Parameter error.        |
329| 201     | Permission denied.      |
330
331**示例:**
332
333```ts
334import { webSocket } from '@kit.NetworkKit';
335import { BusinessError } from '@kit.BasicServicesKit';
336
337let ws = webSocket.createWebSocket();
338let url = "ws://"
339class OutValue {
340  status: number = 0
341  message: string = ""
342}
343ws.connect(url, (err: BusinessError, value: boolean) => {
344    if (!err) {
345      console.info("connect success")
346    } else {
347      console.error("connect fail. Code: ${err.code}, message: ${err.message}")
348    }
349});
350
351ws.on('open', (err: BusinessError, value: Object) => {
352  console.info("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message)
353  let promise = ws.send("Hello, server!");
354  promise.then((value: boolean) => {
355    console.info("send success")
356  }).catch((err:string) => {
357    console.error("send fail, error:" + JSON.stringify(err))
358  });
359});
360```
361
362> **说明:**
363>
364> send接口必须在监听到open事件后才可以调用。
365
366### close<sup>6+</sup>
367
368close(callback: AsyncCallback\<boolean\>): void
369
370关闭WebSocket连接,使用callback方式作为异步方法。
371
372**需要权限**:ohos.permission.INTERNET
373
374**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
375
376**系统能力**:SystemCapability.Communication.NetStack
377
378**参数:**
379
380| 参数名   | 类型                     | 必填 | 说明       |
381| -------- | ------------------------ | ---- | ---------- |
382| callback | AsyncCallback\<boolean\> | 是   | 回调函数。true:关闭请求创建成功;false:关闭请求创建失败。 |
383
384**错误码:**
385
386以下错误码的详细介绍参见[通用错误码](../errorcode-universal.md)。
387
388| 错误码ID | 错误信息                 |
389| ------- | ----------------------- |
390| 401     | Parameter error.        |
391| 201     | Permission denied.      |
392
393**示例:**
394
395```ts
396import { webSocket } from '@kit.NetworkKit';
397import { BusinessError } from '@kit.BasicServicesKit';
398
399let ws = webSocket.createWebSocket();
400ws.close((err: BusinessError) => {
401  if (!err) {
402    console.info("close success")
403  } else {
404    console.error(`close fail. Code: ${err.code}, message: ${err.message}`)
405  }
406});
407```
408
409### close<sup>6+</sup>
410
411close(options: WebSocketCloseOptions, callback: AsyncCallback\<boolean\>): void
412
413根据参数options,关闭WebSocket连接,使用callback方式作为异步方法。
414
415**需要权限**:ohos.permission.INTERNET
416
417**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
418
419**系统能力**:SystemCapability.Communication.NetStack
420
421**参数:**
422
423| 参数名   | 类型                     | 必填 | 说明                                                  |
424| -------- | ------------------------ | ---- | ----------------------------------------------------- |
425| options  | WebSocketCloseOptions    | 是   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
426| callback | AsyncCallback\<boolean\> | 是   | 回调函数。true:关闭请求创建成功;false:关闭请求创建失败。                                            |
427
428**错误码:**
429
430以下错误码的详细介绍参见[通用错误码](../errorcode-universal.md)。
431
432| 错误码ID | 错误信息                 |
433| ------- | ----------------------- |
434| 401     | Parameter error.        |
435| 201     | Permission denied.      |
436
437**示例:**
438
439```ts
440import { webSocket } from '@kit.NetworkKit';
441import { BusinessError } from '@kit.BasicServicesKit';
442
443let ws = webSocket.createWebSocket();
444
445let options: webSocket.WebSocketCloseOptions | undefined;
446if (options != undefined) {
447    options.code = 1000
448    options.reason = "your reason"
449}
450ws.close(options, (err: BusinessError) => {
451    if (!err) {
452        console.info("close success")
453    } else {
454        console.error(`close fail. Code: ${err.code}, message: ${err.message}`)
455    }
456});
457```
458
459### close<sup>6+</sup>
460
461close(options?: WebSocketCloseOptions): Promise\<boolean\>
462
463根据可选参数code和reason,关闭WebSocket连接。使用Promise异步回调。
464
465**需要权限**:ohos.permission.INTERNET
466
467**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
468
469**系统能力**:SystemCapability.Communication.NetStack
470
471**参数:**
472
473| 参数名  | 类型                  | 必填 | 说明                                                  |
474| ------- | --------------------- | ---- | ----------------------------------------------------- |
475| options | WebSocketCloseOptions | 否   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
476
477**返回值:**
478
479| 类型               | 说明                              |
480| :----------------- | :-------------------------------- |
481| Promise\<boolean\> | 以Promise形式返回关闭连接的结果。true:关闭请求创建成功;false:关闭请求创建失败。 |
482
483**错误码:**
484
485以下错误码的详细介绍参见[通用错误码](../errorcode-universal.md)。
486
487| 错误码ID | 错误信息                 |
488| ------- | ----------------------- |
489| 401     | Parameter error.        |
490| 201     | Permission denied.      |
491
492**示例:**
493
494```ts
495import { webSocket } from '@kit.NetworkKit';
496
497let ws = webSocket.createWebSocket();
498let options: webSocket.WebSocketCloseOptions | undefined;
499if (options != undefined) {
500    options.code = 1000
501    options.reason = "your reason"
502}
503let promise = ws.close();
504promise.then((value: boolean) => {
505    console.info("close success")
506}).catch((err:string) => {
507    console.error("close fail, error:" + JSON.stringify(err))
508});
509```
510
511### on('open')<sup>6+</sup>
512
513on(type: 'open', callback: AsyncCallback\<Object\>): void
514
515订阅WebSocket的打开事件,使用callback方式作为异步方法。
516
517**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
518
519**系统能力**:SystemCapability.Communication.NetStack
520
521**参数:**
522
523| 参数名   | 类型                    | 必填 | 说明                          |
524| -------- | ----------------------- | ---- | ----------------------------- |
525| type     | string                  | 是   | 订阅的事件类型。'open':WebSocket的打开事件。 |
526| callback | AsyncCallback\<Object\> | 是   | 回调函数。                    |
527
528**示例:**
529
530```ts
531import { webSocket } from '@kit.NetworkKit';
532import { BusinessError, Callback } from '@kit.BasicServicesKit';
533
534let ws= webSocket.createWebSocket();
535class OutValue {
536  status: number = 0
537  message: string = ""
538}
539ws.on('open', (err: BusinessError, value: Object) => {
540  console.info("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message)
541});
542```
543
544### off('open')<sup>6+</sup>
545
546off(type: 'open', callback?: AsyncCallback\<Object\>): void
547
548取消订阅WebSocket的打开事件,使用callback方式作为异步方法。
549
550> **说明:**
551>
552> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
553
554**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
555
556**系统能力**:SystemCapability.Communication.NetStack
557
558**参数:**
559
560| 参数名   | 类型                    | 必填 | 说明                          |
561| -------- | ----------------------- | ---- | ----------------------------- |
562| type     | string                  | 是   | 取消订阅的事件类型。'open':WebSocket的打开事件。 |
563| callback | AsyncCallback\<Object\> | 否   | 回调函数。                    |
564
565**示例:**
566
567```ts
568import { webSocket } from '@kit.NetworkKit';
569import { BusinessError } from '@kit.BasicServicesKit';
570
571let ws = webSocket.createWebSocket();
572class OutValue {
573  status: number = 0
574  message: string = ""
575}
576let callback1 = (err: BusinessError, value: Object) => {
577 console.info("on open, status:" + ((value as OutValue).status + ", message:" + (value as OutValue).message))
578}
579ws.on('open', callback1);
580// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
581ws.off('open', callback1);
582```
583
584### on('message')<sup>6+</sup>
585
586on(type: 'message', callback: AsyncCallback\<string | ArrayBuffer\>): void
587
588订阅WebSocket的接收服务器消息事件,使用callback方式作为异步方法。
589
590> **说明:**
591>
592> AsyncCallback中的数据可以是字符串(API version 6开始支持)或ArrayBuffer(API version 8开始支持)。
593
594**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
595
596**系统能力**:SystemCapability.Communication.NetStack
597
598**参数:**
599
600| 参数名   | 类型                    | 必填 | 说明                                         |
601| -------- | ----------------------- | ---- | -------------------------------------------- |
602| type     | string                  | 是   | 订阅的事件类型。'message':WebSocket的接收服务器消息事件。 |
603| callback | AsyncCallback\<string \| ArrayBuffer <sup>8+</sup>\> | 是   | 回调函数。                                   |
604
605**示例:**
606
607```ts
608import { webSocket } from '@kit.NetworkKit';
609import { BusinessError } from '@kit.BasicServicesKit';
610
611let ws = webSocket.createWebSocket();
612ws.on('message', (err: BusinessError<void>, value: string | ArrayBuffer) => {
613  console.info("on message, message:" + value)
614});
615```
616
617### off('message')<sup>6+</sup>
618
619off(type: 'message', callback?: AsyncCallback\<string | ArrayBuffer\>): void
620
621取消订阅WebSocket的接收服务器消息事件,使用callback方式作为异步方法。
622
623> **说明:**
624>
625> AsyncCallback中的数据可以是字符串(API 6)或ArrayBuffer(API 8)。
626> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
627
628**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
629
630**系统能力**:SystemCapability.Communication.NetStack
631
632**参数:**
633
634| 参数名   | 类型                                                | 必填 | 说明                                         |
635| -------- | --------------------------------------------------- | ---- | -------------------------------------------- |
636| type     | string                                              | 是   | 取消订阅的事件类型。'message':WebSocket的接收到服务器消息事件。 |
637| callback | AsyncCallback\<string \|ArrayBuffer <sup>8+</sup>\> | 否   | 回调函数。                                   |
638
639**示例:**
640
641```ts
642import { webSocket } from '@kit.NetworkKit';
643
644let ws = webSocket.createWebSocket();
645ws.off('message');
646```
647
648### on('close')<sup>6+</sup>
649
650on(type: 'close', callback: AsyncCallback\<CloseResult\>): void
651
652订阅WebSocket的关闭事件,使用callback方式作为异步方法。
653
654**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
655
656**系统能力**:SystemCapability.Communication.NetStack
657
658**参数:**
659
660| 参数名   | 类型                                            | 必填 | 说明                           |
661| -------- | ----------------------------------------------- | ---- | ------------------------------ |
662| type     | string                                          | 是   | 订阅的事件类型。'close':WebSocket的关闭事件。 |
663| callback | AsyncCallback\<CloseResult\> | 是   | 回调函数。<br>close:close错误码,reason:错误码说明 |
664
665**示例:**
666
667```ts
668import { webSocket } from '@kit.NetworkKit';
669import { BusinessError } from '@kit.BasicServicesKit';
670
671let ws = webSocket.createWebSocket();
672ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {
673  console.info("on close, code is " + value.code + ", reason is " + value.reason)
674});
675```
676
677### off('close')<sup>6+</sup>
678
679off(type: 'close', callback?: AsyncCallback\<CloseResult\>): void
680
681取消订阅WebSocket的关闭事件,使用callback方式作为异步方法。
682
683> **说明:**
684>
685> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
686
687**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
688
689**系统能力**:SystemCapability.Communication.NetStack
690
691**参数:**
692
693| 参数名   | 类型                                            | 必填 | 说明                           |
694| -------- | ----------------------------------------------- | ---- | ------------------------------ |
695| type     | string                                          | 是   | 取消订阅的事件类型。'close':WebSocket的关闭事件。 |
696| callback | AsyncCallback\<CloseResult\> | 否   | 回调函数。<br>close:close错误码,reason:错误码说明 |
697
698**示例:**
699
700```ts
701import { webSocket } from '@kit.NetworkKit';
702
703let ws = webSocket.createWebSocket();
704ws.off('close');
705```
706
707### on('error')<sup>6+</sup>
708
709on(type: 'error', callback: ErrorCallback): void
710
711订阅WebSocket的Error事件,使用callback方式作为异步方法。
712
713**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
714
715**系统能力**:SystemCapability.Communication.NetStack
716
717**参数:**
718
719| 参数名   | 类型          | 必填 | 说明                            |
720| -------- | ------------- | ---- | ------------------------------- |
721| type     | string        | 是   | 订阅的事件类型。'error':WebSocket的Error事件。 |
722| callback | ErrorCallback | 是   | 回调函数。 |
723
724**示例:**
725
726```ts
727import { webSocket } from '@kit.NetworkKit';
728import { BusinessError } from '@kit.BasicServicesKit';
729
730let ws = webSocket.createWebSocket();
731ws.on('error', (err: BusinessError) => {
732  console.error(`on error. Code: ${err.code}, message: ${err.message}`)
733});
734```
735
736### off('error')<sup>6+</sup>
737
738off(type: 'error', callback?: ErrorCallback): void
739
740取消订阅WebSocket的Error事件,使用callback方式作为异步方法。
741
742> **说明:**
743>
744> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
745
746**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
747
748**系统能力**:SystemCapability.Communication.NetStack
749
750**参数:**
751
752| 参数名   | 类型          | 必填 | 说明                            |
753| -------- | ------------- | ---- | ------------------------------- |
754| type     | string        | 是   | 取消订阅的事件类型。'error':WebSocket的Error事件。 |
755| callback | ErrorCallback | 否   | 回调函数。                      |
756
757**示例:**
758
759```ts
760import { webSocket } from '@kit.NetworkKit';
761
762let ws = webSocket.createWebSocket();
763ws.off('error');
764```
765
766### on('dataEnd')<sup>11+</sup>
767
768on(type: 'dataEnd', callback: Callback\<void\>): void
769
770订阅WebSocket的数据接收结束事件,使用callback方式作为异步方法。
771
772**系统能力**:SystemCapability.Communication.NetStack
773
774**参数:**
775
776| 参数名   |       类型        | 必填 |                  说明                   |
777| -------- | ---------------- | ---- | --------------------------------------- |
778| type     | string           | 是   | 订阅的事件类型。'dataEnd':WebSocket的数据接收结束事件。 |
779| callback | Callback\<void\> | 是   | 回调函数。                              |
780
781**示例:**
782
783```ts
784import { webSocket } from '@kit.NetworkKit';
785
786let ws = webSocket.createWebSocket();
787ws.on('dataEnd', () => {
788  console.info("on dataEnd")
789});
790```
791
792### off('dataEnd')<sup>11+</sup>
793
794off(type: 'dataEnd', callback?: Callback\<void\>): void
795
796取消订阅WebSocket的数据接收结束事件,使用callback方式作为异步方法。
797
798> **说明:**
799>
800> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
801
802**系统能力**:SystemCapability.Communication.NetStack
803
804**参数:**
805
806| 参数名   |        类型       | 必填 |                说明                    |
807| -------- | ---------------- | ---- | -------------------------------------- |
808| type     | string           | 是   | 取消订阅的事件类型。'dataEnd':WebSocket的数据接收结束事件。|
809| callback | Callback\<void\> | 否   | 回调函数。                             |
810
811**示例:**
812
813```ts
814import { webSocket } from '@kit.NetworkKit';
815
816let ws = webSocket.createWebSocket();
817ws.off('dataEnd');
818```
819
820### on('headerReceive')<sup>12+</sup>
821
822on(type: 'headerReceive', callback: Callback\<ResponseHeaders\>): void
823
824订阅HTTP Response Header事件,使用callback方式作为异步方法。
825
826**系统能力**:SystemCapability.Communication.NetStack
827
828**参数:**
829
830| 参数名   |        类型       | 必填 |                说明                    |
831| -------- | ---------------- | ---- | -------------------------------------- |
832| type     | string           | 是   | 订阅的事件类型。'headerReceive':WebSocket的headerReceive事件。|
833| callback | Callback\<ResponseHeaders\> | 是   | 回调函数,返回订阅事件。                             |
834
835**示例:**
836
837```ts
838import { webSocket } from '@kit.NetworkKit';
839
840let ws = webSocket.createWebSocket();
841ws.on('headerReceive', (data) => {
842  console.info("on headerReceive " + JSON.stringify(data))
843});
844```
845
846### off('headerReceive')<sup>12+</sup>
847
848off(type: 'headerReceive', callback?: Callback\<ResponseHeaders\>): void
849
850取消订阅HTTP Response Header事件,使用callback方式作为异步方法。
851
852> **说明:**
853>
854> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
855
856**系统能力**:SystemCapability.Communication.NetStack
857
858**参数:**
859
860| 参数名   |        类型       | 必填 |                说明                    |
861| -------- | ---------------- | ---- | -------------------------------------- |
862| type     | string           | 是   | 取消订阅的事件类型。'headerReceive':WebSocket的headerReceive事件。|
863| callback | Callback\<ResponseHeaders\> | 否   | 回调函数,返回订阅事件。                           |
864
865**示例:**
866
867```ts
868import { webSocket } from '@kit.NetworkKit';
869
870let ws = webSocket.createWebSocket();
871ws.off('headerReceive');
872```
873
874## webSocket.createWebSocketServer<sup>19+</sup>
875
876createWebSocketServer(): WebSocketServer
877
878创建一个WebSocketServer对象,包括启动服务、发送数据、关闭连接、列出客户端信息、停止服务,订阅/取消订阅webSocket连接的连接事件、接收到客户端消息事件、关闭事件和错误事件。
879
880> **说明:**
881>
882> 目前该接口在TV中可正常调用,在其他设备中无效果,返回nullptr。
883
884**系统能力**: SystemCapability.Communication.NetStack
885
886**返回值:**
887
888| 类型                                | 说明                                                         |
889| :---------------------------------- | :----------------------------------------------------------- |
890| [WebSocketServer](#websocketserver19) | 返回一个WebSocketServer对象,里面包括start、listAllConnections、send、close、stop、on和off方法。 |
891
892**示例:**
893
894```ts
895let ws: webSocket.WebSocketServer = webSocket.createWebSocketServer();
896```
897
898## WebSocketServer<sup>19+</sup>
899
900在调用WebSocketServer方法前,需要先通过[webSocket.createWebSocketServer](#websocketcreatewebsocketserver19)创建一个WebSocketServer。
901
902### start<sup>19+</sup>
903
904start(config: WebSocketServerConfig): Promise\<boolean\>
905
906配置config参数,启动服务端service。使用Promise异步回调。
907
908> **说明:**
909>
910> 可通过监听error事件获得该接口的执行结果,错误码说明参见[webSocket错误码](errorcode-net-webSocket.md)。
911
912**需要权限**: ohos.permission.INTERNET
913
914**系统能力**: SystemCapability.Communication.NetStack
915
916**参数:**
917
918| 参数名  | 类型                    | 必填 | 说明                                                     |
919| ------- | ----------------------- | ---- | ------------------------------------------------------ |
920| config  | [WebSocketServerConfig](#websocketserverconfig19)   | 是   | 启动websocketServer服务器。 |
921
922**返回值:**
923
924| 类型               | 说明                              |
925| :----------------- | :-------------------------------- |
926| Promise\<boolean\> | promise对象。返回true表示服务器启动成功;返回false表示服务启动失败。 |
927
928**错误码:**
929
930以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[webSocket错误码](errorcode-net-webSocket.md)。
931
932| 错误码ID   | 错误信息                                   |
933| -------   | ------------------------------------------ |
934| 201       | Permission denied.                         |
935| 2302002   | Websocket certificate file does not exist. |
936| 2302004   | Can't listen on the given NIC.            |
937| 2302005   | Can't listen on the given Port.           |
938| 2302999   | Websocket other unknown error.             |
939
940**示例:**
941
942```ts
943import { webSocket } from '@kit.NetworkKit';
944import { BusinessError } from '@kit.BasicServicesKit';
945
946let localServer: webSocket.WebSocketServer;
947let config: webSocket.WebSocketServerConfig = {
948  serverPort: 8080, // 监听端口
949  maxConcurrentClientsNumber: 10,
950  maxConnectionsForOneClient: 10,
951}
952
953localServer = webSocket.createWebSocketServer();
954localServer.start(config).then((success: boolean) => {
955  if (success) {
956    console.info('webSocket server start success');
957  } else {
958    console.error('websocket server start failed');
959  }
960}).catch((error: BusinessError) => {
961  console.error(`Failed to start. Code: ${error.code}, message: ${error.message}`);
962});
963```
964
965### send<sup>19+</sup>
966
967send(data: string \| ArrayBuffer, connection: WebSocketConnection): Promise\<boolean\>
968
969通过WebSocket连接发送数据。使用Promise异步回调。
970
971> **说明:**
972>
973> send接口必须在监听到connect事件后才可以调用。
974
975**需要权限**: ohos.permission.INTERNET
976
977**系统能力**: SystemCapability.Communication.NetStack
978
979**参数:**
980
981| 参数名  | 类型                    | 必填 | 说明                                                     |
982| ---------- | ---------------------- | --------------------- | ------------------------------------------------ |
983| data       | string \| ArrayBuffer                       | 是  | 服务端发送消息的数据,同时支持string(字符串)和ArrayBuffer(二进制)类型。 |
984| connection | [WebSocketConnection](#websocketconnection19) | 是  | 发送的客户端信息。                              |
985
986**返回值:**
987
988| 类型               | 说明                              |
989| :----------------- | :-------------------------------- |
990| Promise\<boolean\> | promise对象。返回true表示发送请求创建成功;返回false表示发送请求创建失败。 |
991
992**错误码:**
993
994以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[webSocket错误码](errorcode-net-webSocket.md)。
995
996| 错误码ID | 错误信息                 |
997| ------- | ----------------------- |
998| 201     | Permission denied.      |
999| 2302006 | websocket connection does not exist.        |
1000
1001**示例:**
1002
1003```ts
1004import { webSocket } from '@kit.NetworkKit';
1005import { BusinessError } from '@kit.BasicServicesKit';
1006
1007let localServer: webSocket.WebSocketServer;
1008let config: webSocket.WebSocketServerConfig = {
1009  serverPort: 8080, // 监听端口
1010  maxConcurrentClientsNumber: 10,
1011  maxConnectionsForOneClient: 10,
1012}
1013
1014localServer = webSocket.createWebSocketServer();
1015localServer.start(config).then((success: boolean) => {
1016  if (success) {
1017    console.info('webSocket server start success');
1018  } else {
1019    console.error('websocket server start failed');
1020  }
1021}).catch((error: BusinessError) => {
1022  console.error(`Failed to start. Code: ${error.code}, message: ${error.message}`);
1023});
1024
1025localServer.on('connect', async (connection: webSocket.WebSocketConnection) => {
1026  console.info(`New client connected! Client ip: ${connection.clientIP}, Client port: ${connection.clientPort}`);
1027  // 当收到on('connect')事件时,可以通过send()方法与客户端进行通信
1028  localServer.send("Hello, I'm server!", connection).then((success: boolean) => {
1029    if (success) {
1030      console.info('message send successfully');
1031    } else {
1032      console.error('message send failed');
1033    }
1034  }).catch((error: BusinessError) => {
1035    console.error(`message send failed, Code: ${error.code}, message: ${error.message}`);
1036  });
1037});
1038```
1039
1040### listAllConnections<sup>19+</sup>
1041
1042listAllConnections(): WebSocketConnection[]
1043
1044获取与服务端连接的所有客户端信息。
1045
1046**需要权限**: ohos.permission.INTERNET
1047
1048**系统能力**:SystemCapability.Communication.NetStack
1049
1050**返回值:**
1051| 类型                                        | 说明                         |
1052| ------------------------------------------- | ---------------------------- |
1053| [WebSocketConnection[]](#websocketconnection19) | 以字符串数组形式返回所有客户端的信息。|
1054
1055**错误码:**
1056
1057以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1058
1059| 错误码ID | 错误信息                 |
1060| ------- | ----------------------- |
1061| 201     | Permission denied.      |
1062
1063**示例:**
1064```ts
1065import { webSocket } from '@kit.NetworkKit';
1066import { BusinessError } from '@kit.BasicServicesKit';
1067
1068let connections: webSocket.WebSocketConnection[] = [];
1069let localServer: webSocket.WebSocketServer;
1070let config: webSocket.WebSocketServerConfig = {
1071  serverPort: 8080, // 监听端口
1072  maxConcurrentClientsNumber: 10,
1073  maxConnectionsForOneClient: 10,
1074}
1075
1076localServer = webSocket.createWebSocketServer();
1077localServer.start(config).then((success: boolean) => {
1078  if (success) {
1079    console.info('webSocket server start success');
1080  } else {
1081    console.error('websocket server start failed');
1082  }
1083}).catch((error: BusinessError) => {
1084  console.error(`Failed to start. Code: ${error.code}, message: ${error.message}`);
1085});
1086
1087localServer.on('connect', async (connection: webSocket.WebSocketConnection) => {
1088  console.info(`New client connected! Client ip: ${connection.clientIP}, Client port: ${connection.clientPort}`);
1089  try {
1090    connections = await localServer.listAllConnections();
1091    if (connections.length === 0) {
1092      console.info('client list is empty');
1093    } else {
1094      console.info(`client list cnt: ${connections.length}, client connections list is: ${connections}`);
1095    }
1096  } catch (error) {
1097    console.error(`Failed to listAllConnections. Code: ${error.code}, message: ${error.message}`);
1098  }
1099});
1100```
1101
1102### close<sup>19+</sup>
1103
1104close(connection: WebSocketConnection, options?: webSocket.WebSocketCloseOptions): Promise\<boolean\>
1105
1106关闭指定websocket连接。使用Promise异步回调。
1107
1108**需要权限**:ohos.permission.INTERNET
1109
1110**系统能力**:SystemCapability.Communication.NetStack
1111
1112**参数:**
1113
1114| 参数名  | 类型                    | 必填 | 说明                                                     |
1115| ---------- | --------------------- | ---- | ----------------------------------------------------- |
1116| connection | [WebSocketConnection](#websocketconnection19) | 是  | 客户端信息,包括客户端的ip地址和端口号port。                   |
1117| options    | [webSocket.WebSocketCloseOptions](#websocketcloseoptions) | 否  | 关闭WebSocket连接时,可选参数的类型和说明。<br>- 错误码默认:200。原因值默认:Websocket connect failed。 |
1118
1119**返回值:**
1120
1121| 类型               | 说明                                                                       |
1122| :----------------- | :------------------------------------------------------------------------- |
1123| Promise\<boolean\> | promise对象。返回true表示关闭请求创建成功;返回false表示关闭请求创建失败。      |
1124
1125**错误码:**
1126
1127以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[webSocket错误码](errorcode-net-webSocket.md)。
1128
1129| 错误码ID | 错误信息                 |
1130| ------- | ----------------------- |
1131| 201     | Permission denied.      |
1132| 2302006 | websocket connection does not exist.|
1133
1134**示例:**
1135
1136```ts
1137import { webSocket } from '@kit.NetworkKit';
1138import { BusinessError } from '@kit.BasicServicesKit';
1139
1140let localServer: webSocket.WebSocketServer;
1141let config: webSocket.WebSocketServerConfig = {
1142  serverPort: 8080, // 监听端口
1143  maxConcurrentClientsNumber: 10,
1144  maxConnectionsForOneClient: 10,
1145}
1146
1147localServer = webSocket.createWebSocketServer();
1148localServer.start(config).then((success: boolean) => {
1149  if (success) {
1150    console.info('webSocket server start success');
1151  } else {
1152    console.error('websocket server start failed');
1153  }
1154}).catch((error: BusinessError) => {
1155  console.error(`Failed to start. Code: ${error.code}, message: ${error.message}`);
1156});
1157
1158localServer.on('connect', (connection: webSocket.WebSocketConnection) => {
1159  console.info(`New client connected! Client ip: ${connection.clientIP}, Client port: ${connection.clientPort}`);
1160  localServer.close(connection).then((success: boolean) => {
1161    if (success) {
1162      console.info('close client successfully');
1163    } else {
1164      console.error('close client failed');
1165    }
1166  });
1167});
1168```
1169
1170### stop<sup>19+</sup>
1171
1172stop(): Promise\<boolean\>
1173
1174停止服务端服务。使用Promise异步回调。
1175
1176**需要权限**:ohos.permission.INTERNET
1177
1178**系统能力**:SystemCapability.Communication.NetStack
1179
1180**返回值:**
1181
1182| 类型               | 说明                                                                       |
1183| :----------------- | :------------------------------------------------------------------------- |
1184| Promise\<boolean\> | promise对象。返回true表示停止服务端service请求创建成功;返回false表示停止服务端service请求创建失败。 |
1185
1186**错误码:**
1187
1188以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1189
1190| 错误码ID | 错误信息                 |
1191| ------- | ----------------------- |
1192| 201     | Permission denied.      |
1193
1194**示例:**
1195
1196```ts
1197import { webSocket } from '@kit.NetworkKit';
1198import { BusinessError } from '@kit.BasicServicesKit';
1199
1200let localServer: webSocket.WebSocketServer;
1201let config: webSocket.WebSocketServerConfig = {
1202  serverPort: 8080, // 监听端口
1203  maxConcurrentClientsNumber: 10,
1204  maxConnectionsForOneClient: 10,
1205}
1206
1207localServer = webSocket.createWebSocketServer();
1208localServer.start(config).then((success: boolean) => {
1209  if (success) {
1210    console.info('webSocket server start success');
1211  } else {
1212    console.error('websocket server start failed');
1213  }
1214}).catch((error: BusinessError) => {
1215  console.error(`Failed to start. Code: ${error.code}, message: ${error.message}`);
1216});
1217
1218localServer.stop().then((success: boolean) => {
1219  if (success) {
1220    console.info('server stop service successfully');
1221  } else {
1222    console.error('server stop service failed');
1223  }
1224});
1225```
1226
1227### on('connect')<sup>19+</sup>
1228
1229on(type: 'connect', callback: Callback\<WebSocketConnection\>): void
1230
1231订阅WebSocketServer的连接事件(客户端与服务端建链成功),使用callback方式作为异步方法。
1232
1233**系统能力**:SystemCapability.Communication.NetStack
1234
1235**参数:**
1236
1237| 参数名  | 类型                    | 必填 | 说明                                                     |
1238| -------- | ----------------------- | ---- | ------------------------------------------------------- |
1239| type     | string                  | 是  | 事件回调类型,支持的事件为'connect',当onconnect()调用完成,客户端与服务端建链成功。 |
1240| callback | Callback\<[WebSocketConnection](#websocketconnection19)\> | 是 | 回调函数。连接的客户端信息。|
1241
1242**示例:**
1243
1244```ts
1245import { webSocket } from '@kit.NetworkKit';
1246import { BusinessError, Callback } from '@kit.BasicServicesKit';
1247
1248let localServer = webSocket.createWebSocketServer();
1249localServer.on('connect', (connection: webSocket.WebSocketConnection) => {
1250  console.info(`New client connected! Client ip: ${connection.clientIP}, Client port: ${connection.clientPort}`);
1251});
1252```
1253
1254### off('connect')<sup>19+</sup>
1255
1256off(type: 'connect', callback?: Callback\<WebSocketConnection\>): void
1257
1258取消订阅WebSocketServer的连接事件(客户端与服务端建链成功),使用callback方式作为异步方法。
1259
1260> **说明:**
1261>
1262> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1263
1264**系统能力**:SystemCapability.Communication.NetStack
1265
1266**参数:**
1267
1268| 参数名  | 类型                    | 必填 | 说明                                                     |
1269| -------- | ----------------------- | ---- | ------------------------------------------- |
1270| type     | string                  | 是  | 事件回调类型,支持的事件为'connect',当offconnect()调用完成,取消监听连接事件成功。 |
1271| callback | Callback\<[WebSocketConnection](#websocketconnection19)\> | 否  | 回调函数。连接的客户端信息。 |
1272
1273**示例:**
1274
1275```ts
1276import { webSocket } from '@kit.NetworkKit';
1277import { BusinessError } from '@kit.BasicServicesKit';
1278
1279let localServer = webSocket.createWebSocketServer();
1280localServer.off('connect');
1281```
1282
1283### on('messageReceive')<sup>19+</sup>
1284
1285on(type: 'messageReceive', callback: Callback\<WebSocketMessage\>): void
1286
1287订阅WebSocketServer的接收客户端消息的事件,使用callback方式作为异步方法。
1288
1289**系统能力**:SystemCapability.Communication.NetStack
1290
1291**参数:**
1292
1293| 参数名  | 类型                    | 必填 | 说明                                                     |
1294| -------- | ----------------------- | ---- | -------------------------------- |
1295| type     | string                  | 是  | 事件回调类型,支持的事件为'messageReceive',当onmessageReceive()调用完成,接收到客户端消息成功。 |
1296| callback | Callback\<[WebSocketMessage](#websocketmessage19)\> | 是  | 回调函数。<br>clientconnection:客户端信息,data:客户端发送的数据消息。|
1297
1298**示例:**
1299
1300```ts
1301import { webSocket } from '@kit.NetworkKit';
1302import { BusinessError, Callback } from '@kit.BasicServicesKit';
1303
1304let localServer = webSocket.createWebSocketServer();
1305localServer.on('messageReceive', (message: webSocket.WebSocketMessage) => {
1306  console.info(`on message received, client: ${message.clientConnection}, data: ${message.data}`);
1307});
1308```
1309
1310### off('messageReceive')<sup>19+</sup>
1311
1312off(type: 'messageReceive', callback?: Callback\<WebSocketMessage\>): void
1313
1314取消订阅WebSocketServer的接收到客户端消息事件,使用callback方式作为异步方法。
1315
1316> **说明:**
1317>
1318> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1319
1320**系统能力**:SystemCapability.Communication.NetStack
1321
1322**参数:**
1323
1324| 参数名  | 类型                    | 必填 | 说明                                                     |
1325| -------- | --------------------------------------------------- | ---- | -------------------------------------------- |
1326| type     | string                  | 是  | 事件回调类型,支持的事件为'messageReceive',当offmessageReceive()调用完成,取消订阅接收客户端消息成功。 |
1327| callback | Callback\<[WebSocketMessage](#websocketmessage19)\> |  否 | 从指定客户端接收到的消息,包括客户端的信息和数据。<br>- clientconnection:客户端信息。<br>- data:客户端发送的消息。|
1328
1329**示例:**
1330
1331```ts
1332import { webSocket } from '@kit.NetworkKit';
1333import { BusinessError, Callback } from '@kit.BasicServicesKit';
1334
1335let localServer = webSocket.createWebSocketServer();
1336localServer.off('messageReceive');
1337```
1338
1339### on('close')<sup>19+</sup>
1340
1341on(type: 'close', callback: ClientConnectionCloseCallback): void
1342
1343订阅WebSocketServer的关闭事件,使用callback方式作为异步方法。
1344
1345**系统能力**:SystemCapability.Communication.NetStack
1346
1347**参数:**
1348
1349| 参数名  | 类型                    | 必填 | 说明                                                     |
1350| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
1351| type     | string                                          | 是  | 事件回调类型,支持的事件为'close',当onclose()调用完成,连接关闭成功。 |
1352| callback | [ClientConnectionCloseCallback](#clientconnectionclosecallback19) | 是  | 回调函数。<br>close:close错误码;reason:错误码说明。 |
1353
1354**示例:**
1355
1356```ts
1357import { webSocket } from '@kit.NetworkKit';
1358import { BusinessError } from '@kit.BasicServicesKit';
1359
1360let localServer = webSocket.createWebSocketServer();
1361localServer.on('close', (clientConnection: webSocket.WebSocketConnection, closeReason: webSocket.CloseResult) => {
1362  console.info(`client close, client: ${clientConnection}, closeReason: Code: ${closeReason.code}, reason: ${closeReason.reason}`);
1363});
1364```
1365
1366### off('close')<sup>19+</sup>
1367
1368off(type: 'close', callback?: ClientConnectionCloseCallback): void
1369
1370取消订阅WebSocketServer的关闭事件,使用callback方式作为异步方法。
1371
1372> **说明:**
1373>
1374> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1375
1376**系统能力**:SystemCapability.Communication.NetStack
1377
1378**参数:**
1379
1380| 参数名  | 类型                    | 必填 | 说明                                                     |
1381| -------- | ----------------------------------------------- | ---- | ---------------------------------- |
1382| type     | string                                          | 是  | 事件回调类型,支持的事件为'close',当offclose()调用完成,取消订阅连接关闭事件成功。 |
1383| callback | [ClientConnectionCloseCallback](#clientconnectionclosecallback19) | 否  | 回调函数。<br>close:close错误码;reason:错误码说明。 |
1384
1385**示例:**
1386
1387```ts
1388import { webSocket } from '@kit.NetworkKit';
1389import { BusinessError } from '@kit.BasicServicesKit';
1390
1391let localServer = webSocket.createWebSocketServer();
1392localServer.off('close');
1393```
1394
1395### on('error')<sup>19+</sup>
1396
1397on(type: 'error', callback: ErrorCallback): void
1398
1399订阅WebSocketServer的Error事件,使用callback方式作为异步方法。
1400
1401**系统能力**:SystemCapability.Communication.NetStack
1402
1403**参数:**
1404
1405| 参数名  | 类型                    | 必填 | 说明                                                     |
1406| -------- | ------------- | ---- | ------------------------------------ |
1407| type     | string        | 是  | 事件回调类型,支持的事件为'error',当onerror()调用完成,error事件发生。 |
1408| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 是  | 回调函数。|
1409
1410**示例:**
1411
1412```ts
1413import { webSocket } from '@kit.NetworkKit';
1414import { BusinessError } from '@kit.BasicServicesKit';
1415
1416let wsServer: webSocket.WebSocketServer = webSocket.createWebSocketServer();
1417wsServer.on('error', (err: BusinessError) => {
1418  console.error(`error. Code: ${err.code}, message: ${err.message}`);
1419});
1420```
1421
1422### off('error')<sup>19+</sup>
1423
1424off(type: 'error', callback?: ErrorCallback): void
1425
1426取消订阅WebSocketServer的Error事件,使用callback方式作为异步方法。
1427
1428> **说明:**
1429>
1430> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1431
1432**系统能力**:SystemCapability.Communication.NetStack
1433
1434**参数:**
1435
1436| 参数名  | 类型                    | 必填 | 说明                           |
1437| -------- | ------------- | ---- | --------------------------------- |
1438| type     | string        | 是 |  事件回调类型,支持的事件为'error',当offerror()调用完成,取消订阅error事件成功。 |
1439| callback | [ErrorCallback](../apis-basic-services-kit/js-apis-base.md#errorcallback) | 否 | 回调函数。默认值:200。                         |
1440
1441**示例:**
1442
1443```ts
1444import { webSocket } from '@kit.NetworkKit';
1445import { BusinessError } from '@kit.BasicServicesKit';
1446
1447let localServer = webSocket.createWebSocketServer();
1448localServer.off('error');
1449```
1450
1451## WebSocketRequestOptions
1452
1453建立WebSocket连接时,可选参数的类型和说明。
1454
1455**系统能力**:SystemCapability.Communication.NetStack
1456
1457| 名称 | 类型 |  只读  | 可选 | 说明                                                         |
1458| ------ | ------ |------ | ---- | ------------------------------------------------------------ |
1459| header | Object |  否  |  是   | 建立WebSocket连接可选参数,代表建立连接时携带的HTTP头信息。参数内容自定义,也可以不指定。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
1460| caPath<sup>11+</sup> | string |  否  |  是  | 如果设置了此参数,系统将使用用户指定路径的CA证书,(开发者需保证该路径下CA证书的可访问性),否则将使用系统预设CA证书,系统预设CA证书位置:/etc/ssl/certs/cacert.pem。证书路径为沙箱映射路径(开发者可通过UIAbilityContext提供的能力获取应用沙箱路径)。目前仅支持格式为pem的文本证书。 |
1461| clientCert<sup>11+</sup> | [ClientCert](#clientcert11) |   否  |  是   | 支持传输客户端证书。 |
1462| proxy<sup>12+</sup> | ProxyConfiguration |  否  | 是 | 通信过程中的代理信息,默认使用系统网络代理。 |
1463| protocol<sup>12+</sup> | string |  否  | 是 | 自定义Sec-WebSocket-Protocol字段,默认为""。              |
1464| skipServerCertVerification<sup>20+</sup> | boolean | 否 | 是 | 是否跳过服务器证书验证。true表示跳过服务器证书验证,false表示不跳过服务器证书验证。默认为false。 |
1465| pingInterval<sup>21+</sup> | int | 否 | 是 | 自定义[心跳检测](../../network/websocket-connection.md#场景介绍)时间,默认为30s。每pingInterval周期会发起心跳检测,设置为0则表示关闭心跳检测。最大值:30000s,最小值:0s。<br>**ArkTS版本:** 该接口仅适用于ArkTS1.2。 |
1466| pongTimeout<sup>21+</sup> | int | 否 | 是 | 自定义发起心跳检测后,超时断开时间,默认为30s。发起心跳检测后若pongTimeout时间未响应则断开连接。最大值:30000s,最小值:0s。pongTimeout须小于等于pingInterval。<br>**ArkTS版本:** 该接口仅适用于ArkTS1.2。|
1467
1468## ClientCert<sup>11+</sup>
1469
1470客户端证书类型。
1471
1472**系统能力**:SystemCapability.Communication.NetStack
1473
1474| 名称 | 类型   | 必填 | 说明                |
1475| ------ | ------ | ---- |-------------------|
1476| certPath   | string  | 是   | 证书路径。             |
1477| keyPath | string | 是   | 证书密钥的路径。          |
1478| keyPassword | string | 否   | 证书密钥的密码。缺省为空字符串。 |
1479
1480## ProxyConfiguration<sup>12+</sup>
1481type ProxyConfiguration = 'system' | 'no-proxy' | HttpProxy
1482
1483网络代理配置信息
1484
1485**系统能力**:SystemCapability.Communication.NetStack
1486
1487|  类型   | 说明                      |
1488| ------  |------------------------- |
1489| 'system'   |  使用系统默认网络代理。 |
1490| 'no-proxy' |  不使用网络代理。 |
1491| [HttpProxy](js-apis-net-connection.md#httpproxy10)  | 使用指定的网络代理。 |
1492
1493## WebSocketCloseOptions
1494
1495关闭WebSocket连接时,可选参数的类型和说明。
1496
1497**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1498
1499**系统能力**:SystemCapability.Communication.NetStack
1500
1501| 名称 | 类型   | 必填 | 说明                                                         |
1502| ------ | ------ | ---- | ------------------------------------------------------------ |
1503| code   | number | 否   | 错误码,关闭WebSocket连接时的可选参数,可根据实际情况来填。传入值需为正整数,默认值为1000。 |
1504| reason | string | 否   | 原因值,关闭WebSocket连接时的可选参数,可根据实际情况来填。默认值为空字符串("")。 |
1505
1506## CloseResult<sup>10+</sup>
1507
1508关闭WebSocket连接时,订阅close事件得到的关闭结果。
1509
1510**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1511
1512**系统能力**:SystemCapability.Communication.NetStack
1513
1514| 名称 | 类型   | 必填 | 说明                                                         |
1515| ------ | ------ | ---- | ------------------------------------------------------------ |
1516| code   | number | 是   | 错误码,订阅close事件得到的关闭连接的错误码。 |
1517| reason | string | 是   | 原因值,订阅close事件得到的关闭连接的错误原因。 |
1518
1519## ResponseHeaders<sup>12+</sup>
1520type ResponseHeaders = {
1521  [k: string]: string | string[] | undefined;
1522}
1523
1524服务器发送的响应头。
1525
1526**系统能力**:SystemCapability.Communication.NetStack
1527
1528| 类型   | 说明                                                         |
1529| ------ | ------------------------------------------------------------ |
1530| [k:string]:string \| string[] \| undefined | header数据类型为键值对、字符串或者undefined。 |
1531
1532## close错误码说明
1533
1534发送给服务端的错误码可以自行定义,下面的列表仅供参考。
1535
1536**系统能力**:SystemCapability.Communication.NetStack
1537
1538| 值        | 说明               |
1539| :-------- | :----------------- |
1540| 1000      | 正常关闭。           |
1541| 1001      | 服务器主动关闭。     |
1542| 1002      | 协议错误。           |
1543| 1003      | 无法处理的数据类型。 |
1544| 1004~1015 | 保留值。             |
1545
1546## HttpProxy<sup>12+</sup>
1547
1548type HttpProxy = connection.HttpProxy
1549
1550网络全局代理配置信息。
1551
1552**系统能力**:SystemCapability.Communication.NetManager.Core
1553
1554|       类型       |            说明             |
1555| ---------------- | --------------------------- |
1556| connection.HttpProxy | 使用指定的网络代理。    |
1557
1558## WebSocketServerConfig<sup>19+</sup>
1559
1560启动服务端的service时,需要输入的配置信息和说明。
1561
1562**系统能力**:SystemCapability.Communication.NetStack
1563
1564| 名称 | 类型   | 只读 | 可选 | 说明                                                         |
1565| ---------- | ------ | ---- | ---- | ----------------------------------------------------- |
1566| serverIP   | string | 否   | 是   |  服务端监听特定ip地址,默认是"0.0.0.0"。 |
1567| serverPort | number | 否   | 否   | 服务端监听的端口号。                   |
1568| serverCert | [ServerCert](#servercert19) | 否  | 是   | 指定服务端证书的信息,包括服务端证书文件路径和服务端证书的私钥文件路径。 |
1569| protocol   | string | 否   | 是   | 自定义协议。 |
1570| maxConcurrentClientsNumber | number | 否 | 否   | 最大并发客户端数量,当到达最大数时,服务端拒绝新连接。默认最大数量为10。 |
1571| maxConnectionsForOneClient | number | 否 | 否   | 单个客户端的最大连接数。默认最大数量为10。 |
1572
1573## ServerCert<sup>19+</sup>
1574
1575指定服务端证书的信息,包括服务端证书文件路径和服务端证书的私钥文件路径。
1576
1577**系统能力**:SystemCapability.Communication.NetStack
1578
1579| 名称 | 类型   | 只读 | 可选 | 说明                            |
1580| ------ | ------ | ---- | --- | ----------------------- |
1581| certPath   | string |  否    | 否   | 服务端证书文件路径。      |
1582| keyPath    | string |  否    | 否   | 服务端证书的私钥文件路径。|
1583
1584## WebSocketMessage<sup>19+</sup>
1585
1586从指定客户端接收到的消息,包括客户端的信息和数据。
1587
1588**系统能力**:SystemCapability.Communication.NetStack
1589
1590| 名称 | 类型   | 只读 | 可选 | 说明                                      |
1591| ------ | ------ | ---- | ---- | ------------------------------------------------------- |
1592| data   | string \|ArrayBuffer  | 否  | 否   | 接收到的客户端发的消息数据。 |
1593| clientConnection | [WebSocketConnection](#websocketconnection19) | 否  | 否   | 客户端信息,包括客户端的ip地址和端口号port。|
1594
1595## WebSocketConnection<sup>19+</sup>
1596
1597客户端信息,包括客户端的ip地址和端口号port。
1598
1599**系统能力**:SystemCapability.Communication.NetStack
1600
1601| 名称 | 类型   | 只读 | 可选 | 说明                            |
1602| ------ | ------ | ---- | --- |------------------ |
1603| clientIP   | string | 否   | 否   | 客户端的ip地址。     |
1604| clientPort | number | 否   | 否   | 客户端的端口号port。 |
1605
1606## ClientConnectionCloseCallback<sup>19+</sup>
1607
1608type ClientConnectionCloseCallback = (clientConnection: WebSocketConnection, closeReason: CloseResult) => void
1609
1610关闭WebSocketServer连接时,订阅close事件得到的指定客户端的关闭结果。
1611
1612**系统能力**:SystemCapability.Communication.NetStack
1613
1614**参数:**
1615| 参数名 | 类型    | 必填 | 说明                            |
1616| ---------------- | -------------------  | ------ | --------------------------------------------- |
1617| clientConnection | [WebSocketConnection](#websocketconnection19) | 是 | 客户端信息,包括客户端的ip地址和端口号port。             |
1618| closeReason | [CloseResult](#closeresult10)  | 是 | 关闭WebSocket连接时,订阅close事件得到的关闭结果。 |