• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# # @ohos.net.webSocket (WebSocket Connection)
2
3> **NOTE**
4>
5> The initial APIs of this module are supported since API version 6. Newly added APIs will be marked with a superscript to indicate their earliest API version.
6
7
8You can use WebSocket to establish a bidirectional connection between a server and a client. Before doing this, you need to use the [createWebSocket](#websocketcreatewebsocket6) API to create a [WebSocket](#websocket6) object and then use the [connect](#connect6) API to connect to the server.
9If the connection is successful, the client will receive a callback of the [open](#onopen6) event. Then, the client can communicate with the server using the [send](#send6) API.
10When the server sends a message to the client, the client will receive a callback of the [message](#onmessage6) event. If the client no longer needs this connection, it can call the [close](#close6) API to disconnect from the server. Then, the client will receive a callback of the [close](#onclose6) event.
11
12If an error occurs in any of the preceding processes, the client will receive a callback of the [error](#onerror6) event.
13
14## Modules to Import
15
16```ts
17import { webSocket } from '@kit.NetworkKit';
18```
19
20## Examples
21
22```ts
23import { webSocket } from '@kit.NetworkKit';
24import { BusinessError } from '@kit.BasicServicesKit';
25
26let defaultIpAddress = "ws://";
27let ws = webSocket.createWebSocket();
28ws.on('open', (err:BusinessError, value: Object) => {
29  if (err != undefined) {
30    console.log(JSON.stringify(err));
31    return;
32  }
33  // When receiving the on('open') event, the client can use the send() API to communicate with the server.
34  ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
35    if (!err) {
36      console.log("send success");
37    } else {
38      console.log("send fail, err:" + JSON.stringify(err));
39    }
40  });
41});
42ws.on('message',(error: BusinessError, value: string | ArrayBuffer) => {
43  console.log("on message, message:" + value);
44  // When receiving the `bye` message (the actual message name may differ) from the server, the client proactively disconnects from the server.
45  if (value === 'bye') {
46    ws.close((err: BusinessError, value: boolean) => {
47      if (!err) {
48        console.log("close success");
49      } else {
50        console.log("close fail, err is " + JSON.stringify(err));
51      }
52    });
53  }
54});
55ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {
56  console.log("on close, code is " + value.code + ", reason is " + value.reason);
57});
58ws.on('error', (err: BusinessError) => {
59  console.log("on error, error:" + JSON.stringify(err));
60});
61ws.connect(defaultIpAddress, {
62  header:{
63      name1: 'value1',
64      name2: 'value2',
65      name3: 'value3'
66  },
67  proxy: {
68      host: '192.168.0.150',
69      port: 8888,
70      exclusionList: []
71  },
72  protocol: 'my-protocol',
73  }, (err: BusinessError, value: boolean) => {
74  if (!err) {
75    console.log("connect success");
76  } else {
77    console.log("connect fail, err:" + JSON.stringify(err));
78  }
79  ws.close((err: BusinessError) => {
80    if (!err) {
81      console.log("close success");
82    } else {
83      console.log("close fail, err is " + JSON.stringify(err));
84    }
85  });
86});
87```
88
89## webSocket.createWebSocket<sup>6+</sup>
90
91createWebSocket(): WebSocket
92
93Creates a WebSocket connection. You can use this API to create or close a WebSocket connection, send data over it, or enable or disable listening for the **open**, **close**, **message**, and **error** events.
94
95**Atomic service API**: This API can be used in atomic services since API version 11.
96
97**System capability**: SystemCapability.Communication.NetStack
98
99**Return value**
100
101| Type                               | Description                                                        |
102| :---------------------------------- | :----------------------------------------------------------- |
103| [WebSocket](#websocket6) | A **WebSocket** object, which contains the **connect**, **send**, **close**, **on**, or **off** method.|
104
105**Example**
106
107```ts
108let ws: webSocket.WebSocket = webSocket.createWebSocket();
109```
110
111## WebSocket<sup>6+</sup>
112
113Defines a **WebSocket** object. Before invoking WebSocket APIs, you need to call [webSocket.createWebSocket](#websocketcreatewebsocket6) to create a **WebSocket** object.
114
115### connect<sup>6+</sup>
116
117connect(url: string, callback: AsyncCallback\<boolean\>): void
118
119Initiates a WebSocket request to establish a WebSocket connection to a given URL. This API uses an asynchronous callback to return the result.
120
121> **NOTE**
122> You can listen to **error** events to obtain the operation result. If an error occurs, the error code 200 will be returned.
123
124**Required permissions**: ohos.permission.INTERNET
125
126**Atomic service API**: This API can be used in atomic services since API version 11.
127
128**System capability**: SystemCapability.Communication.NetStack
129
130**Note**: The URL cannot contain more than 1024 characters. Otherwise, the connection fails. Since API version 15, the maximum length of URLs is changed from 1024 characters to 2048 characters.
131
132**Parameters**
133
134| Name  | Type                    | Mandatory| Description                        |
135| -------- | ------------------------ | ---- | ---------------------------- |
136| url      | string                   | Yes  | URL for establishing a WebSocket connection.|
137| callback | AsyncCallback\<boolean\> | Yes  | Callback used to return the result.                  |
138
139**Error codes**
140
141| ID             | Error Message                                  |
142| --------------------- | ------------------------------------------ |
143| 401                   | Parameter error.                           |
144| 201                   | Permission denied.                         |
145| 2302001<sup>12+</sup> | Websocket url error.                       |
146| 2302002<sup>12+</sup> | Websocket certificate file does not exist. |
147| 2302003<sup>12+</sup> | Websocket connection already exists.       |
148| 2302998<sup>12+</sup> | It is not allowed to access this domain.   |
149| 2302999<sup>10+</sup> | Websocket other unknown error.             |
150
151> **NOTE**
152> For details about the error codes, see [webSocket Error Codes](errorcode-net-http.md).
153
154**Example**
155
156```ts
157import { webSocket } from '@kit.NetworkKit';
158import { BusinessError } from '@kit.BasicServicesKit';
159
160let ws = webSocket.createWebSocket();
161let url = "ws://";
162ws.connect(url, (err: BusinessError, value: boolean) => {
163  if (!err) {
164    console.log("connect success");
165  } else {
166    console.log("connect fail, err:" + JSON.stringify(err));
167  }
168});
169```
170
171### connect<sup>6+</sup>
172
173connect(url: string, options: WebSocketRequestOptions, callback: AsyncCallback\<boolean\>): void
174
175Initiates a WebSocket request carrying specified options to establish a WebSocket connection to a given URL. This API uses an asynchronous callback to return the result.
176
177> **NOTE**
178> You can listen to **error** events to obtain the operation result. If an error occurs, the error code 200 will be returned.
179
180**Required permissions**: ohos.permission.INTERNET
181
182**Atomic service API**: This API can be used in atomic services since API version 11.
183
184**System capability**: SystemCapability.Communication.NetStack
185
186**Note**: The URL cannot contain more than 1024 characters. Otherwise, the connection fails.
187
188**Parameters**
189
190| Name  | Type                    | Mandatory| Description                                                   |
191| -------- | ------------------------ | ---- | ------------------------------------------------------- |
192| url      | string                   | Yes  | URL for establishing a WebSocket connection.                           |
193| options  | WebSocketRequestOptions  | Yes  | Request options. For details, see [WebSocketRequestOptions](#websocketrequestoptions).|
194| callback | AsyncCallback\<boolean\> | Yes  | Callback used to return the result.                                             |
195
196**Error codes**
197
198| ID             | Error Message                                  |
199| --------------------- | ------------------------------------------ |
200| 401                   | Parameter error.                           |
201| 201                   | Permission denied.                         |
202| 2302001<sup>12+</sup> | Websocket url error.                       |
203| 2302002<sup>12+</sup> | Websocket certificate file does not exist. |
204| 2302003<sup>12+</sup> | Websocket connection already exists.       |
205| 2302998<sup>12+</sup> | It is not allowed to access this domain.   |
206| 2302999<sup>10+</sup> | Websocket other unknown error.             |
207
208> **NOTE**
209> For details about the error codes, see [webSocket Error Codes](errorcode-net-http.md).
210
211**Example**
212
213```ts
214import { webSocket } from '@kit.NetworkKit';
215import { BusinessError } from '@kit.BasicServicesKit';
216
217let ws = webSocket.createWebSocket();
218let options: webSocket.WebSocketRequestOptions | undefined;
219if (options !=undefined) {
220  options.header = {
221     name1: "value1",
222     name2: "value2",
223     name3: "value3"
224  };
225  options.caPath = "";
226}
227let url = "ws://"
228ws.connect(url, options, (err: BusinessError, value: Object) => {
229  if (!err) {
230    console.log("connect success");
231  } else {
232    console.log("connect fail, err:" + JSON.stringify(err))
233  }
234});
235```
236
237### connect<sup>6+</sup>
238
239connect(url: string, options?: WebSocketRequestOptions): Promise\<boolean\>
240
241Initiates a WebSocket request carrying specified options to establish a WebSocket connection to a given URL. This API uses a promise to return the result.
242
243> **NOTE**
244> You can listen to **error** events to obtain the operation result. If an error occurs, the error code 200 will be returned.
245
246**Required permissions**: ohos.permission.INTERNET
247
248**Atomic service API**: This API can be used in atomic services since API version 11.
249
250**System capability**: SystemCapability.Communication.NetStack
251
252**Note**: The URL cannot contain more than 1024 characters. Otherwise, the connection fails.
253
254**Parameters**
255
256| Name | Type                   | Mandatory| Description                                                   |
257| ------- | ----------------------- | ---- | ------------------------------------------------------- |
258| url     | string                  | Yes  | URL for establishing a WebSocket connection.                           |
259| options | WebSocketRequestOptions | No  | Request options. For details, see [WebSocketRequestOptions](#websocketrequestoptions).|
260
261**Return value**
262
263| Type              | Description                             |
264| :----------------- | :-------------------------------- |
265| Promise\<boolean\> | Promise used to return the result.|
266
267**Error codes**
268
269| ID             | Error Message                                  |
270| --------------------- | ------------------------------------------ |
271| 401                   | Parameter error.                           |
272| 201                   | Permission denied.                         |
273| 2302001<sup>12+</sup> | Websocket url error.                       |
274| 2302002<sup>12+</sup> | Websocket certificate file does not exist. |
275| 2302003<sup>12+</sup> | Websocket connection already exists.       |
276| 2302998<sup>12+</sup> | It is not allowed to access this domain.   |
277| 2302999<sup>10+</sup> | Websocket other unknown error.             |
278
279> **NOTE**
280> For details about the error codes, see [webSocket Error Codes](errorcode-net-http.md).
281
282**Example**
283
284```ts
285import { webSocket } from '@kit.NetworkKit';
286
287let ws = webSocket.createWebSocket();
288let url = "ws://"
289let promise = ws.connect(url);
290promise.then((value: boolean) => {
291  console.log("connect success")
292}).catch((err:string) => {
293  console.log("connect fail, error:" + JSON.stringify(err))
294});
295```
296
297### send<sup>6+</sup>
298
299send(data: string | ArrayBuffer, callback: AsyncCallback\<boolean\>): void
300
301Sends data through a WebSocket connection. This API uses an asynchronous callback to return the result.
302
303**Required permissions**: ohos.permission.INTERNET
304
305**Atomic service API**: This API can be used in atomic services since API version 11.
306
307**System capability**: SystemCapability.Communication.NetStack
308
309**Parameters**
310
311| Name  | Type                    | Mandatory| Description        |
312| -------- | ------------------------ | ---- | ------------ |
313| data     | string \| ArrayBuffer | Yes  | Data to send.<br>Only the string type is supported for API version 6 or earlier. Both the string and ArrayBuffer types are supported for API version 8 or later.|
314| callback | AsyncCallback\<boolean\> | Yes  | Callback used to return the result.  |
315
316**Error codes**
317
318| ID| Error Message                |
319| ------- | ----------------------- |
320| 401     | Parameter error.        |
321| 201     | Permission denied.      |
322
323**Example**
324
325```ts
326import { webSocket } from '@kit.NetworkKit';
327import { BusinessError } from '@kit.BasicServicesKit';
328
329let ws = webSocket.createWebSocket();
330let url = "ws://"
331class OutValue {
332  status: number = 0
333  message: string = ""
334}
335ws.connect(url, (err: BusinessError, value: boolean) => {
336    if (!err) {
337      console.log("connect success");
338    } else {
339      console.log("connect fail, err:" + JSON.stringify(err))
340    }
341});
342ws.on('open', (err: BusinessError, value: Object) => {
343  console.log("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message);
344    ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
345    if (!err) {
346      console.log("send success");
347    } else {
348      console.log("send fail, err:" + JSON.stringify(err))
349    }
350  });
351});
352```
353
354> **Description**
355>
356> The **send** API can be called only after an **open** event is listened.
357
358### send<sup>6+</sup>
359
360send(data: string | ArrayBuffer): Promise\<boolean\>
361
362Sends data through a WebSocket connection. This API uses a promise to return the result.
363
364**Required permissions**: ohos.permission.INTERNET
365
366**Atomic service API**: This API can be used in atomic services since API version 11.
367
368**System capability**: SystemCapability.Communication.NetStack
369
370**Parameters**
371
372| Name| Type  | Mandatory| Description        |
373| ------ | ------ | ---- | ------------ |
374| data     | string \| ArrayBuffer | Yes  | Data to send.<br>Only the string type is supported for API version 6 or earlier. Both the string and ArrayBuffer types are supported for API version 8 or later.|
375
376**Return value**
377
378| Type              | Description                             |
379| :----------------- | :-------------------------------- |
380| Promise\<boolean\> | Promise used to return the result.|
381
382**Error codes**
383
384| ID| Error Message                |
385| ------- | ----------------------- |
386| 401     | Parameter error.        |
387| 201     | Permission denied.      |
388
389**Example**
390
391```ts
392import { webSocket } from '@kit.NetworkKit';
393import { BusinessError } from '@kit.BasicServicesKit';
394
395let ws = webSocket.createWebSocket();
396let url = "ws://"
397class OutValue {
398  status: number = 0
399  message: string = ""
400}
401ws.connect(url, (err: BusinessError, value: boolean) => {
402    if (!err) {
403      console.log("connect success");
404    } else {
405      console.log("connect fail, err:" + JSON.stringify(err))
406    }
407});
408
409ws.on('open', (err: BusinessError, value: Object) => {
410  console.log("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message);
411  let promise = ws.send("Hello, server!");
412  promise.then((value: boolean) => {
413    console.log("send success")
414  }).catch((err:string) => {
415    console.log("send fail, error:" + JSON.stringify(err))
416  });
417});
418```
419
420> **Description**
421>
422> The **send** API can be called only after an **open** event is listened.
423
424### close<sup>6+</sup>
425
426close(callback: AsyncCallback\<boolean\>): void
427
428Closes a WebSocket connection. This API uses an asynchronous callback to return the result.
429
430**Required permissions**: ohos.permission.INTERNET
431
432**Atomic service API**: This API can be used in atomic services since API version 11.
433
434**System capability**: SystemCapability.Communication.NetStack
435
436**Parameters**
437
438| Name  | Type                    | Mandatory| Description      |
439| -------- | ------------------------ | ---- | ---------- |
440| callback | AsyncCallback\<boolean\> | Yes  | Callback used to return the result.|
441
442**Error codes**
443
444| ID| Error Message                |
445| ------- | ----------------------- |
446| 401     | Parameter error.        |
447| 201     | Permission denied.      |
448
449**Example**
450
451```ts
452import { webSocket } from '@kit.NetworkKit';
453import { BusinessError } from '@kit.BasicServicesKit';
454
455let ws = webSocket.createWebSocket();
456ws.close((err: BusinessError) => {
457  if (!err) {
458    console.log("close success")
459  } else {
460    console.log("close fail, err is " + JSON.stringify(err))
461  }
462});
463```
464
465### close<sup>6+</sup>
466
467close(options: WebSocketCloseOptions, callback: AsyncCallback\<boolean\>): void
468
469Closes a WebSocket connection carrying specified options such as **code** and **reason**. This API uses an asynchronous callback to return the result.
470
471**Required permissions**: ohos.permission.INTERNET
472
473**Atomic service API**: This API can be used in atomic services since API version 11.
474
475**System capability**: SystemCapability.Communication.NetStack
476
477**Parameters**
478
479| Name  | Type                    | Mandatory| Description                                                 |
480| -------- | ------------------------ | ---- | ----------------------------------------------------- |
481| options  | WebSocketCloseOptions    | Yes  | Request options. For details, see [WebSocketCloseOptions](#websocketcloseoptions).|
482| callback | AsyncCallback\<boolean\> | Yes  | Callback used to return the result.                                           |
483
484**Error codes**
485
486| ID| Error Message                |
487| ------- | ----------------------- |
488| 401     | Parameter error.        |
489| 201     | Permission denied.      |
490
491**Example**
492
493```ts
494import { webSocket } from '@kit.NetworkKit';
495import { BusinessError } from '@kit.BasicServicesKit';
496
497let ws = webSocket.createWebSocket();
498
499let options: webSocket.WebSocketCloseOptions | undefined;
500if (options != undefined) {
501    options.code = 1000
502    options.reason = "your reason"
503}
504ws.close(options, (err: BusinessError) => {
505    if (!err) {
506        console.log("close success")
507    } else {
508        console.log("close fail, err is " + JSON.stringify(err))
509    }
510});
511```
512
513### close<sup>6+</sup>
514
515close(options?: WebSocketCloseOptions): Promise\<boolean\>
516
517Closes a WebSocket connection carrying specified options such as **code** and **reason**. This API uses a promise to return the result.
518
519**Required permissions**: ohos.permission.INTERNET
520
521**Atomic service API**: This API can be used in atomic services since API version 11.
522
523**System capability**: SystemCapability.Communication.NetStack
524
525**Parameters**
526
527| Name | Type                 | Mandatory| Description                                                 |
528| ------- | --------------------- | ---- | ----------------------------------------------------- |
529| options | WebSocketCloseOptions | No  | Request options. For details, see [WebSocketCloseOptions](#websocketcloseoptions).|
530
531**Return value**
532
533| Type              | Description                             |
534| :----------------- | :-------------------------------- |
535| Promise\<boolean\> | Promise used to return the result.|
536
537**Error codes**
538
539| ID| Error Message                |
540| ------- | ----------------------- |
541| 401     | Parameter error.        |
542| 201     | Permission denied.      |
543
544**Example**
545
546```ts
547import { webSocket } from '@kit.NetworkKit';
548
549let ws = webSocket.createWebSocket();
550let options: webSocket.WebSocketCloseOptions | undefined;
551if (options != undefined) {
552    options.code = 1000
553    options.reason = "your reason"
554}
555let promise = ws.close();
556promise.then((value: boolean) => {
557    console.log("close success")
558}).catch((err:string) => {
559    console.log("close fail, err is " + JSON.stringify(err))
560});
561```
562
563### on('open')<sup>6+</sup>
564
565on(type: 'open', callback: AsyncCallback\<Object\>): void
566
567Enables listening for the **open** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
568
569**Atomic service API**: This API can be used in atomic services since API version 11.
570
571**System capability**: SystemCapability.Communication.NetStack
572
573**Parameters**
574
575| Name  | Type                   | Mandatory| Description                         |
576| -------- | ----------------------- | ---- | ----------------------------- |
577| type     | string                  | Yes  | Event type. <br />**open**: event indicating that a WebSocket connection has been opened.|
578| callback | AsyncCallback\<Object\> | Yes  | Callback used to return the result.                   |
579
580**Example**
581
582```ts
583import { webSocket } from '@kit.NetworkKit';
584import { BusinessError, Callback } from '@kit.BasicServicesKit';
585
586let ws= webSocket.createWebSocket();
587class OutValue {
588  status: number = 0
589  message: string = ""
590}
591ws.on('open', (err: BusinessError, value: Object) => {
592  console.log("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message);
593});
594```
595
596### off('open')<sup>6+</sup>
597
598off(type: 'open', callback?: AsyncCallback\<Object\>): void
599
600Disables listening for the **open** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
601
602> **NOTE**
603> You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events.
604
605**Atomic service API**: This API can be used in atomic services since API version 11.
606
607**System capability**: SystemCapability.Communication.NetStack
608
609**Parameters**
610
611| Name  | Type                   | Mandatory| Description                         |
612| -------- | ----------------------- | ---- | ----------------------------- |
613| type     | string                  | Yes  | Event type. <br />**open**: event indicating that a WebSocket connection has been opened.|
614| callback | AsyncCallback\<Object\> | No  | Callback used to return the result.                   |
615
616**Example**
617
618```ts
619import { webSocket } from '@kit.NetworkKit';
620import { BusinessError } from '@kit.BasicServicesKit';
621
622let ws = webSocket.createWebSocket();
623class OutValue {
624  status: number = 0
625  message: string = ""
626}
627let callback1 = (err: BusinessError, value: Object) => {
628 console.log("on open, status:" + ((value as OutValue).status + ", message:" + (value as OutValue).message));
629}
630ws.on('open', callback1);
631// You can pass the callback of the on function to cancel listening for a certain type of callback. If you do not pass the callback, you will cancel listening for all callbacks.
632ws.off('open', callback1);
633```
634
635### on('message')<sup>6+</sup>
636
637on(type: 'message', callback: AsyncCallback\<string | ArrayBuffer\>): void
638
639Enables listening for the **message** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
640
641> **NOTE**
642> The data in **AsyncCallback** can be in the format of string (API version 6) or ArrayBuffer (API version 8).
643
644**Atomic service API**: This API can be used in atomic services since API version 11.
645
646**System capability**: SystemCapability.Communication.NetStack
647
648**Parameters**
649
650| Name  | Type                   | Mandatory| Description                                        |
651| -------- | ----------------------- | ---- | -------------------------------------------- |
652| type     | string                  | Yes  | Event type.<br />**message**: event indicating that a message has been received from the server.|
653| callback | AsyncCallback\<string \| ArrayBuffer <sup>8+</sup>\> | Yes  | Callback used to return the result.                                  |
654
655**Example**
656
657```ts
658import { webSocket } from '@kit.NetworkKit';
659import { BusinessError } from '@kit.BasicServicesKit';
660
661let ws = webSocket.createWebSocket();
662ws.on('message', (err: BusinessError<void>, value: string | ArrayBuffer) => {
663  console.log("on message, message:" + value);
664});
665```
666
667### off('message')<sup>6+</sup>
668
669off(type: 'message', callback?: AsyncCallback\<string | ArrayBuffer\>): void
670
671Disables listening for the **message** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
672
673> **NOTE**
674> The data in **AsyncCallback** can be in the format of string (API version 6) or ArrayBuffer (API version 8).
675> You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events.
676
677**Atomic service API**: This API can be used in atomic services since API version 11.
678
679**System capability**: SystemCapability.Communication.NetStack
680
681**Parameters**
682
683| Name  | Type                                               | Mandatory| Description                                        |
684| -------- | --------------------------------------------------- | ---- | -------------------------------------------- |
685| type     | string                                              | Yes  | Event type.<br />**message**: event indicating that a message has been received from the server.|
686| callback | AsyncCallback\<string \|ArrayBuffer <sup>8+</sup>\> | No  | Callback used to return the result.                                  |
687
688**Example**
689
690```ts
691import { webSocket } from '@kit.NetworkKit';
692
693let ws = webSocket.createWebSocket();
694ws.off('message');
695```
696
697### on('close')<sup>6+</sup>
698
699on(type: 'close', callback: AsyncCallback\<CloseResult\>): void
700
701Enables listening for the **close** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
702
703**Atomic service API**: This API can be used in atomic services since API version 11.
704
705**System capability**: SystemCapability.Communication.NetStack
706
707**Parameters**
708
709| Name  | Type                                           | Mandatory| Description                          |
710| -------- | ----------------------------------------------- | ---- | ------------------------------ |
711| type     | string                                          | Yes  | Event type. <br />**close**: event indicating that a WebSocket connection has been closed.|
712| callback | AsyncCallback\<CloseResult\> | Yes  | Callback used to return the result.<br>**close** and **reason** indicate the error code and error cause for closing the connection, respectively.|
713
714**Example**
715
716```ts
717import { webSocket } from '@kit.NetworkKit';
718import { BusinessError } from '@kit.BasicServicesKit';
719
720let ws = webSocket.createWebSocket();
721ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {
722  console.log("on close, code is " + value.code + ", reason is " + value.reason);
723});
724```
725
726### off('close')<sup>6+</sup>
727
728off(type: 'close', callback?: AsyncCallback\<CloseResult\>): void
729
730Disables listening for the **close** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
731
732> **NOTE**
733> You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events.
734
735**Atomic service API**: This API can be used in atomic services since API version 11.
736
737**System capability**: SystemCapability.Communication.NetStack
738
739**Parameters**
740
741| Name  | Type                                           | Mandatory| Description                          |
742| -------- | ----------------------------------------------- | ---- | ------------------------------ |
743| type     | string                                          | Yes  | Event type. <br />**close**: event indicating that a WebSocket connection has been closed.|
744| callback | AsyncCallback\<CloseResult\> | No  | Callback used to return the result.<br>**close** and **reason** indicate the error code and error cause for closing the connection, respectively.|
745
746**Example**
747
748```ts
749import { webSocket } from '@kit.NetworkKit';
750
751let ws = webSocket.createWebSocket();
752ws.off('close');
753```
754
755### on('error')<sup>6+</sup>
756
757on(type: 'error', callback: ErrorCallback): void
758
759Enables listening for the **error** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
760
761**Atomic service API**: This API can be used in atomic services since API version 11.
762
763**System capability**: SystemCapability.Communication.NetStack
764
765**Parameters**
766
767| Name  | Type         | Mandatory| Description                           |
768| -------- | ------------- | ---- | ------------------------------- |
769| type     | string        | Yes  | Event type.<br />**error**: event indicating the WebSocket connection has encountered an error.|
770| callback | ErrorCallback | Yes  | Callback used to return the result.<br>Common error code: 200|
771
772**Example**
773
774```ts
775import { webSocket } from '@kit.NetworkKit';
776import { BusinessError } from '@kit.BasicServicesKit';
777
778let ws = webSocket.createWebSocket();
779ws.on('error', (err: BusinessError) => {
780  console.log("on error, error:" + JSON.stringify(err))
781});
782```
783
784### off('error')<sup>6+</sup>
785
786off(type: 'error', callback?: ErrorCallback): void
787
788Disables listening for the **error** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
789
790> **NOTE**
791> You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events.
792
793**Atomic service API**: This API can be used in atomic services since API version 11.
794
795**System capability**: SystemCapability.Communication.NetStack
796
797**Parameters**
798
799| Name  | Type         | Mandatory| Description                           |
800| -------- | ------------- | ---- | ------------------------------- |
801| type     | string        | Yes  | Event type.<br />**error**: event indicating the WebSocket connection has encountered an error.|
802| callback | ErrorCallback | No  | Callback used to return the result.                     |
803
804**Example**
805
806```ts
807import { webSocket } from '@kit.NetworkKit';
808
809let ws = webSocket.createWebSocket();
810ws.off('error');
811```
812
813### on('dataEnd')<sup>11+</sup>
814
815on(type: 'dataEnd', callback: Callback\<void\>): void
816
817Enables listening for the **dataEnd** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
818
819**System capability**: SystemCapability.Communication.NetStack
820
821**Parameters**
822
823| Name  |       Type       | Mandatory|                  Description                  |
824| -------- | ---------------- | ---- | --------------------------------------- |
825| type     | string           | Yes  | Event type.<br />**dataEnd**: event indicating the data receiving over the WebSocket connection has ended.|
826| callback | Callback\<void\> | Yes  | Callback used to return the result.                             |
827
828**Example**
829
830```ts
831import { webSocket } from '@kit.NetworkKit';
832
833let ws = webSocket.createWebSocket();
834ws.on('dataEnd', () => {
835  console.log("on dataEnd")
836});
837```
838
839### off('dataEnd')<sup>11+</sup>
840
841off(type: 'dataEnd', callback?: Callback\<void\>): void
842
843Disables listening for the **dataEnd** events of a WebSocket connection. This API uses an asynchronous callback to return the result.
844
845> **NOTE**
846> You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events.
847
848**System capability**: SystemCapability.Communication.NetStack
849
850**Parameters**
851
852| Name  |        Type      | Mandatory|                Description                   |
853| -------- | ---------------- | ---- | -------------------------------------- |
854| type     | string           | Yes  | Event type.<br />**dataEnd**: event indicating the data receiving over the WebSocket connection has ended.|
855| callback | Callback\<void\> | No  | Callback used to return the result.                            |
856
857**Example**
858
859```ts
860import { webSocket } from '@kit.NetworkKit';
861
862let ws = webSocket.createWebSocket();
863ws.off('dataEnd');
864```
865
866### on('headerReceive')<sup>12+</sup>
867
868on(type: 'headerReceive', callback: Callback\<ResponseHeaders\>): void
869
870Registers an observer for HTTP Response Header events. This API uses an asynchronous callback to return the result.
871
872**System capability**: SystemCapability.Communication.NetStack
873
874**Parameters**
875
876| Name  |        Type      | Mandatory|                Description                   |
877| -------- | ---------------- | ---- | -------------------------------------- |
878| type     | string           | Yes  | Event type. The value is **headerReceive**.|
879| callback | Callback\<ResponseHeaders\> | Yes  | Callback used to return the result.                            |
880
881**Example**
882
883```ts
884import { webSocket } from '@kit.NetworkKit';
885
886let ws = webSocket.createWebSocket();
887ws.on('headerReceive', (data) => {
888  console.log("on headerReceive " + JSON.stringify(data));
889});
890```
891
892### off('headerReceive')<sup>12+</sup>
893
894off(type: 'headerReceive', callback?: Callback\<ResponseHeaders\>): void
895
896Unregisters the observer for HTTP Response Header events. This API uses an asynchronous callback to return the result.
897
898> **NOTE**
899> You can pass the callback of the **on** function if you want to cancel listening for a certain type of event. If you do not pass the callback, you will cancel listening for all events.
900
901**System capability**: SystemCapability.Communication.NetStack
902
903**Parameters**
904
905| Name  |        Type      | Mandatory|                Description                   |
906| -------- | ---------------- | ---- | -------------------------------------- |
907| type     | string           | Yes  | Event type. The value is **headerReceive**.|
908| callback | Callback\<ResponseHeaders\> | No  | Callback used to return the result.                          |
909
910**Example**
911
912```ts
913import { webSocket } from '@kit.NetworkKit';
914
915let ws = webSocket.createWebSocket();
916ws.off('headerReceive');
917```
918
919## WebSocketRequestOptions
920
921Defines the optional parameters carried in the request for establishing a WebSocket connection.
922
923**System capability**: SystemCapability.Communication.NetStack
924
925| Name| Type|  Read Only | Optional| Description                                                        |
926| ------ | ------ |------ | ---- | ------------------------------------------------------------ |
927| header | Object |  No |  Yes  | Header carrying optional parameters in the request for establishing a WebSocket connection. You can customize the parameter or leave it unspecified.<br>**Atomic service API**: This API can be used in atomic services since API version 11.|
928| caPath<sup>11+</sup> | string |  No |  Yes | Path of CA certificates. If a path is set, the system uses the CA certificates in this path. If a path is not set, the system uses the preset CA certificate, namely, **/etc/ssl/certs/cacert.pem**. This path is the sandbox mapping path, which can be obtained through **Global.getContext().filesDir**. Currently, only text certificates in PEM format are supported.|
929| clientCert<sup>11+</sup> | [ClientCert](#clientcert11) |   No |  Yes  | Client certificate.|
930| proxy<sup>12+</sup> | ProxyConfiguration |  No | Yes| Proxy configuration. By default, the system network proxy is used.|
931| protocol<sup>12+</sup> | string |  No | Yes| Custom **Sec-WebSocket-Protocol** field. The default value is "".             |
932
933## ClientCert<sup>11+</sup>
934
935Defines the client certificate type.
936
937**System capability**: SystemCapability.Communication.NetStack
938
939| Name| Type  | Mandatory| Description                                                        |
940| ------ | ------ | ---- | ------------------------------------------------------------ |
941| certPath   | string  | Yes  | Path of the certificate file.|
942| keyPath | string | Yes  | Path of the certificate key file.|
943| keyPassword | string | No  | Password of the certificate key file.|
944
945## ProxyConfiguration<sup>12+</sup>
946type ProxyConfiguration = 'system' | 'no-proxy' | HttpProxy
947
948Represents the HTTP proxy configuration.
949
950**System capability**: SystemCapability.Communication.NetStack
951
952|  Type  | Description                     |
953| ------  |------------------------- |
954| 'system'   |  The default network proxy is used.|
955| 'no-proxy' |  No network proxy is used.|
956| [HttpProxy](js-apis-net-connection.md#httpproxy10)  | The specified network proxy is used.|
957
958## WebSocketCloseOptions
959
960Defines the optional parameters carried in the request for closing a WebSocket connection.
961
962**Atomic service API**: This API can be used in atomic services since API version 11.
963
964**System capability**: SystemCapability.Communication.NetStack
965
966| Name| Type  | Mandatory| Description                                                        |
967| ------ | ------ | ---- | ------------------------------------------------------------ |
968| code   | number | No  | Error code. Set this parameter based on the actual situation. The default value is **1000**.|
969| reason | string | No  | Error cause. Set this parameter based on the actual situation. The default value is an empty string ("").|
970
971## CloseResult<sup>10+</sup>
972
973Represents the result obtained from the **close** event reported when the WebSocket connection is closed.
974
975**Atomic service API**: This API can be used in atomic services since API version 11.
976
977**System capability**: SystemCapability.Communication.NetStack
978
979| Name| Type  | Mandatory| Description                                                        |
980| ------ | ------ | ---- | ------------------------------------------------------------ |
981| code   | number | Yes  | Error code for closing the connection.|
982| reason | string | Yes  | Error cause for closing the connection.|
983
984## ResponseHeaders<sup>12+</sup>
985type ResponseHeaders = {
986  [k: string]: string | string[] | undefined;
987}
988
989Enumerates the response headers sent by the server.
990
991**System capability**: SystemCapability.Communication.NetStack
992
993| Type  | Description                                                        |
994| ------ | ------------------------------------------------------------ |
995| {[k:string]:string \| string[] \| undefined} | The header data type can be key-value pair, string, or undefined.|
996
997## Result Codes for Connection Closing
998
999You can customize the result codes sent to the server. The result codes in the following table are for reference only.
1000
1001**System capability**: SystemCapability.Communication.NetStack
1002
1003| Value       | Description              |
1004| :-------- | :----------------- |
1005| 1000      | Normally closed.          |
1006| 1001      | Connection closed by the server.    |
1007| 1002      | Incorrect protocol.          |
1008| 1003      | Data unable to be processed.|
1009| 1004~1015 | Reserved.            |
1010
1011## HttpProxy<sup>12+</sup>
1012
1013type HttpProxy = connection.HttpProxy
1014
1015Defines the global HTTP proxy configuration of the network.
1016
1017**System capability**: SystemCapability.Communication.NetStack
1018
1019|       Type      |            Description            |
1020| ---------------- | --------------------------- |
1021| connection.HttpProxy | The specified network proxy is used.   |
1022