• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.net.socket (Socket连接)
2
3本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。
4
5> **说明:**
6>
7> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8
9## 导入模块
10
11```ts
12import socket from '@ohos.net.socket';
13```
14
15## socket.constructUDPSocketInstance
16
17constructUDPSocketInstance(): UDPSocket
18
19创建一个UDPSocket对象。
20
21**系统能力**:SystemCapability.Communication.NetStack
22
23**返回值:**
24
25| 类型                               | 说明                    |
26|  --------------------------------- |  ---------------------- |
27| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 |
28
29**示例:**
30
31```ts
32import socket from '@ohos.net.socket';
33let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
34```
35
36## UDPSocket
37
38UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。
39
40### bind
41
42bind(address: NetAddress, callback: AsyncCallback\<void\>): void
43
44绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。
45
46**需要权限**:ohos.permission.INTERNET
47
48**系统能力**:SystemCapability.Communication.NetStack
49
50**参数:**
51
52| 参数名   | 类型                               | 必填 | 说明                                                   |
53| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
54| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
55| callback | AsyncCallback\<void\>              | 是   | 回调函数。                                             |
56
57**错误码:**
58
59| 错误码ID | 错误信息                 |
60| ------- | ----------------------- |
61| 401     | Parameter error.        |
62| 201     | Permission denied.      |
63
64**示例:**
65
66```ts
67import socket from '@ohos.net.socket';
68import { BusinessError } from '@ohos.base';
69
70let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
71let bindAddr: socket.NetAddress = {
72  address: '192.168.xx.xxx',
73  port: 1234
74}
75udp.bind(bindAddr, (err: BusinessError) => {
76  if (err) {
77    console.log('bind fail');
78    return;
79  }
80  console.log('bind success');
81});
82```
83
84### bind
85
86bind(address: NetAddress): Promise\<void\>
87
88绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。
89
90**需要权限**:ohos.permission.INTERNET
91
92**系统能力**:SystemCapability.Communication.NetStack
93
94**参数:**
95
96| 参数名  | 类型                               | 必填 | 说明                                                   |
97| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
98| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
99
100**错误码:**
101
102| 错误码ID | 错误信息                 |
103| ------- | ----------------------- |
104| 401     | Parameter error.        |
105| 201     | Permission denied.      |
106
107**返回值:**
108
109| 类型            | 说明                                       |
110|  -------------- |  ----------------------------------------- |
111| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 |
112
113**示例:**
114
115```ts
116import socket from '@ohos.net.socket';
117import { BusinessError } from '@ohos.base';
118
119let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
120let bindAddr: socket.NetAddress = {
121  address: '192.168.xx.xxx',
122  port: 8080
123}
124udp.bind(bindAddr).then(() => {
125  console.log('bind success');
126}).catch((err: BusinessError) => {
127  console.log('bind fail');
128});
129```
130
131### send
132
133send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void
134
135通过UDPSocket连接发送数据。使用callback方式作为异步方法。
136
137发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。
138
139**需要权限**:ohos.permission.INTERNET
140
141**系统能力**:SystemCapability.Communication.NetStack
142
143**参数:**
144
145| 参数名   | 类型                                     | 必填 | 说明                                                         |
146| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
147| options  | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
148| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |
149
150**错误码:**
151
152| 错误码ID | 错误信息                 |
153| ------- | ----------------------- |
154| 401     | Parameter error.        |
155| 201     | Permission denied.      |
156
157**示例:**
158
159```ts
160import socket from '@ohos.net.socket';
161import { BusinessError } from '@ohos.base';
162
163let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
164
165let sendOptions: socket.UDPSendOptions = {
166  data: 'Hello, server!',
167  address: {
168    address: '192.168.xx.xxx',
169    port: 8080
170  }
171}
172udp.send(sendOptions, (err: BusinessError) => {
173  if (err) {
174    console.log('send fail');
175    return;
176  }
177  console.log('send success');
178});
179```
180
181### send
182
183send(options: UDPSendOptions): Promise\<void\>
184
185通过UDPSocket连接发送数据。使用Promise方式作为异步方法。
186
187发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。
188
189**需要权限**:ohos.permission.INTERNET
190
191**系统能力**:SystemCapability.Communication.NetStack
192
193**参数:**
194
195| 参数名  | 类型                                     | 必填 | 说明                                                         |
196| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
197| options | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
198
199**错误码:**
200
201| 错误码ID | 错误信息                 |
202| ------- | ----------------------- |
203| 401     | Parameter error.        |
204| 201     | Permission denied.      |
205
206**返回值:**
207
208| 类型            | 说明                                           |
209|  -------------- |  --------------------------------------------- |
210| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 |
211
212**示例:**
213
214```ts
215import socket from '@ohos.net.socket';
216import { BusinessError } from '@ohos.base';
217
218let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
219
220let sendOptions: socket.UDPSendOptions = {
221  data: 'Hello, server!',
222  address: {
223    address: '192.168.xx.xxx',
224    port: 8080
225  }
226}
227udp.send(sendOptions).then(() => {
228  console.log('send success');
229}).catch((err: BusinessError) => {
230  console.log('send fail');
231});
232```
233
234### close
235
236close(callback: AsyncCallback\<void\>): void
237
238关闭UDPSocket连接。使用callback方式作为异步方法。
239
240**需要权限**:ohos.permission.INTERNET
241
242**系统能力**:SystemCapability.Communication.NetStack
243
244**参数:**
245
246| 参数名   | 类型                  | 必填 | 说明       |
247| -------- | --------------------- | ---- | ---------- |
248| callback | AsyncCallback\<void\> | 是   | 回调函数。 |
249
250**示例:**
251
252```ts
253import socket from '@ohos.net.socket';
254import { BusinessError } from '@ohos.base';
255
256let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
257udp.close((err: BusinessError) => {
258  if (err) {
259    console.log('close fail');
260    return;
261  }
262  console.log('close success');
263})
264```
265
266### close
267
268close(): Promise\<void\>
269
270关闭UDPSocket连接。使用Promise方式作为异步方法。
271
272**需要权限**:ohos.permission.INTERNET
273
274**系统能力**:SystemCapability.Communication.NetStack
275
276**返回值:**
277
278| 类型            | 说明                                       |
279|  -------------- |  ----------------------------------------- |
280| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 |
281
282**示例:**
283
284```ts
285import socket from '@ohos.net.socket';
286import { BusinessError } from '@ohos.base';
287
288let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
289udp.close().then(() => {
290  console.log('close success');
291}).catch((err: BusinessError) => {
292  console.log('close fail');
293});
294```
295
296### getState
297
298getState(callback: AsyncCallback\<SocketStateBase\>): void
299
300获取UDPSocket状态。使用callback方式作为异步方法。
301
302> **说明:**
303> bind方法调用成功后,才可调用此方法。
304
305**需要权限**:ohos.permission.INTERNET
306
307**系统能力**:SystemCapability.Communication.NetStack
308
309**参数:**
310
311| 参数名   | 类型                                                   | 必填 | 说明       |
312| -------- | ------------------------------------------------------ | ---- | ---------- |
313| callback | AsyncCallback<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。 |
314
315**错误码:**
316
317| 错误码ID | 错误信息                 |
318| ------- | ----------------------- |
319| 201     | Permission denied.      |
320
321**示例:**
322
323```ts
324import socket from '@ohos.net.socket';
325import { BusinessError } from '@ohos.base';
326
327let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
328let bindAddr: socket.NetAddress = {
329  address: '192.168.xx.xxx',
330  port: 8080
331}
332udp.bind(bindAddr, (err: BusinessError) => {
333  if (err) {
334    console.log('bind fail');
335    return;
336  }
337  console.log('bind success');
338  udp.getState((err: BusinessError, data: socket.SocketStateBase) => {
339    if (err) {
340      console.log('getState fail');
341      return;
342    }
343    console.log('getState success:' + JSON.stringify(data));
344  })
345})
346```
347
348### getState
349
350getState(): Promise\<SocketStateBase\>
351
352获取UDPSocket状态。使用Promise方式作为异步方法。
353
354> **说明:**
355> bind方法调用成功后,才可调用此方法。
356
357**需要权限**:ohos.permission.INTERNET
358
359**系统能力**:SystemCapability.Communication.NetStack
360
361**返回值:**
362
363| 类型                                             | 说明                                       |
364|  ----------------------------------------------- |  ----------------------------------------- |
365| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 |
366
367**示例:**
368
369```ts
370import socket from '@ohos.net.socket';
371import { BusinessError } from '@ohos.base';
372
373let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
374let bindAddr: socket.NetAddress = {
375  address: '192.168.xx.xxx',
376  port: 8080
377}
378udp.bind(bindAddr, (err: BusinessError) => {
379  if (err) {
380    console.log('bind fail');
381    return;
382  }
383  console.log('bind success');
384  udp.getState().then((data: socket.SocketStateBase) => {
385    console.log('getState success:' + JSON.stringify(data));
386  }).catch((err: BusinessError) => {
387    console.log('getState fail' + JSON.stringify(err));
388  });
389});
390```
391
392### setExtraOptions
393
394setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void
395
396设置UDPSocket连接的其他属性。使用callback方式作为异步方法。
397
398> **说明:**
399> bind方法调用成功后,才可调用此方法。
400
401**需要权限**:ohos.permission.INTERNET
402
403**系统能力**:SystemCapability.Communication.NetStack
404
405**参数:**
406
407| 参数名   | 类型                                     | 必填 | 说明                                                         |
408| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
409| options  | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
410| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |
411
412**错误码:**
413
414| 错误码ID | 错误信息                 |
415| ------- | ----------------------- |
416| 401     | Parameter error.        |
417| 201     | Permission denied.      |
418
419**示例:**
420
421```ts
422import socket from '@ohos.net.socket';
423import { BusinessError } from '@ohos.base';
424
425let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
426
427let bindAddr: socket.NetAddress = {
428  address: '192.168.xx.xxx',
429  port: 8080
430}
431udp.bind(bindAddr, (err: BusinessError) => {
432  if (err) {
433    console.log('bind fail');
434    return;
435  }
436  console.log('bind success');
437  let udpextraoptions: socket.UDPExtraOptions = {
438    receiveBufferSize: 1000,
439    sendBufferSize: 1000,
440    reuseAddress: false,
441    socketTimeout: 6000,
442    broadcast: true
443  }
444  udp.setExtraOptions(udpextraoptions, (err: BusinessError) => {
445    if (err) {
446      console.log('setExtraOptions fail');
447      return;
448    }
449    console.log('setExtraOptions success');
450  })
451})
452```
453
454### setExtraOptions
455
456setExtraOptions(options: UDPExtraOptions): Promise\<void\>
457
458设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。
459
460> **说明:**
461> bind方法调用成功后,才可调用此方法。
462
463**需要权限**:ohos.permission.INTERNET
464
465**系统能力**:SystemCapability.Communication.NetStack
466
467**参数:**
468
469| 参数名  | 类型                                     | 必填 | 说明                                                         |
470| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
471| options | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
472
473**返回值:**
474
475| 类型            | 说明                                                 |
476|  -------------- |  --------------------------------------------------- |
477| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 |
478
479**错误码:**
480
481| 错误码ID | 错误信息                 |
482| ------- | ----------------------- |
483| 401     | Parameter error.        |
484| 201     | Permission denied.      |
485
486**示例:**
487
488```ts
489import socket from '@ohos.net.socket';
490import { BusinessError } from '@ohos.base';
491
492let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
493
494let bindAddr: socket.NetAddress = {
495  address: '192.168.xx.xxx',
496  port: 8080
497}
498udp.bind(bindAddr, (err: BusinessError) => {
499  if (err) {
500    console.log('bind fail');
501    return;
502  }
503  console.log('bind success');
504  let udpextraoptions: socket.UDPExtraOptions = {
505    receiveBufferSize: 1000,
506    sendBufferSize: 1000,
507    reuseAddress: false,
508    socketTimeout: 6000,
509    broadcast: true
510  }
511  udp.setExtraOptions(udpextraoptions).then(() => {
512    console.log('setExtraOptions success');
513  }).catch((err: BusinessError) => {
514    console.log('setExtraOptions fail');
515  });
516})
517```
518
519### on('message')
520
521on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
522
523订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
524
525**系统能力**:SystemCapability.Communication.NetStack
526
527**参数:**
528
529| 参数名   | 类型                                                         | 必填 | 说明                                      |
530| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
531| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
532| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。                                |
533
534**示例:**
535
536```ts
537import socket from "@ohos.net.socket";
538import { BusinessError } from '@ohos.base';
539let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
540
541let messageView = '';
542udp.on('message', (value: socket.SocketMessageInfo) => {
543  for (let i: number = 0; i < value.message.byteLength; i++) {
544    let uint8Array = new Uint8Array(value.message)
545    let messages = uint8Array[i]
546    let message = String.fromCharCode(messages);
547    messageView += message;
548  }
549  console.log('on message message: ' + JSON.stringify(messageView));
550  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
551});
552```
553
554### off('message')
555
556off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
557
558取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
559
560> **说明:**
561> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
562
563**系统能力**:SystemCapability.Communication.NetStack
564
565**参数:**
566
567| 参数名   | 类型                                                         | 必填 | 说明                                      |
568| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
569| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
570| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 否   | 回调函数。                               |
571
572**示例:**
573
574```ts
575import socket from "@ohos.net.socket";
576import { BusinessError } from '@ohos.base';
577let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
578let messageView = '';
579let callback = (value: socket.SocketMessageInfo) => {
580  for (let i: number = 0; i < value.message.byteLength; i++) {
581    let uint8Array = new Uint8Array(value.message)
582    let messages = uint8Array[i]
583    let message = String.fromCharCode(messages);
584    messageView += message;
585  }
586  console.log('on message message: ' + JSON.stringify(messageView));
587  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
588}
589udp.on('message', callback);
590// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
591udp.off('message', callback);
592udp.off('message');
593```
594
595### on('listening' | 'close')
596
597on(type: 'listening' | 'close', callback: Callback\<void\>): void
598
599订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
600
601**系统能力**:SystemCapability.Communication.NetStack
602
603**参数:**
604
605| 参数名   | 类型             | 必填 | 说明                                                         |
606| -------- | ---------------- | ---- | ------------------------------------------------------------ |
607| type     | string           | 是   | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
608| callback | Callback\<void\> | 是   | 回调函数。                                                   |
609
610**示例:**
611
612```ts
613import socket from "@ohos.net.socket";
614import { BusinessError } from '@ohos.base';
615let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
616udp.on('listening', () => {
617  console.log("on listening success");
618});
619udp.on('close', () => {
620  console.log("on close success");
621});
622```
623
624### off('listening' | 'close')
625
626off(type: 'listening' | 'close', callback?: Callback\<void\>): void
627
628取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
629
630> **说明:**
631> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
632
633**系统能力**:SystemCapability.Communication.NetStack
634
635**参数:**
636
637| 参数名   | 类型             | 必填 | 说明                                                         |
638| -------- | ---------------- | ---- | ------------------------------------------------------------ |
639| type     | string           | 是   | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
640| callback | Callback\<void\> | 否   | 回调函数。                                                   |
641
642**示例:**
643
644```ts
645import socket from "@ohos.net.socket";
646import { BusinessError } from '@ohos.base';
647let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
648let callback1 = () => {
649  console.log("on listening, success");
650}
651udp.on('listening', callback1);
652// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
653udp.off('listening', callback1);
654udp.off('listening');
655let callback2 = () => {
656  console.log("on close, success");
657}
658udp.on('close', callback2);
659// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
660udp.off('close', callback2);
661udp.off('close');
662```
663
664### on('error')
665
666on(type: 'error', callback: ErrorCallback): void
667
668订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
669
670**系统能力**:SystemCapability.Communication.NetStack
671
672**参数:**
673
674| 参数名   | 类型          | 必填 | 说明                                 |
675| -------- | ------------- | ---- | ------------------------------------ |
676| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
677| callback | ErrorCallback | 是   | 回调函数。                           |
678
679**示例:**
680
681```ts
682import socket from "@ohos.net.socket";
683import { BusinessError } from '@ohos.base';
684let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
685udp.on('error', (err: BusinessError) => {
686  console.log("on error, err:" + JSON.stringify(err))
687});
688```
689
690### off('error')
691
692off(type: 'error', callback?: ErrorCallback): void
693
694取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
695
696> **说明:**
697> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
698
699**系统能力**:SystemCapability.Communication.NetStack
700
701**参数:**
702
703| 参数名   | 类型          | 必填 | 说明                                 |
704| -------- | ------------- | ---- | ------------------------------------ |
705| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
706| callback | ErrorCallback | 否   | 回调函数。                           |
707
708**示例:**
709
710```ts
711import socket from "@ohos.net.socket";
712import { BusinessError } from '@ohos.base';
713let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
714let callback = (err: BusinessError) => {
715  console.log("on error, err:" + JSON.stringify(err));
716}
717udp.on('error', callback);
718// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
719udp.off('error', callback);
720udp.off('error');
721```
722
723## NetAddress
724
725目标地址信息。
726
727**系统能力**:SystemCapability.Communication.NetStack
728
729| 名称  | 类型   | 必填 | 说明                                                         |
730| ------- | ------ | ---- | ------------------------------------------------------------ |
731| address | string | 是   | 本地绑定的ip地址。                                           |
732| port    | number | 否   | 端口号 ,范围0~65535。如果不指定系统随机分配端口。           |
733| family  | number | 否   | 网络协议类型,可选类型:<br />- 1:IPv4<br />- 2:IPv6<br />默认为1。 |
734
735## UDPSendOptions
736
737UDPSocket发送参数。
738
739**系统能力**:SystemCapability.Communication.NetStack
740
741| 名称  | 类型                               | 必填 | 说明           |
742| ------- | ---------------------------------- | ---- | -------------- |
743| data    | string \| ArrayBuffer                          | 是   | 发送的数据。   |
744| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
745
746## UDPExtraOptions
747
748UDPSocket连接的其他属性。
749
750**系统能力**:SystemCapability.Communication.NetStack
751
752| 名称            | 类型    | 必填 | 说明                             |
753| ----------------- | ------- | ---- | -------------------------------- |
754| broadcast         | boolean | 否   | 是否可以发送广播。默认为false。  |
755| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte),默认为0。   |
756| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte),默认为0。   |
757| reuseAddress      | boolean | 否   | 是否重用地址。默认为false。      |
758| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms),默认为0。 |
759
760## SocketMessageInfo<sup>11+</sup>
761
762socket连接信息
763
764**系统能力**:SystemCapability.Communication.NetStack
765
766| 名称        | 类型   | 必填 | 说明                                  |
767| ---------- | ------ | ---- | ------------------------------------- |
768| message    | ArrayBuffer | 是   | 接收的事件消息。 |
769| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是   | socket连接信息。 |
770
771## SocketStateBase
772
773Socket的状态信息。
774
775**系统能力**:SystemCapability.Communication.NetStack
776
777| 名称      | 类型    | 必填 | 说明       |
778| ----------- | ------- | ---- | ---------- |
779| isBound     | boolean | 是   | 是否绑定。 |
780| isClose     | boolean | 是   | 是否关闭。 |
781| isConnected | boolean | 是   | 是否连接。 |
782
783## SocketRemoteInfo
784
785Socket的连接信息。
786
787**系统能力**:SystemCapability.Communication.NetStack
788
789| 名称  | 类型   | 必填 | 说明                                                         |
790| ------- | ------ | ---- | ------------------------------------------------------------ |
791| address | string | 是   | 本地绑定的ip地址。                                           |
792| family  | string | 是   | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 |
793| port    | number | 是   | 端口号,范围0~65535。                                        |
794| size    | number | 是   | 服务器响应信息的字节长度。                                   |
795
796## UDP 错误码说明
797
798UDP 其余错误码映射形式为:2301000 + Linux内核错误码。
799
800错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
801
802## socket.constructMulticastSocketInstance<sup>11+</sup>
803
804constructMulticastSocketInstance(): MulticastSocket
805
806创建一个MulticastSocket对象。
807
808**系统能力**:SystemCapability.Communication.NetStack
809
810**返回值:**
811
812| 类型                               | 说明                    |
813| ----------------------------------- | ----------------------------- |
814| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 |
815
816**示例:**
817
818```ts
819import socket from "@ohos.net.socket";
820let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
821```
822## MulticastSocket<sup>11+</sup>
823
824MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。
825
826### addMembership<sup>11+</sup>
827
828addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void;
829
830加入多播组。使用callback方法作为异步方法。
831
832> **说明:**
833> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
834> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
835
836**需要权限**:ohos.permission.INTERNET
837
838**系统能力**:SystemCapability.Communication.NetStack
839
840**参数:**
841
842| 参数名             | 类型                           | 必填 | 说明                                       |
843| ----------------- | ----------------------------- | ---- | ----------------------------------------- |
844| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
845| callback          | AsyncCallback\<void\>         |  是  | 回调函数。                                  |
846
847**错误码:**
848
849| 错误码ID | 错误信息                 |
850| ------- | ----------------------- |
851| 401     | Parameter error.        |
852| 201     | Permission denied.      |
853| 2301022 | Invalid argument.       |
854| 2301088 | Not a socket.           |
855| 2301098 | Address in use.         |
856
857**示例:**
858
859```ts
860import socket from "@ohos.net.socket";
861let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
862let addr: socket.NetAddress = {
863  address: '239.255.0.1',
864  port: 8080
865}
866multicast.addMembership(addr, (err: Object) => {
867  if (err) {
868    console.log('add membership fail, err: ' + JSON.stringify(err));
869    return;
870  }
871  console.log('add membership success');
872})
873```
874
875### addMembership<sup>11+</sup>
876
877addMembership(multicastAddress: NetAddress): Promise\<void\>;
878
879加入多播组。使用Promise方法作为异步方法。。
880
881> **说明:**
882> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
883> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
884
885**需要权限**:ohos.permission.INTERNET
886
887**系统能力**:SystemCapability.Communication.NetStack
888
889**参数:**
890
891| 参数名             | 类型                           | 必填 | 说明                                           |
892| ----------------- | ----------------------------- | ---- | --------------------------------------------  |
893| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
894
895**返回值:**
896
897| 类型            | 说明                                               |
898|  -------------- |  -----------------------------------------------  |
899| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 |
900
901**错误码:**
902
903| 错误码ID | 错误信息                 |
904| ------- | ----------------------- |
905| 401     | Parameter error.        |
906| 201     | Permission denied.      |
907| 2301088 | Not a socket.           |
908| 2301098 | Address in use.         |
909
910**示例:**
911
912```ts
913import socket from "@ohos.net.socket";
914let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
915let addr: socket.NetAddress = {
916  address: '239.255.0.1',
917  port: 8080
918}
919multicast.addMembership(addr).then(() => {
920  console.log('addMembership success');
921}).catch((err: Object) => {
922  console.log('addMembership fail');
923});
924```
925
926### dropMembership<sup>11+</sup>
927
928dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void;
929
930退出多播组。使用callback方法作为异步方法。
931
932> **说明:**
933> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
934> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
935
936**需要权限**:ohos.permission.INTERNET
937
938**系统能力**:SystemCapability.Communication.NetStack
939
940**参数:**
941
942| 参数名             | 类型                           | 必填 | 说明                                         |
943| ----------------- | ----------------------------- | ---- | ------------------------------------------- |
944| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。   |
945| callback          | AsyncCallback\<void\>         |  是  | 回调函数。                                    |
946
947**错误码:**
948
949| 错误码ID | 错误信息                 |
950| ------- | ----------------------- |
951| 401     | Parameter error.        |
952| 201     | Permission denied.      |
953| 2301088 | Not a socket.           |
954| 2301098 | Address in use.         |
955
956**示例:**
957
958```ts
959import socket from "@ohos.net.socket";
960let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
961let addr: socket.NetAddress = {
962  address: '239.255.0.1',
963  port: 8080
964}
965multicast.dropMembership(addr, (err: Object) => {
966  if (err) {
967    console.log('drop membership fail, err: ' + JSON.stringify(err));
968    return;
969  }
970  console.log('drop membership success');
971})
972```
973
974### dropMembership<sup>11+</sup>
975
976dropMembership(multicastAddress: NetAddress): Promise\<void\>;
977
978退出多播组。使用Promise方法作为异步方法。。
979
980> **说明:**
981> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
982> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
983
984**需要权限**:ohos.permission.INTERNET
985
986**系统能力**:SystemCapability.Communication.NetStack
987
988**参数:**
989
990| 参数名             | 类型                                   | 必填 | 说明                                           |
991| ----------------- | ------------------------------------- | ---- | --------------------------------------------  |
992| multicastAddress  | [NetAddress](#netaddress) |  是  | 目标地址信息,参考[NetAddress](#netaddress)。     |
993
994**返回值:**
995
996| 类型            | 说明                                              |
997|  -------------- |  ----------------------------------------------- |
998| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 |
999
1000**错误码:**
1001
1002| 错误码ID | 错误信息                 |
1003| ------- | ----------------------- |
1004| 401     | Parameter error.        |
1005| 201     | Permission denied.      |
1006| 2301088 | Not a socket.           |
1007| 2301098 | Address in use.         |
1008
1009**示例:**
1010
1011```ts
1012import socket from "@ohos.net.socket";
1013let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1014let addr: socket.NetAddress = {
1015  address: '239.255.0.1',
1016  port: 8080
1017}
1018multicast.dropMembership(addr).then(() => {
1019  console.log('drop membership success');
1020}).catch((err: Object) => {
1021  console.log('drop membership fail');
1022});
1023```
1024
1025### setMulticastTTL<sup>11+</sup>
1026
1027setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void;
1028
1029设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。
1030
1031> **说明:**
1032> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1033> 范围为 0~255,默认值为 1 。
1034> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1035> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1036
1037**系统能力**:SystemCapability.Communication.NetStack
1038
1039**参数:**
1040
1041| 参数名         | 类型                   | 必填 | 说明                         |
1042| ------------- | --------------------- | ---- | ----------------------------- |
1043| ttl           | number                |  是  | ttl设置数值,类型为数字number。 |
1044| callback      | AsyncCallback\<void\> |  是  | 回调函数。                     |
1045
1046**错误码:**
1047
1048| 错误码ID | 错误信息                 |
1049| ------- | ----------------------- |
1050| 401     | Parameter error.        |
1051| 2301022 | Invalid argument.       |
1052| 2301088 | Not a socket.           |
1053
1054**示例:**
1055
1056```ts
1057import socket from "@ohos.net.socket";
1058let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1059let ttl = 8
1060multicast.setMulticastTTL(ttl, (err: Object) => {
1061  if (err) {
1062    console.log('set ttl fail, err: ' + JSON.stringify(err));
1063    return;
1064  }
1065  console.log('set ttl success');
1066})
1067```
1068
1069### setMulticastTTL<sup>11+</sup>
1070
1071setMulticastTTL(ttl: number): Promise\<void\>;
1072
1073设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。。
1074
1075> **说明:**
1076> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1077> 范围为 0~255,默认值为 1 。
1078> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1079> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1080
1081**系统能力**:SystemCapability.Communication.NetStack
1082
1083**参数:**
1084
1085| 参数名         | 类型                   | 必填 | 说明                           |
1086| ------------- | ---------------------- | ---- | ------------------------------ |
1087| ttl           | number                 |  是  | ttl设置数值,类型为数字Number。 |
1088
1089**返回值:**
1090
1091| 类型            | 说明                                             |
1092|  -------------- |  ---------------------------------------------- |
1093| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 |
1094
1095**错误码:**
1096
1097| 错误码ID | 错误信息                 |
1098| ------- | ----------------------- |
1099| 401     | Parameter error.        |
1100| 2301022 | Invalid argument.       |
1101| 2301088 | Not a socket.           |
1102
1103**示例:**
1104
1105```ts
1106import socket from "@ohos.net.socket";
1107let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1108multicast.setMulticastTTL(8).then(() => {
1109  console.log('set ttl success');
1110}).catch((err: Object) => {
1111  console.log('set ttl failed');
1112});
1113```
1114
1115### getMulticastTTL<sup>11+</sup>
1116
1117getMulticastTTL(callback: AsyncCallback\<number\>): void;
1118
1119获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。
1120
1121> **说明:**
1122> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1123> 范围为 0~255,默认值为 1 。
1124> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1125> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1126
1127**系统能力**:SystemCapability.Communication.NetStack
1128
1129**参数:**
1130
1131| 参数名         | 类型                     | 必填 | 说明                         |
1132| ------------- | ----------------------- | ---- | --------------------------- |
1133| callback      | AsyncCallback\<number\> |  是  | 回调函数。                    |
1134
1135**错误码:**
1136
1137| 错误码ID | 错误信息                 |
1138| ------- | ----------------------- |
1139| 401     | Parameter error.        |
1140| 2301088 | Not a socket.           |
1141
1142**示例:**
1143
1144```ts
1145import socket from "@ohos.net.socket";
1146let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1147multicast.getMulticastTTL((err: Object, value: Number) => {
1148  if (err) {
1149    console.log('set ttl fail, err: ' + JSON.stringify(err));
1150    return;
1151  }
1152  console.log('set ttl success, value: ' + JSON.stringify(value));
1153})
1154```
1155
1156### getMulticastTTL<sup>11+</sup>
1157
1158getMulticastTTL(): Promise\<number\>;
1159
1160获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。
1161
1162> **说明:**
1163> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1164> 范围为 0~255,默认值为 1 。
1165> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1166> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1167
1168**系统能力**:SystemCapability.Communication.NetStack
1169
1170**返回值:**
1171
1172| 类型               | 说明                        |
1173| ----------------   | --------------------------- |
1174| Promise\<number\> | 以Promise形式返回当前TTL数值。 |
1175
1176**错误码:**
1177
1178| 错误码ID | 错误信息                |
1179| ------- | ----------------------- |
1180| 401     | Parameter error.        |
1181| 2301088 | Not a socket.           |
1182
1183**示例:**
1184
1185```ts
1186import socket from "@ohos.net.socket";
1187let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1188multicast.getMulticastTTL().then((value: Number) => {
1189  console.log('ttl: ', JSON.stringify(value));
1190}).catch((err: Object) => {
1191  console.log('set ttl failed');
1192});
1193```
1194
1195### setLoopbackMode<sup>11+</sup>
1196
1197setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void;
1198
1199设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1200
1201> **说明:**
1202> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1203> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1204> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1205
1206**系统能力**:SystemCapability.Communication.NetStack
1207
1208**参数:**
1209
1210| 参数名         | 类型                  | 必填 | 说明                         |
1211| ------------- | --------------------- | ---- | ---------------------------- |
1212| flag          | boolean               |  是  | ttl设置数值,类型为boolen 。  |
1213| callback      | AsyncCallback\<void\> |  是  | 回调函数。                    |
1214
1215**错误码:**
1216
1217| 错误码ID | 错误信息                 |
1218| ------- | ----------------------- |
1219| 401     | Parameter error.        |
1220| 2301088 | Not a socket.           |
1221
1222**示例:**
1223
1224```ts
1225import socket from "@ohos.net.socket";
1226let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1227multicast.setLoopbackMode(false, (err: Object) => {
1228  if (err) {
1229    console.log('set loopback mode fail, err: ' + JSON.stringify(err));
1230    return;
1231  }
1232  console.log('set loopback mode success');
1233})
1234```
1235
1236### setLoopbackMode<sup>11+</sup>
1237
1238setLoopbackMode(flag: boolean): Promise\<void\>;
1239
1240设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1241
1242> **说明:**
1243> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1244> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1245> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1246
1247**系统能力**:SystemCapability.Communication.NetStack
1248
1249**参数:**
1250
1251| 参数名         | 类型                   | 必填 | 说明                             |
1252| ------------- | ---------------------- | ---- | -------------------------------- |
1253| flag          | boolean                |  是  | 环回模式标志位,类型为数字boolean。|
1254
1255**返回值:**
1256
1257| 类型            | 说明                                             |
1258|  -------------- |  ---------------------------------------------- |
1259| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 |
1260
1261**错误码:**
1262
1263| 错误码ID | 错误信息                |
1264| ------- | ----------------------- |
1265| 401     | Parameter error.        |
1266| 2301088 | Not a socket.           |
1267
1268**示例:**
1269
1270```ts
1271import socket from "@ohos.net.socket";
1272let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1273multicast.setLoopbackMode(false).then(() => {
1274  console.log('set loopback mode success');
1275}).catch((err: Object) => {
1276  console.log('set loopback mode failed');
1277});
1278```
1279
1280### getLoopbackMode<sup>11+</sup>
1281
1282getLoopbackMode(callback: AsyncCallback\<boolean\>): void;
1283
1284获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1285
1286> **说明:**
1287> 用于获取当前环回模式开启或关闭的状态。
1288> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1289> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1290
1291**系统能力**:SystemCapability.Communication.NetStack
1292
1293**参数:**
1294
1295| 参数名         | 类型                     | 必填 | 说明                         |
1296| ------------- | ----------------------- | ---- | --------------------------- |
1297| callback      | AsyncCallback\<number\> |  是  | 回调函数。                    |
1298
1299**错误码:**
1300
1301| 错误码ID | 错误信息                |
1302| ------- | ----------------------- |
1303| 401     | Parameter error.        |
1304| 2301088 | Not a socket.           |
1305
1306**示例:**
1307
1308```ts
1309import socket from "@ohos.net.socket";
1310let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1311multicast.getLoopbackMode((err: Object, value: Boolean) => {
1312  if (err) {
1313    console.log('get loopback mode fail, err: ' + JSON.stringify(err));
1314    return;
1315  }
1316  console.log('get loopback mode success, value: ' + JSON.stringify(value));
1317})
1318```
1319
1320### getLoopbackMode<sup>11+</sup>
1321
1322getLoopbackMode(): Promise\<boolean\>;
1323
1324获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1325
1326> **说明:**
1327> 用于获取当前环回模式开启或关闭的状态。
1328> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1329> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1330
1331**系统能力**:SystemCapability.Communication.NetStack
1332
1333**返回值:**
1334
1335| 类型                | 说明                        |
1336| ----------------  | --------------------------- |
1337| Promise\<boolean\> | 以Promise形式返回当前TTL数值。 |
1338
1339**错误码:**
1340
1341| 错误码ID | 错误信息                |
1342| ------- | ----------------------- |
1343| 401     | Parameter error.        |
1344| 2301088 | Not a socket.           |
1345
1346**示例:**
1347
1348```ts
1349import socket from "@ohos.net.socket";
1350let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1351multicast.getLoopbackMode().then((value: Boolean) => {
1352  console.log('loopback mode: ', JSON.stringify(value));
1353}).catch((err: Object) => {
1354  console.log('get loopback mode failed');
1355});
1356```
1357
1358
1359### send<sup>7+</sup>
1360
1361send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void
1362
1363发送数据。使用callback方式作为异步方法。
1364
1365发送数据前,需要先调用 [addMembership](#addmembership11) 加入多播组。
1366
1367**需要权限**:ohos.permission.INTERNET
1368
1369**系统能力**:SystemCapability.Communication.NetStack
1370
1371**参数:**
1372
1373| 参数名   | 类型                                | 必填 | 说明                                                         |
1374| -------- | --------------------------------- | ---- | ------------------------------------------------------------ |
1375| options  | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
1376| callback | AsyncCallback\<void\>             | 是   | 回调函数。                                                   |
1377
1378**错误码:**
1379
1380| 错误码ID | 错误信息                 |
1381| ------- | ----------------------- |
1382| 401     | Parameter error.        |
1383| 201     | Permission denied.      |
1384
1385**示例:**
1386
1387```ts
1388import socket from '@ohos.net.socket';
1389let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1390let sendOptions: socket.UDPSendOptions = {
1391  data: 'Hello, server!',
1392  address: {
1393    address: '239.255.0.1',
1394    port: 8080
1395  }
1396}
1397multicast.send(sendOptions, (err: Object) => {
1398  if (err) {
1399    console.log('send fail: ' + JSON.stringify(err));
1400    return;
1401  }
1402  console.log('send success');
1403});
1404```
1405
1406### send<sup>7+</sup>
1407
1408send(options: UDPSendOptions): Promise\<void\>
1409
1410发送数据。使用Promise方式作为异步方法。
1411
1412发送数据前,需要先调用 [addMembership](#addmembership11) 加入多播组。
1413
1414**需要权限**:ohos.permission.INTERNET
1415
1416**系统能力**:SystemCapability.Communication.NetStack
1417
1418**参数:**
1419
1420| 参数名  | 类型                                     | 必填 | 说明                                                         |
1421| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1422| options | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
1423
1424**错误码:**
1425
1426| 错误码ID | 错误信息                 |
1427| ------- | ----------------------- |
1428| 401     | Parameter error.        |
1429| 201     | Permission denied.      |
1430
1431**返回值:**
1432
1433| 类型            | 说明                              |
1434| :-------------- | :------------------------------- |
1435| Promise\<void\> | 以Promise形式返回发送数据的执行结果。 |
1436
1437**示例:**
1438
1439```ts
1440import socket from '@ohos.net.socket';
1441let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1442let sendOptions: socket.UDPSendOptions = {
1443  data: 'Hello, server!',
1444  address: {
1445    address: '239.255.0.1',
1446    port: 8080
1447  }
1448}
1449multicast.send(sendOptions).then(() => {
1450  console.log('send success');
1451}).catch((err: Object) => {
1452  console.log('send fail, ' + JSON.stringify(err));
1453});
1454```
1455
1456### on('message')<sup>7+</sup>
1457
1458on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
1459
1460订阅MulticastSocket接收消息事件。使用callback方式作为异步方法。
1461
1462**系统能力**:SystemCapability.Communication.NetStack
1463
1464**参数:**
1465
1466| 参数名   | 类型                                                                                    | 必填 | 说明                                 |
1467| -------- | ------------------------------------------------------------------------------------- | ---- | ----------------------------------- |
1468| type     | string                                                                                | 是   | 订阅的事件类型。'message':接收消息事件。 |
1469| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。                            |
1470
1471**示例:**
1472
1473```ts
1474import socket from "@ohos.net.socket"
1475let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance()
1476
1477multicast.on('message', (data) => {
1478  console.info('接收的数据: ' + JSON.stringify(data))
1479  const uintArray = new Uint8Array(data.message)
1480  let str = ''
1481  for (let i = 0; i < uintArray.length; ++i) {
1482    str += String.fromCharCode(uintArray[i])
1483  }
1484  console.info(str)
1485})
1486```
1487
1488### off('message')<sup>7+</sup>
1489
1490off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
1491
1492取消订阅消息事件。使用callback方式作为异步方法。
1493
1494**系统能力**:SystemCapability.Communication.NetStack
1495
1496**参数:**
1497
1498| 参数名   | 类型                                                                                  | 必填 | 说明                                 |
1499| -------- | ----------------------------------------------------------------------------------- | ---- | ----------------------------------- |
1500| type     | string                                                                              | 是   | 订阅的事件类型。'message':接收消息事件。 |
1501| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 否   | 回调函数。                            |
1502
1503**示例:**
1504
1505```ts
1506import socket from "@ohos.net.socket"
1507let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance()
1508multicast.on('message', (data) => {
1509  console.info('接收的数据: ' + JSON.stringify(data))
1510  const uintArray = new Uint8Array(data.message)
1511  let str = ''
1512  for (let i = 0; i < uintArray.length; ++i) {
1513    str += String.fromCharCode(uintArray[i])
1514  }
1515  console.info(str)
1516})
1517multicast.off('message')
1518```
1519
1520
1521## socket.constructTCPSocketInstance<sup>7+</sup>
1522
1523constructTCPSocketInstance(): TCPSocket
1524
1525创建一个TCPSocket对象。
1526
1527**系统能力**:SystemCapability.Communication.NetStack
1528
1529**返回值:**
1530
1531| 类型                               | 说明                    |
1532| --------------------------------- | ---------------------- |
1533| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 |
1534
1535**示例:**
1536
1537```ts
1538import socket from "@ohos.net.socket";
1539let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1540```
1541
1542## TCPSocket
1543
1544TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。
1545
1546### bind
1547
1548bind(address: NetAddress, callback: AsyncCallback\<void\>): void
1549
1550绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用callback方法作为异步方法。
1551
1552> **说明:**
1553> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1554> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1555> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1556
1557**需要权限**:ohos.permission.INTERNET
1558
1559**系统能力**:SystemCapability.Communication.NetStack
1560
1561**参数:**
1562
1563| 参数名   | 类型                               | 必填 | 说明                                                   |
1564| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1565| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1566| callback | AsyncCallback\<void\>              | 是   | 回调函数。                                             |
1567
1568**错误码:**
1569
1570| 错误码ID | 错误信息                 |
1571| ------- | ----------------------- |
1572| 401     | Parameter error.        |
1573| 201     | Permission denied.      |
1574
1575**示例:**
1576
1577```ts
1578import socket from "@ohos.net.socket";
1579import { BusinessError } from '@ohos.base';
1580let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1581let bindAddr: socket.NetAddress = {
1582  address: '192.168.xx.xxx',
1583  port: 8080
1584}
1585tcp.bind(bindAddr, (err: BusinessError) => {
1586  if (err) {
1587    console.log('bind fail');
1588    return;
1589  }
1590  console.log('bind success');
1591})
1592```
1593
1594### bind
1595
1596bind(address: NetAddress): Promise\<void\>
1597
1598绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用Promise方法作为异步方法。
1599
1600> **说明:**
1601> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1602> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1603> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1604
1605**需要权限**:ohos.permission.INTERNET
1606
1607**系统能力**:SystemCapability.Communication.NetStack
1608
1609**参数:**
1610
1611| 参数名  | 类型                               | 必填 | 说明                                                   |
1612| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1613| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1614
1615**返回值:**
1616
1617| 类型            | 说明                                                     |
1618| --------------- | ------------------------------------------------------- |
1619| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 |
1620
1621**错误码:**
1622
1623| 错误码ID | 错误信息                 |
1624| ------- | ----------------------- |
1625| 401     | Parameter error.        |
1626| 201     | Permission denied.      |
1627
1628**示例:**
1629
1630```ts
1631import socket from "@ohos.net.socket";
1632import { BusinessError } from '@ohos.base';
1633let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1634let bindAddr: socket.NetAddress = {
1635  address: '192.168.xx.xxx',
1636  port: 8080
1637}
1638tcp.bind(bindAddr).then(() => {
1639  console.log('bind success');
1640}).catch((err: BusinessError) => {
1641  console.log('bind fail');
1642});
1643```
1644
1645### connect
1646
1647connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void
1648
1649连接到指定的IP地址和端口。使用callback方法作为异步方法。
1650
1651> **说明:**
1652> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接
1653
1654**需要权限**:ohos.permission.INTERNET
1655
1656**系统能力**:SystemCapability.Communication.NetStack
1657
1658**参数:**
1659
1660| 参数名   | 类型                                     | 必填 | 说明                                                         |
1661| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1662| options  | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1663| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |
1664
1665**错误码:**
1666
1667| 错误码ID | 错误信息                 |
1668| ------- | ----------------------- |
1669| 401     | Parameter error.        |
1670| 201     | Permission denied.      |
1671
1672**示例:**
1673
1674```ts
1675import socket from "@ohos.net.socket";
1676import { BusinessError } from '@ohos.base';
1677let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1678
1679let tcpconnectoptions: socket.TCPConnectOptions = {
1680  address: {
1681    address: '192.168.xx.xxx',
1682    port: 8080
1683  },
1684  timeout: 6000
1685}
1686tcp.connect(tcpconnectoptions, (err: BusinessError) => {
1687  if (err) {
1688    console.log('connect fail');
1689    return;
1690  }
1691  console.log('connect success');
1692})
1693```
1694
1695### connect
1696
1697connect(options: TCPConnectOptions): Promise\<void\>
1698
1699连接到指定的IP地址和端口。使用promise方法作为异步方法。
1700
1701> **说明:**
1702> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。
1703
1704**需要权限**:ohos.permission.INTERNET
1705
1706**系统能力**:SystemCapability.Communication.NetStack
1707
1708**参数:**
1709
1710| 参数名  | 类型                                     | 必填 | 说明                                                         |
1711| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1712| options | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1713
1714**返回值:**
1715
1716| 类型            | 说明                                                       |
1717| -------------- | --------------------------------------------------------- |
1718| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 |
1719
1720**错误码:**
1721
1722| 错误码ID | 错误信息                 |
1723| ------- | ----------------------- |
1724| 401     | Parameter error.        |
1725| 201     | Permission denied.      |
1726
1727**示例:**
1728
1729```ts
1730import socket from "@ohos.net.socket";
1731import { BusinessError } from '@ohos.base';
1732let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1733
1734let tcpconnectoptions: socket.TCPConnectOptions = {
1735  address: {
1736    address: '192.168.xx.xxx',
1737    port: 8080
1738  },
1739  timeout: 6000
1740}
1741tcp.connect(tcpconnectoptions).then(() => {
1742  console.log('connect success')
1743}).catch((err: BusinessError) => {
1744  console.log('connect fail');
1745});
1746```
1747
1748### send
1749
1750send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
1751
1752通过TCPSocket连接发送数据。使用callback方式作为异步方法。
1753
1754> **说明:**
1755> connect方法调用成功后,才可调用此方法。
1756
1757**需要权限**:ohos.permission.INTERNET
1758
1759**系统能力**:SystemCapability.Communication.NetStack
1760
1761**参数:**
1762
1763| 参数名   | 类型                                    | 必填 | 说明                                                         |
1764| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1765| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
1766| callback | AsyncCallback\<void\>                   | 是   | 回调函数。                                                   |
1767
1768**错误码:**
1769
1770| 错误码ID | 错误信息                 |
1771| ------- | ----------------------- |
1772| 401     | Parameter error.        |
1773| 201     | Permission denied.      |
1774
1775**示例:**
1776
1777```ts
1778import socket from "@ohos.net.socket";
1779import { BusinessError } from '@ohos.base';
1780let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1781
1782let tcpconnectoptions: socket.TCPConnectOptions = {
1783  address: {
1784    address: '192.168.xx.xxx',
1785    port: 8080
1786  },
1787  timeout: 6000
1788}
1789tcp.connect(tcpconnectoptions, () => {
1790  console.log('connect success');
1791  let tcpSendOptions: socket.TCPSendOptions = {
1792    data: 'Hello, server!'
1793  }
1794  tcp.send(tcpSendOptions, (err: BusinessError) => {
1795    if (err) {
1796      console.log('send fail');
1797      return;
1798    }
1799    console.log('send success');
1800  })
1801})
1802```
1803
1804### send
1805
1806send(options: TCPSendOptions): Promise\<void\>
1807
1808通过TCPSocket连接发送数据。使用Promise方式作为异步方法。
1809
1810> **说明:**
1811> connect方法调用成功后,才可调用此方法。
1812
1813**需要权限**:ohos.permission.INTERNET
1814
1815**系统能力**:SystemCapability.Communication.NetStack
1816
1817**参数:**
1818
1819| 参数名  | 类型                                    | 必填 | 说明                                                         |
1820| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1821| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
1822
1823**返回值:**
1824
1825| 类型            | 说明                                               |
1826| -------------- | ------------------------------------------------- |
1827| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 |
1828
1829**错误码:**
1830
1831| 错误码ID | 错误信息                 |
1832| ------- | ----------------------- |
1833| 401     | Parameter error.        |
1834| 201     | Permission denied.      |
1835
1836**示例:**
1837
1838```ts
1839import socket from "@ohos.net.socket";
1840import { BusinessError } from '@ohos.base';
1841let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1842
1843let tcpconnectoptions: socket.TCPConnectOptions = {
1844  address: {
1845    address: '192.168.xx.xxx',
1846    port: 8080
1847  },
1848  timeout: 6000
1849}
1850tcp.connect(tcpconnectoptions, () => {
1851  console.log('connect success');
1852  let tcpSendOptions: socket.TCPSendOptions = {
1853    data: 'Hello, server!'
1854  }
1855  tcp.send(tcpSendOptions).then(() => {
1856    console.log('send success');
1857  }).catch((err: BusinessError) => {
1858    console.log('send fail');
1859  });
1860})
1861```
1862
1863### close
1864
1865close(callback: AsyncCallback\<void\>): void
1866
1867关闭TCPSocket连接。使用callback方式作为异步方法。
1868
1869**需要权限**:ohos.permission.INTERNET
1870
1871**系统能力**:SystemCapability.Communication.NetStack
1872
1873**参数:**
1874
1875| 参数名   | 类型                  | 必填 | 说明       |
1876| -------- | --------------------- | ---- | ---------- |
1877| callback | AsyncCallback\<void\> | 是   | 回调函数。 |
1878
1879**错误码:**
1880
1881| 错误码ID | 错误信息                 |
1882| ------- | ----------------------- |
1883| 201     | Permission denied.      |
1884
1885**示例:**
1886
1887```ts
1888import socket from "@ohos.net.socket";
1889import { BusinessError } from '@ohos.base';
1890let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1891
1892tcp.close((err: BusinessError) => {
1893  if (err) {
1894    console.log('close fail');
1895    return;
1896  }
1897  console.log('close success');
1898})
1899```
1900
1901### close
1902
1903close(): Promise\<void\>
1904
1905关闭TCPSocket连接。使用Promise方式作为异步方法。
1906
1907**需要权限**:ohos.permission.INTERNET
1908
1909**系统能力**:SystemCapability.Communication.NetStack
1910
1911**返回值:**
1912
1913| 类型            | 说明                                       |
1914| -------------- | ----------------------------------------- |
1915| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 |
1916
1917**错误码:**
1918
1919| 错误码ID | 错误信息                 |
1920| ------- | ----------------------- |
1921| 201     | Permission denied.      |
1922
1923**示例:**
1924
1925```ts
1926import socket from "@ohos.net.socket";
1927let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1928
1929tcp.close().then(() => {
1930  console.log('close success');
1931}).catch((err: BusinessError) => {
1932  console.log('close fail');
1933});
1934```
1935
1936### getRemoteAddress
1937
1938getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
1939
1940获取对端Socket地址。使用callback方式作为异步方法。
1941
1942> **说明:**
1943> connect方法调用成功后,才可调用此方法。
1944
1945**需要权限**:ohos.permission.INTERNET
1946
1947**系统能力**:SystemCapability.Communication.NetStack
1948
1949**参数:**
1950
1951| 参数名   | 类型                                              | 必填 | 说明       |
1952| -------- | ------------------------------------------------- | ---- | ---------- |
1953| callback | AsyncCallback<[NetAddress](#netaddress)> | 是   | 回调函数。 |
1954
1955**错误码:**
1956
1957| 错误码ID | 错误信息                 |
1958| ------- | ----------------------- |
1959| 201     | Permission denied.      |
1960
1961**示例:**
1962
1963```ts
1964import socket from "@ohos.net.socket";
1965import { BusinessError } from '@ohos.base';
1966let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1967
1968let tcpconnectoptions: socket.TCPConnectOptions = {
1969  address: {
1970    address: '192.168.xx.xxx',
1971    port: 8080
1972  },
1973  timeout: 6000
1974}
1975tcp.connect(tcpconnectoptions, () => {
1976  console.log('connect success');
1977  tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
1978    if (err) {
1979      console.log('getRemoteAddressfail');
1980      return;
1981    }
1982    console.log('getRemoteAddresssuccess:' + JSON.stringify(data));
1983  })
1984});
1985```
1986
1987### getRemoteAddress
1988
1989getRemoteAddress(): Promise\<NetAddress\>
1990
1991获取对端Socket地址。使用Promise方式作为异步方法。
1992
1993> **说明:**
1994> connect方法调用成功后,才可调用此方法。
1995
1996**需要权限**:ohos.permission.INTERNET
1997
1998**系统能力**:SystemCapability.Communication.NetStack
1999
2000**返回值:**
2001
2002| 类型                                        | 说明                                        |
2003| ------------------------------------------ | ------------------------------------------ |
2004| Promise<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。 |
2005
2006**错误码:**
2007
2008| 错误码ID | 错误信息                 |
2009| ------- | ----------------------- |
2010| 201     | Permission denied.      |
2011
2012**示例:**
2013
2014```ts
2015import socket from "@ohos.net.socket";
2016import { BusinessError } from '@ohos.base';
2017let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2018
2019let tcpconnectoptions: socket.TCPConnectOptions = {
2020  address: {
2021    address: '192.168.xx.xxx',
2022    port: 8080
2023  },
2024  timeout: 6000
2025}
2026tcp.connect(tcpconnectoptions).then(() => {
2027  console.log('connect success');
2028  tcp.getRemoteAddress().then(() => {
2029    console.log('getRemoteAddress success');
2030  }).catch((err: BusinessError) => {
2031    console.log('getRemoteAddressfail');
2032  });
2033}).catch((err: BusinessError) => {
2034  console.log('connect fail');
2035});
2036```
2037
2038### getState
2039
2040getState(callback: AsyncCallback\<SocketStateBase\>): void
2041
2042获取TCPSocket状态。使用callback方式作为异步方法。
2043
2044> **说明:**
2045> bind或connect方法调用成功后,才可调用此方法。
2046
2047**需要权限**:ohos.permission.INTERNET
2048
2049**系统能力**:SystemCapability.Communication.NetStack
2050
2051**参数:**
2052
2053| 参数名   | 类型                                                   | 必填 | 说明       |
2054| -------- | ------------------------------------------------------ | ---- | ---------- |
2055| callback | AsyncCallback<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。 |
2056
2057**错误码:**
2058
2059| 错误码ID | 错误信息                 |
2060| ------- | ----------------------- |
2061| 201     | Permission denied.      |
2062
2063**示例:**
2064
2065```ts
2066import socket from "@ohos.net.socket";
2067import { BusinessError } from '@ohos.base';
2068let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2069
2070let tcpconnectoptions: socket.TCPConnectOptions = {
2071  address: {
2072    address: '192.168.xx.xxx',
2073    port: 8080
2074  },
2075  timeout: 6000
2076}
2077tcp.connect(tcpconnectoptions, () => {
2078  console.log('connect success');
2079  tcp.getState((err: BusinessError, data: socket.SocketStateBase) => {
2080    if (err) {
2081      console.log('getState fail');
2082      return;
2083    }
2084    console.log('getState success:' + JSON.stringify(data));
2085  });
2086});
2087```
2088
2089### getState
2090
2091getState(): Promise\<SocketStateBase\>
2092
2093获取TCPSocket状态。使用Promise方式作为异步方法。
2094
2095> **说明:**
2096> bind或connect方法调用成功后,才可调用此方法。
2097
2098**需要权限**:ohos.permission.INTERNET
2099
2100**系统能力**:SystemCapability.Communication.NetStack
2101
2102**返回值:**
2103
2104| 类型                                             | 说明                                       |
2105| ----------------------------------------------- | ----------------------------------------- |
2106| Promise<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TCPSocket状态的结果。 |
2107
2108**错误码:**
2109
2110| 错误码ID | 错误信息                 |
2111| ------- | ----------------------- |
2112| 201     | Permission denied.      |
2113
2114**示例:**
2115
2116```ts
2117import socket from "@ohos.net.socket";
2118import { BusinessError } from '@ohos.base';
2119let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2120
2121let tcpconnectoptions: socket.TCPConnectOptions = {
2122  address: {
2123    address: '192.168.xx.xxx',
2124    port: 8080
2125  },
2126  timeout: 6000
2127}
2128tcp.connect(tcpconnectoptions).then(() => {
2129  console.log('connect success');
2130  tcp.getState().then(() => {
2131    console.log('getState success');
2132  }).catch((err: BusinessError) => {
2133    console.log('getState fail');
2134  });
2135}).catch((err: BusinessError) => {
2136  console.log('connect fail');
2137});
2138```
2139
2140### getSocketFd<sup>10+</sup>
2141
2142getSocketFd(callback: AsyncCallback\<number\>): void
2143
2144获取TCPSocket的文件描述符。使用callback方式作为异步方法。
2145
2146> **说明:**
2147> bind或connect方法调用成功后,才可调用此方法。
2148
2149**系统能力**:SystemCapability.Communication.NetStack
2150
2151**参数:**
2152
2153| 参数名   | 类型                                                   | 必填 | 说明       |
2154| -------- | ------------------------------------------------------ | ---- | ---------- |
2155| callback | AsyncCallback\<number\> | 是   | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 |
2156
2157**示例:**
2158
2159```ts
2160import socket from "@ohos.net.socket";
2161import { BusinessError } from '@ohos.base';
2162let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2163let bindAddr: socket.NetAddress = {
2164  address: '0.0.0.0'
2165}
2166tcp.bind(bindAddr)
2167let tcpconnectoptions: socket.TCPConnectOptions = {
2168  address: {
2169    address: '192.168.xx.xxx',
2170    port: 8080
2171  },
2172  timeout: 6000
2173}
2174tcp.connect(tcpconnectoptions)
2175tcp.getSocketFd((err: BusinessError, data: number) => {
2176  console.info("getSocketFd failed: " + err);
2177  console.info("tunenlfd: " + data);
2178})
2179```
2180### getSocketFd<sup>10+</sup>
2181
2182getSocketFd(): Promise\<number\>
2183
2184获取TCPSocket的文件描述符。使用Promise方式作为异步方法。
2185
2186> **说明:**
2187> bind或connect方法调用成功后,才可调用此方法。
2188
2189**系统能力**:SystemCapability.Communication.NetStack
2190
2191**返回值:**
2192
2193| 类型                                             | 说明                                       |
2194| ----------------------------------------------- | ----------------------------------------- |
2195| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
2196
2197**示例:**
2198
2199```ts
2200import socket from "@ohos.net.socket";
2201import { BusinessError } from '@ohos.base';
2202let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2203let bindAddr: socket.NetAddress = {
2204  address: '0.0.0.0'
2205}
2206tcp.bind(bindAddr)
2207let tcpconnectoptions: socket.TCPConnectOptions = {
2208  address: {
2209    address: '192.168.xx.xxx',
2210    port: 8080
2211  },
2212  timeout: 6000
2213}
2214tcp.connect(tcpconnectoptions)
2215tcp.getSocketFd().then((data: number) => {
2216  console.info("tunenlfd: " + data);
2217})
2218```
2219
2220### setExtraOptions
2221
2222setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
2223
2224设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
2225
2226> **说明:**
2227> bind或connect方法调用成功后,才可调用此方法。
2228
2229**需要权限**:ohos.permission.INTERNET
2230
2231**系统能力**:SystemCapability.Communication.NetStack
2232
2233**参数:**
2234
2235| 参数名   | 类型                                      | 必填 | 说明                                                         |
2236| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2237| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2238| callback | AsyncCallback\<void\>                     | 是   | 回调函数。                                                   |
2239
2240**错误码:**
2241
2242| 错误码ID | 错误信息                 |
2243| ------- | ----------------------- |
2244| 401     | Parameter error.        |
2245| 201     | Permission denied.      |
2246
2247**示例:**
2248
2249```ts
2250import socket from "@ohos.net.socket";
2251import { BusinessError } from '@ohos.base';
2252let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2253let tcpconnectoptions: socket.TCPConnectOptions = {
2254  address: {
2255    address: '192.168.xx.xxx',
2256    port: 8080
2257  },
2258  timeout: 6000
2259}
2260tcp.connect(tcpconnectoptions, () => {
2261  console.log('connect success');
2262  let tcpExtraOptions: socket.TCPExtraOptions = {
2263    keepAlive: true,
2264    OOBInline: true,
2265    TCPNoDelay: true,
2266    socketLinger: { on: true, linger: 10 },
2267    receiveBufferSize: 1000,
2268    sendBufferSize: 1000,
2269    reuseAddress: true,
2270    socketTimeout: 3000
2271  }
2272  tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
2273    if (err) {
2274      console.log('setExtraOptions fail');
2275      return;
2276    }
2277    console.log('setExtraOptions success');
2278  });
2279});
2280```
2281
2282### setExtraOptions
2283
2284setExtraOptions(options: TCPExtraOptions): Promise\<void\>
2285
2286设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
2287
2288> **说明:**
2289> bind或connect方法调用成功后,才可调用此方法。
2290
2291**需要权限**:ohos.permission.INTERNET
2292
2293**系统能力**:SystemCapability.Communication.NetStack
2294
2295**参数:**
2296
2297| 参数名  | 类型                                      | 必填 | 说明                                                         |
2298| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2299| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2300
2301**返回值:**
2302
2303| 类型            | 说明                                                 |
2304| -------------- | --------------------------------------------------- |
2305| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 |
2306
2307**错误码:**
2308
2309| 错误码ID | 错误信息                 |
2310| ------- | ----------------------- |
2311| 401     | Parameter error.        |
2312| 201     | Permission denied.      |
2313
2314**示例:**
2315
2316```ts
2317import socket from "@ohos.net.socket";
2318import { BusinessError } from '@ohos.base';
2319let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2320let tcpconnectoptions: socket.TCPConnectOptions = {
2321  address: {
2322    address: '192.168.xx.xxx',
2323    port: 8080
2324  },
2325  timeout: 6000
2326}
2327tcp.connect(tcpconnectoptions, () => {
2328  console.log('connect success');
2329  let tcpExtraOptions: socket.TCPExtraOptions = {
2330    keepAlive: true,
2331    OOBInline: true,
2332    TCPNoDelay: true,
2333    socketLinger: { on: true, linger: 10 },
2334    receiveBufferSize: 1000,
2335    sendBufferSize: 1000,
2336    reuseAddress: true,
2337    socketTimeout: 3000
2338  }
2339  tcp.setExtraOptions(tcpExtraOptions).then(() => {
2340    console.log('setExtraOptions success');
2341  }).catch((err: BusinessError) => {
2342    console.log('setExtraOptions fail');
2343  });
2344});
2345```
2346
2347### on('message')
2348
2349on(type: 'message', callback: Callback<SocketMessageInfo\>): void
2350
2351订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2352
2353**系统能力**:SystemCapability.Communication.NetStack
2354
2355**参数:**
2356
2357| 参数名   | 类型                                                         | 必填 | 说明                                      |
2358| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2359| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
2360| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 是   | 回调函数。                               |
2361
2362**示例:**
2363
2364```ts
2365import socket from "@ohos.net.socket";
2366import { BusinessError } from '@ohos.base';
2367let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2368let messageView = '';
2369tcp.on('message', (value: socket.SocketMessageInfo) => {
2370  for (let i: number = 0; i < value.message.byteLength; i++) {
2371    let uint8Array = new Uint8Array(value.message)
2372    let messages = uint8Array[i]
2373    let message = String.fromCharCode(messages);
2374    messageView += message;
2375  }
2376  console.log('on message message: ' + JSON.stringify(messageView));
2377  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2378});
2379```
2380
2381### off('message')
2382
2383off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
2384
2385取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2386
2387> **说明:**
2388> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2389
2390**系统能力**:SystemCapability.Communication.NetStack
2391
2392**参数:**
2393
2394| 参数名   | 类型                                                         | 必填 | 说明                                      |
2395| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2396| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
2397| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 否   | 回调函数。                               |
2398
2399**示例:**
2400
2401```ts
2402import socket from "@ohos.net.socket";
2403import { BusinessError } from '@ohos.base';
2404let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2405let messageView = '';
2406let callback = (value: socket.SocketMessageInfo) => {
2407  for (let i: number = 0; i < value.message.byteLength; i++) {
2408    let uint8Array = new Uint8Array(value.message)
2409    let messages = uint8Array[i]
2410    let message = String.fromCharCode(messages);
2411    messageView += message;
2412  }
2413  console.log('on message message: ' + JSON.stringify(messageView));
2414  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2415}
2416tcp.on('message', callback);
2417// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2418tcp.off('message', callback);
2419tcp.off('message');
2420```
2421
2422### on('connect' | 'close')
2423
2424on(type: 'connect' | 'close', callback: Callback\<void\>): void
2425
2426订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2427
2428**系统能力**:SystemCapability.Communication.NetStack
2429
2430**参数:**
2431
2432| 参数名   | 类型             | 必填 | 说明                                                         |
2433| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2434| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2435| callback | Callback\<void\> | 是   | 回调函数。                                                   |
2436
2437**示例:**
2438
2439```ts
2440import socket from "@ohos.net.socket";
2441import { BusinessError } from '@ohos.base';
2442let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2443tcp.on('connect', () => {
2444  console.log("on connect success")
2445});
2446tcp.on('close', () => {
2447  console.log("on close success")
2448});
2449```
2450
2451### off('connect' | 'close')
2452
2453off(type: 'connect' | 'close', callback?: Callback\<void\>): void
2454
2455取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2456
2457> **说明:**
2458> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2459
2460**系统能力**:SystemCapability.Communication.NetStack
2461
2462**参数:**
2463
2464| 参数名   | 类型             | 必填 | 说明                                                         |
2465| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2466| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2467| callback | Callback\<void\> | 否   | 回调函数。                                                   |
2468
2469**示例:**
2470
2471```ts
2472import socket from "@ohos.net.socket";
2473import { BusinessError } from '@ohos.base';
2474let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2475let callback1 = () => {
2476  console.log("on connect success");
2477}
2478tcp.on('connect', callback1);
2479// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2480tcp.off('connect', callback1);
2481tcp.off('connect');
2482let callback2 = () => {
2483  console.log("on close success");
2484}
2485tcp.on('close', callback2);
2486// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2487tcp.off('close', callback2);
2488tcp.off('close');
2489```
2490
2491### on('error')
2492
2493on(type: 'error', callback: ErrorCallback): void
2494
2495订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2496
2497**系统能力**:SystemCapability.Communication.NetStack
2498
2499**参数:**
2500
2501| 参数名   | 类型          | 必填 | 说明                                 |
2502| -------- | ------------- | ---- | ------------------------------------ |
2503| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2504| callback | ErrorCallback | 是   | 回调函数。                           |
2505
2506**示例:**
2507
2508```ts
2509import socket from "@ohos.net.socket";
2510import { BusinessError } from '@ohos.base';
2511let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2512tcp.on('error', (err: BusinessError) => {
2513  console.log("on error, err:" + JSON.stringify(err))
2514});
2515```
2516
2517### off('error')
2518
2519off(type: 'error', callback?: ErrorCallback): void
2520
2521取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2522
2523> **说明:**
2524> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2525
2526**系统能力**:SystemCapability.Communication.NetStack
2527
2528**参数:**
2529
2530| 参数名   | 类型          | 必填 | 说明                                 |
2531| -------- | ------------- | ---- | ------------------------------------ |
2532| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2533| callback | ErrorCallback | 否   | 回调函数。                           |
2534
2535**示例:**
2536
2537```ts
2538import socket from "@ohos.net.socket";
2539import { BusinessError } from '@ohos.base';
2540let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2541let callback = (err: BusinessError) => {
2542  console.log("on error, err:" + JSON.stringify(err));
2543}
2544tcp.on('error', callback);
2545// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2546tcp.off('error', callback);
2547tcp.off('error');
2548```
2549
2550## TCPConnectOptions
2551
2552TCPSocket连接的参数。
2553
2554**系统能力**:SystemCapability.Communication.NetStack
2555
2556| 名称  | 类型                               | 必填 | 说明                       |
2557| ------- | ---------------------------------- | ---- | -------------------------- |
2558| address | [NetAddress](#netaddress) | 是   | 绑定的地址以及端口。       |
2559| timeout | number                             | 否   | 超时时间,单位毫秒(ms)。 |
2560
2561## TCPSendOptions
2562
2563TCPSocket发送请求的参数。
2564
2565**系统能力**:SystemCapability.Communication.NetStack
2566
2567| 名称   | 类型   | 必填 | 说明                                                         |
2568| -------- | ------ | ---- | ------------------------------------------------------------ |
2569| data     | string\| ArrayBuffer  | 是   | 发送的数据。                                                 |
2570| encoding | string | 否   | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 |
2571
2572## TCPExtraOptions
2573
2574TCPSocket连接的其他属性。
2575
2576**系统能力**:SystemCapability.Communication.NetStack
2577
2578| 名称            | 类型    | 必填 | 说明                                                         |
2579| ----------------- | ------- | ---- | ------------------------------------------------------------ |
2580| keepAlive         | boolean | 否   | 是否保持连接。默认为false。                                  |
2581| OOBInline         | boolean | 否   | 是否为OOB内联。默认为false。                                 |
2582| TCPNoDelay        | boolean | 否   | TCPSocket连接是否无时延。默认为false。                       |
2583| socketLinger      | Object  | 是   | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 |
2584| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte),默认为0。                               |
2585| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte),默认为0。                               |
2586| reuseAddress      | boolean | 否   | 是否重用地址。默认为false。                                  |
2587| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms),默认为0。                             |
2588
2589## socket.constructTCPSocketServerInstance<sup>10+</sup>
2590
2591constructTCPSocketServerInstance(): TCPSocketServer
2592
2593创建一个TCPSocketServer对象。
2594
2595**系统能力**:SystemCapability.Communication.NetStack
2596
2597**返回值:**
2598
2599| 类型                                | 说明                          |
2600|  ---------------------------------- |  ---------------------------- |
2601| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 |
2602
2603**示例:**
2604
2605```ts
2606import socket from "@ohos.net.socket";
2607let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2608```
2609
2610## TCPSocketServer<sup>10+</sup>
2611
2612TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。
2613
2614### listen<sup>10+</sup>
2615
2616listen(address: NetAddress, callback: AsyncCallback\<void\>): void
2617
2618绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。
2619
2620> **说明:**
2621> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2622
2623**需要权限**:ohos.permission.INTERNET
2624
2625**系统能力**:SystemCapability.Communication.NetStack
2626
2627**参数:**
2628
2629| 参数名   | 类型                      | 必填 | 说明                                          |
2630| -------- | ------------------------- | ---- | --------------------------------------------- |
2631| address  | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2632| callback | AsyncCallback\<void\>     | 是   | 回调函数。                                    |
2633
2634**错误码:**
2635
2636| 错误码ID | 错误信息                                    |
2637| -------- | ------------------------------------------- |
2638| 401      | Parameter error.                            |
2639| 201      | Permission denied.                          |
2640| 2300002  | System internal error.                      |
2641| 2303109  | Bad file number.                            |
2642| 2303111  | Resource temporarily unavailable try again. |
2643| 2303198  | Address already in use.                     |
2644| 2303199  | Cannot assign requested address.            |
2645
2646**示例:**
2647
2648```ts
2649import socket from "@ohos.net.socket";
2650import { BusinessError } from '@ohos.base';
2651let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2652let listenAddr: socket.NetAddress = {
2653  address:  '192.168.xx.xxx',
2654  port: 8080,
2655  family: 1
2656}
2657tcpServer.listen(listenAddr, (err: BusinessError) => {
2658  if (err) {
2659    console.log("listen fail");
2660    return;
2661  }
2662  console.log("listen success");
2663})
2664```
2665
2666### listen<sup>10+</sup>
2667
2668listen(address: NetAddress): Promise\<void\>
2669
2670绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
2671
2672> **说明:**
2673> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2674
2675**需要权限**:ohos.permission.INTERNET
2676
2677**系统能力**:SystemCapability.Communication.NetStack
2678
2679**参数:**
2680
2681| 参数名  | 类型                      | 必填 | 说明                                          |
2682| ------- | ------------------------- | ---- | --------------------------------------------- |
2683| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2684
2685**返回值:**
2686
2687| 类型            | 说明                                                         |
2688|  -------------- |  ----------------------------------------------------------- |
2689| Promise\<void\> | 以Promise形式返回, 成功返回空,失败返回错误码错误信息。|
2690
2691**错误码:**
2692
2693| 错误码ID | 错误信息                                    |
2694| -------- | ------------------------------------------- |
2695| 401      | Parameter error.                            |
2696| 201      | Permission denied.                          |
2697| 2300002  | System internal error.                      |
2698| 2303109  | Bad file number.                            |
2699| 2303111  | Resource temporarily unavailable try again. |
2700| 2303198  | Address already in use.                     |
2701| 2303199  | Cannot assign requested address.            |
2702
2703**示例:**
2704
2705```ts
2706import socket from "@ohos.net.socket";
2707import { BusinessError } from '@ohos.base';
2708let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2709let listenAddr: socket.NetAddress = {
2710  address:  '192.168.xx.xxx',
2711  port: 8080,
2712  family: 1
2713}
2714tcpServer.listen(listenAddr).then(() => {
2715  console.log('listen success');
2716}).catch((err: BusinessError) => {
2717  console.log('listen fail');
2718});
2719```
2720
2721### getState<sup>10+</sup>
2722
2723getState(callback: AsyncCallback\<SocketStateBase\>): void
2724
2725获取TCPSocketServer状态。使用callback方式作为异步方法。
2726
2727> **说明:**
2728> listen方法调用成功后,才可调用此方法。
2729
2730**需要权限**:ohos.permission.INTERNET
2731
2732**系统能力**:SystemCapability.Communication.NetStack
2733
2734**参数:**
2735
2736| 参数名   | 类型                                               | 必填 | 说明       |
2737| -------- | -------------------------------------------------- | ---- | ---------- |
2738| callback | AsyncCallback<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。 |
2739
2740**错误码:**
2741
2742| 错误码ID | 错误信息                        |
2743| -------- | ------------------------------- |
2744| 401      | Parameter error.                |
2745| 201      | Permission denied.              |
2746| 2300002  | System internal error.          |
2747| 2303188  | Socket operation on non-socket. |
2748
2749**示例:**
2750
2751```ts
2752import socket from "@ohos.net.socket";
2753import { BusinessError } from '@ohos.base';
2754let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2755let listenAddr: socket.NetAddress = {
2756  address:  '192.168.xx.xxx',
2757  port: 8080,
2758  family: 1
2759}
2760tcpServer.listen(listenAddr, (err: BusinessError) => {
2761  if (err) {
2762    console.log("listen fail");
2763    return;
2764  }
2765  console.log("listen success");
2766})
2767tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
2768  if (err) {
2769    console.log('getState fail');
2770    return;
2771  }
2772  console.log('getState success:' + JSON.stringify(data));
2773})
2774```
2775
2776### getState<sup>10+</sup>
2777
2778getState(): Promise\<SocketStateBase\>
2779
2780获取TCPSocketServer状态。使用Promise方式作为异步方法。
2781
2782> **说明:**
2783> listen方法调用成功后,才可调用此方法。
2784
2785**需要权限**:ohos.permission.INTERNET
2786
2787**系统能力**:SystemCapability.Communication.NetStack
2788
2789**返回值:**
2790
2791| 类型                                         | 说明                                       |
2792|  ------------------------------------------- |  ----------------------------------------- |
2793| Promise<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TCPSocket状态的结果。 |
2794
2795**错误码:**
2796
2797| 错误码ID | 错误信息                        |
2798| -------- | ------------------------------- |
2799| 201      | Permission denied.              |
2800| 2300002  | System internal error.          |
2801| 2303188  | Socket operation on non-socket. |
2802
2803**示例:**
2804
2805```ts
2806import socket from "@ohos.net.socket";
2807import { BusinessError } from '@ohos.base';
2808let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2809let listenAddr: socket.NetAddress = {
2810  address:  '192.168.xx.xxx',
2811  port: 8080,
2812  family: 1
2813}
2814tcpServer.listen(listenAddr, (err: BusinessError) => {
2815  if (err) {
2816    console.log("listen fail");
2817    return;
2818  }
2819  console.log("listen success");
2820})
2821tcpServer.getState().then((data: socket.SocketStateBase) => {
2822  console.log('getState success' + JSON.stringify(data));
2823}).catch((err: BusinessError) => {
2824  console.log('getState fail');
2825});
2826```
2827
2828### setExtraOptions<sup>10+</sup>
2829
2830setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
2831
2832设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。
2833
2834> **说明:**
2835> listen方法调用成功后,才可调用此方法。
2836
2837**需要权限**:ohos.permission.INTERNET
2838
2839**系统能力**:SystemCapability.Communication.NetStack
2840
2841**参数:**
2842
2843| 参数名   | 类型                                | 必填 | 说明                                                         |
2844| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
2845| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
2846| callback | AsyncCallback\<void\>               | 是   | 回调函数。                                                   |
2847
2848**错误码:**
2849
2850| 错误码ID | 错误信息                        |
2851| -------- | ------------------------------- |
2852| 401      | Parameter error.                |
2853| 201      | Permission denied.              |
2854| 2300002  | System internal error.          |
2855| 2303188  | Socket operation on non-socket. |
2856
2857**示例:**
2858
2859```ts
2860import socket from "@ohos.net.socket";
2861import { BusinessError } from '@ohos.base';
2862let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2863let listenAddr: socket.NetAddress = {
2864  address:  '192.168.xx.xxx',
2865  port: 8080,
2866  family: 1
2867}
2868tcpServer.listen(listenAddr, (err: BusinessError) => {
2869  if (err) {
2870    console.log("listen fail");
2871    return;
2872  }
2873  console.log("listen success");
2874})
2875
2876let tcpExtraOptions: socket.TCPExtraOptions = {
2877  keepAlive: true,
2878  OOBInline: true,
2879  TCPNoDelay: true,
2880  socketLinger: { on: true, linger: 10 },
2881  receiveBufferSize: 1000,
2882  sendBufferSize: 1000,
2883  reuseAddress: true,
2884  socketTimeout: 3000
2885}
2886tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
2887  if (err) {
2888    console.log('setExtraOptions fail');
2889    return;
2890  }
2891  console.log('setExtraOptions success');
2892});
2893```
2894
2895### setExtraOptions<sup>10+</sup>
2896
2897setExtraOptions(options: TCPExtraOptions): Promise\<void\>
2898
2899设置TCPSocketServer连接的其他属性,使用Promise方式作为异步方法。
2900
2901> **说明:**
2902> listen方法调用成功后,才可调用此方法。
2903
2904**需要权限**:ohos.permission.INTERNET
2905
2906**系统能力**:SystemCapability.Communication.NetStack
2907
2908**参数:**
2909
2910| 参数名  | 类型                                | 必填 | 说明                                                         |
2911| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
2912| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
2913
2914**返回值:**
2915
2916| 类型            | 说明                                                       |
2917|  -------------- |  --------------------------------------------------------- |
2918| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
2919
2920**错误码:**
2921
2922| 错误码ID | 错误信息                        |
2923| -------- | ------------------------------- |
2924| 401      | Parameter error.                |
2925| 201      | Permission denied.              |
2926| 2300002  | System internal error.          |
2927| 2303188  | Socket operation on non-socket. |
2928
2929**示例:**
2930
2931```ts
2932import socket from "@ohos.net.socket";
2933import { BusinessError } from '@ohos.base';
2934let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2935let listenAddr: socket.NetAddress = {
2936  address:  '192.168.xx.xxx',
2937  port: 8080,
2938  family: 1
2939}
2940tcpServer.listen(listenAddr, (err: BusinessError) => {
2941  if (err) {
2942    console.log("listen fail");
2943    return;
2944  }
2945  console.log("listen success");
2946})
2947
2948let tcpExtraOptions: socket.TCPExtraOptions = {
2949  keepAlive: true,
2950  OOBInline: true,
2951  TCPNoDelay: true,
2952  socketLinger: { on: true, linger: 10 },
2953  receiveBufferSize: 1000,
2954  sendBufferSize: 1000,
2955  reuseAddress: true,
2956  socketTimeout: 3000
2957}
2958tcpServer.setExtraOptions(tcpExtraOptions).then(() => {
2959  console.log('setExtraOptions success');
2960}).catch((err: BusinessError) => {
2961  console.log('setExtraOptions fail');
2962});
2963```
2964
2965### on('connect')<sup>10+</sup>
2966
2967on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void
2968
2969订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
2970
2971> **说明:**
2972> listen方法调用成功后,才可调用此方法。
2973
2974**系统能力**:SystemCapability.Communication.NetStack
2975
2976**参数:**
2977
2978| 参数名   | 类型                            | 必填 | 说明                                  |
2979| -------- | ------------------------------- | ---- | ------------------------------------- |
2980| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
2981| callback | Callback<[TCPSocketConnection](#tcpsocketconnection10)> | 是   | 回调函数。                            |
2982
2983**错误码:**
2984
2985| 错误码ID | 错误信息         |
2986| -------- | ---------------- |
2987| 401      | Parameter error. |
2988
2989**示例:**
2990
2991```ts
2992import socket from "@ohos.net.socket";
2993let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2994tcpServer.on('connect', (data: socket.TCPSocketConnection) => {
2995  console.log(JSON.stringify(data))
2996});
2997```
2998
2999### off('connect')<sup>10+</sup>
3000
3001off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void
3002
3003取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
3004
3005> **说明:**
3006> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3007
3008**系统能力**:SystemCapability.Communication.NetStack
3009
3010**参数:**
3011
3012| 参数名   | 类型                            | 必填 | 说明                                  |
3013| -------- | ------------------------------- | ---- | ------------------------------------- |
3014| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
3015| callback | Callback<[TCPSocketConnection](#tcpsocketconnection10)> | 否   | 回调函数。                            |
3016
3017**错误码:**
3018
3019| 错误码ID | 错误信息         |
3020| -------- | ---------------- |
3021| 401      | Parameter error. |
3022
3023**示例:**
3024
3025```ts
3026import socket from "@ohos.net.socket";
3027let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3028let callback = (data: socket.TCPSocketConnection) => {
3029  console.log('on connect message: ' + JSON.stringify(data));
3030}
3031tcpServer.on('connect', callback);
3032// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3033tcpServer.off('connect', callback);
3034tcpServer.off('connect');
3035```
3036
3037### on('error')<sup>10+</sup>
3038
3039on(type: 'error', callback: ErrorCallback): void
3040
3041订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3042
3043> **说明:**
3044> listen方法调用成功后,才可调用此方法。
3045
3046**系统能力**:SystemCapability.Communication.NetStack
3047
3048**参数:**
3049
3050| 参数名   | 类型          | 必填 | 说明                                 |
3051| -------- | ------------- | ---- | ------------------------------------ |
3052| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3053| callback | ErrorCallback | 是   | 回调函数。                           |
3054
3055**错误码:**
3056
3057| 错误码ID | 错误信息         |
3058| -------- | ---------------- |
3059| 401      | Parameter error. |
3060
3061**示例:**
3062
3063```ts
3064import socket from "@ohos.net.socket";
3065import { BusinessError } from '@ohos.base';
3066let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3067tcpServer.on('error', (err: BusinessError) => {
3068  console.log("on error, err:" + JSON.stringify(err))
3069});
3070```
3071
3072### off('error')<sup>10+</sup>
3073
3074off(type: 'error', callback?: ErrorCallback): void
3075
3076取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3077
3078> **说明:**
3079> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3080
3081**系统能力**:SystemCapability.Communication.NetStack
3082
3083**参数:**
3084
3085| 参数名   | 类型          | 必填 | 说明                                 |
3086| -------- | ------------- | ---- | ------------------------------------ |
3087| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3088| callback | ErrorCallback | 否   | 回调函数。                           |
3089
3090**错误码:**
3091
3092| 错误码ID | 错误信息         |
3093| -------- | ---------------- |
3094| 401      | Parameter error. |
3095
3096**示例:**
3097
3098```ts
3099import socket from "@ohos.net.socket";
3100import { BusinessError } from '@ohos.base';
3101let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3102let callback = (err: BusinessError) => {
3103  console.log("on error, err:" + JSON.stringify(err));
3104}
3105tcpServer.on('error', callback);
3106// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3107tcpServer.off('error', callback);
3108tcpServer.off('error');
3109```
3110
3111## TCPSocketConnection<sup>10+</sup>
3112
3113TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。
3114
3115> **说明:**
3116> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。
3117
3118**系统能力**:SystemCapability.Communication.NetStack
3119
3120### 属性
3121
3122| 名称     | 类型   | 必填 | 说明                                      |
3123| -------- | ------ | ---- | ----------------------------------------- |
3124| clientId | number | 是   | 客户端与TCPSocketServer建立连接的id。 |
3125
3126### send<sup>10+</sup>
3127
3128send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
3129
3130通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。
3131
3132> **说明:**
3133> 与客户端建立连接后,才可调用此方法。
3134
3135**需要权限**:ohos.permission.INTERNET
3136
3137**系统能力**:SystemCapability.Communication.NetStack
3138
3139**参数:**
3140
3141| 参数名   | 类型                              | 必填 | 说明                                                         |
3142| -------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3143| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3144| callback | AsyncCallback\<void\>             | 是   | 回调函数。                                                   |
3145
3146**错误码:**
3147
3148| 错误码ID | 错误信息               |
3149| -------- | ---------------------- |
3150| 401      | Parameter error.       |
3151| 201      | Permission denied.     |
3152| 2300002  | System internal error. |
3153
3154**示例:**
3155
3156```ts
3157import socket from "@ohos.net.socket";
3158let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3159
3160tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3161  let tcpSendOption: socket.TCPSendOptions = {
3162    data: 'Hello, client!'
3163  }
3164  client.send(tcpSendOption, () => {
3165    console.log('send success');
3166  });
3167});
3168```
3169
3170### send<sup>10+</sup>
3171
3172send(options: TCPSendOptions): Promise\<void\>
3173
3174通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。
3175
3176> **说明:**
3177> 与客户端建立连接后,才可调用此方法。
3178
3179**需要权限**:ohos.permission.INTERNET
3180
3181**系统能力**:SystemCapability.Communication.NetStack
3182
3183**参数:**
3184
3185| 参数名  | 类型                              | 必填 | 说明                                                         |
3186| ------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3187| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3188
3189**返回值:**
3190
3191| 类型            | 说明                                                         |
3192|  -------------- |  ----------------------------------------------------------- |
3193| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
3194
3195**错误码:**
3196
3197| 错误码ID | 错误信息               |
3198| -------- | ---------------------- |
3199| 401      | Parameter error.       |
3200| 201      | Permission denied.     |
3201| 2300002  | System internal error. |
3202
3203**示例:**
3204
3205```ts
3206import socket from "@ohos.net.socket";
3207import { BusinessError } from '@ohos.base';
3208let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3209
3210tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3211  let tcpSendOption: socket.TCPSendOptions = {
3212    data: 'Hello, client!'
3213  }
3214  client.send(tcpSendOption).then(() => {
3215    console.log('send success');
3216  }).catch((err: BusinessError) => {
3217    console.log('send fail');
3218  });
3219});
3220```
3221
3222### close<sup>10+</sup>
3223
3224close(callback: AsyncCallback\<void\>): void
3225
3226关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。
3227
3228**需要权限**:ohos.permission.INTERNET
3229
3230**系统能力**:SystemCapability.Communication.NetStack
3231
3232**参数:**
3233
3234| 参数名   | 类型                  | 必填 | 说明       |
3235| -------- | --------------------- | ---- | ---------- |
3236| callback | AsyncCallback\<void\> | 是   | 回调函数。 |
3237
3238**错误码:**
3239
3240| 错误码ID | 错误信息               |
3241| -------- | ---------------------- |
3242| 401      | Parameter error.       |
3243| 201      | Permission denied.     |
3244| 2300002  | System internal error. |
3245
3246**示例:**
3247
3248```ts
3249import socket from "@ohos.net.socket";
3250import { BusinessError } from '@ohos.base';
3251let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3252
3253tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3254  client.close((err: BusinessError) => {
3255    if (err) {
3256      console.log('close fail');
3257      return;
3258    }
3259    console.log('close success');
3260  });
3261});
3262```
3263
3264### close<sup>10+</sup>
3265
3266close(): Promise\<void\>
3267
3268关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。
3269
3270**需要权限**:ohos.permission.INTERNET
3271
3272**系统能力**:SystemCapability.Communication.NetStack
3273
3274**返回值:**
3275
3276| 类型            | 说明                                         |
3277|  -------------- |  ------------------------------------------- |
3278| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
3279
3280**错误码:**
3281
3282| 错误码ID | 错误信息               |
3283| -------- | ---------------------- |
3284| 201      | Permission denied.     |
3285| 2300002  | System internal error. |
3286
3287**示例:**
3288
3289```ts
3290import socket from "@ohos.net.socket";
3291let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3292tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3293  client.close().then(() => {
3294  	console.log('close success');
3295  }).catch((err: BusinessError) => {
3296  	console.log('close fail');
3297  });
3298});
3299```
3300
3301### getRemoteAddress<sup>10+</sup>
3302
3303getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
3304
3305获取对端Socket地址。使用callback方式作为异步方法。
3306
3307> **说明:**
3308> 与客户端建立连接后,才可调用此方法。
3309
3310**需要权限**:ohos.permission.INTERNET
3311
3312**系统能力**:SystemCapability.Communication.NetStack
3313
3314**参数:**
3315
3316| 参数名   | 类型                                     | 必填 | 说明       |
3317| -------- | ---------------------------------------- | ---- | ---------- |
3318| callback | AsyncCallback<[NetAddress](#netaddress)> | 是   | 回调函数。 |
3319
3320**错误码:**
3321
3322| 错误码ID | 错误信息                        |
3323| -------- | ------------------------------- |
3324| 401      | Parameter error.                |
3325| 201      | Permission denied.              |
3326| 2300002  | System internal error.          |
3327| 2303188  | Socket operation on non-socket. |
3328
3329**示例:**
3330
3331```ts
3332import socket from "@ohos.net.socket";
3333import { BusinessError } from '@ohos.base';
3334let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3335tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3336  client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
3337    if (err) {
3338      console.log('getRemoteAddress fail');
3339      return;
3340    }
3341    console.log('getRemoteAddress success:' + JSON.stringify(data));
3342  });
3343});
3344```
3345
3346### getRemoteAddress<sup>10+</sup>
3347
3348getRemoteAddress(): Promise\<NetAddress\>
3349
3350获取对端Socket地址。使用Promise方式作为异步方法。
3351
3352> **说明:**
3353> 与客户端建立连接后,才可调用此方法。
3354
3355**需要权限**:ohos.permission.INTERNET
3356
3357**系统能力**:SystemCapability.Communication.NetStack
3358
3359**返回值:**
3360
3361| 类型                               | 说明                                        |
3362|  --------------------------------- |  ------------------------------------------ |
3363| Promise<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。 |
3364
3365**错误码:**
3366
3367| 错误码ID | 错误信息                        |
3368| -------- | ------------------------------- |
3369| 201      | Permission denied.              |
3370| 2300002  | System internal error.          |
3371| 2303188  | Socket operation on non-socket. |
3372
3373**示例:**
3374
3375```ts
3376import socket from "@ohos.net.socket";
3377import { BusinessError } from '@ohos.base';
3378let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3379tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3380  client.getRemoteAddress().then(() => {
3381    console.log('getRemoteAddress success');
3382  }).catch((err: BusinessError) => {
3383    console.log('getRemoteAddress fail');
3384  });
3385});
3386```
3387
3388### on('message')<sup>10+</sup>
3389
3390on(type: 'message', callback: Callback<SocketMessageInfo\>): void
3391
3392订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
3393
3394**系统能力**:SystemCapability.Communication.NetStack
3395
3396**参数:**
3397
3398| 参数名   | 类型                                                         | 必填 | 说明                                      |
3399| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
3400| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
3401| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 是   | 回调函数。                                |
3402
3403**错误码:**
3404
3405| 错误码ID | 错误信息         |
3406| -------- | ---------------- |
3407| 401      | Parameter error. |
3408
3409**示例:**
3410
3411```ts
3412import socket from "@ohos.net.socket";
3413import { BusinessError } from '@ohos.base';
3414let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3415
3416tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3417  client.on('message', (value: socket.SocketMessageInfo) => {
3418    let messageView = '';
3419    for (let i: number = 0; i < value.message.byteLength; i++) {
3420      let uint8Array = new Uint8Array(value.message)
3421      let messages = uint8Array[i]
3422      let message = String.fromCharCode(messages);
3423      messageView += message;
3424    }
3425    console.log('on message message: ' + JSON.stringify(messageView));
3426    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
3427  });
3428});
3429```
3430
3431### off('message')<sup>10+</sup>
3432
3433off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
3434
3435取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
3436
3437> **说明:**
3438> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3439
3440**系统能力**:SystemCapability.Communication.NetStack
3441
3442**参数:**
3443
3444| 参数名   | 类型                                                         | 必填 | 说明                                      |
3445| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
3446| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
3447| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 否   | 回调函数。                              |
3448
3449**错误码:**
3450
3451| 错误码ID | 错误信息         |
3452| -------- | ---------------- |
3453| 401      | Parameter error. |
3454
3455**示例:**
3456
3457```ts
3458import socket from "@ohos.net.socket";
3459import { BusinessError } from '@ohos.base';
3460let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3461let callback = (value: socket.SocketMessageInfo) => {
3462  let messageView = '';
3463  for (let i: number = 0; i < value.message.byteLength; i++) {
3464    let uint8Array = new Uint8Array(value.message)
3465    let messages = uint8Array[i]]
3466    let message = String.fromCharCode(messages);
3467    messageView += message;
3468  }
3469  console.log('on message message: ' + JSON.stringify(messageView));
3470  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
3471}
3472tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3473  client.on('message', callback);
3474  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3475  client.off('message', callback);
3476  client.off('message');
3477});
3478```
3479
3480### on('close')<sup>10+</sup>
3481
3482on(type: 'close', callback: Callback\<void\>): void
3483
3484订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
3485
3486**系统能力**:SystemCapability.Communication.NetStack
3487
3488**参数:**
3489
3490| 参数名   | 类型             | 必填 | 说明                                |
3491| -------- | ---------------- | ---- | ----------------------------------- |
3492| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
3493| callback | Callback\<void\> | 是   | 回调函数。                          |
3494
3495**错误码:**
3496
3497| 错误码ID | 错误信息         |
3498| -------- | ---------------- |
3499| 401      | Parameter error. |
3500
3501**示例:**
3502
3503```ts
3504import socket from "@ohos.net.socket";
3505import { BusinessError } from '@ohos.base';
3506let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3507tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3508  client.on('close', () => {
3509    console.log("on close success")
3510  });
3511});
3512```
3513
3514### off('close')<sup>10+</sup>
3515
3516off(type: 'close', callback?: Callback\<void\>): void
3517
3518取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
3519
3520> **说明:**
3521> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3522
3523**系统能力**:SystemCapability.Communication.NetStack
3524
3525**参数:**
3526
3527| 参数名   | 类型             | 必填 | 说明                                |
3528| -------- | ---------------- | ---- | ----------------------------------- |
3529| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
3530| callback | Callback\<void\> | 否   | 回调函数。                          |
3531
3532**错误码:**
3533
3534| 错误码ID | 错误信息         |
3535| -------- | ---------------- |
3536| 401      | Parameter error. |
3537
3538**示例:**
3539
3540```ts
3541import socket from "@ohos.net.socket";
3542let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3543let callback = () => {
3544  console.log("on close success");
3545}
3546tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3547  client.on('close', callback);
3548  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3549  client.off('close', callback);
3550  client.off('close');
3551});
3552```
3553
3554### on('error')<sup>10+</sup>
3555
3556on(type: 'error', callback: ErrorCallback): void
3557
3558订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
3559
3560**系统能力**:SystemCapability.Communication.NetStack
3561
3562**参数:**
3563
3564| 参数名   | 类型          | 必填 | 说明                                 |
3565| -------- | ------------- | ---- | ------------------------------------ |
3566| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3567| callback | ErrorCallback | 是   | 回调函数。                           |
3568
3569**错误码:**
3570
3571| 错误码ID | 错误信息         |
3572| -------- | ---------------- |
3573| 401      | Parameter error. |
3574
3575**示例:**
3576
3577```ts
3578import socket from "@ohos.net.socket";
3579import { BusinessError } from '@ohos.base';
3580let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3581tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3582  client.on('error', (err: BusinessError) => {
3583    console.log("on error, err:" + JSON.stringify(err))
3584  });
3585});
3586```
3587
3588### off('error')<sup>10+</sup>
3589
3590off(type: 'error', callback?: ErrorCallback): void
3591
3592取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
3593
3594> **说明:**
3595> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3596
3597**系统能力**:SystemCapability.Communication.NetStack
3598
3599**参数:**
3600
3601| 参数名   | 类型          | 必填 | 说明                                 |
3602| -------- | ------------- | ---- | ------------------------------------ |
3603| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3604| callback | ErrorCallback | 否   | 回调函数。                           |
3605
3606**错误码:**
3607
3608| 错误码ID | 错误信息         |
3609| -------- | ---------------- |
3610| 401      | Parameter error. |
3611
3612**示例:**
3613
3614```ts
3615import socket from "@ohos.net.socket";
3616import { BusinessError } from '@ohos.base';
3617let callback = (err: BusinessError) => {
3618  console.log("on error, err:" + JSON.stringify(err));
3619}
3620let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3621tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3622  client.on('error', callback);
3623  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3624  client.off('error', callback);
3625  client.off('error');
3626});
3627```
3628
3629## TCP 错误码说明
3630
3631TCP 其余错误码映射形式为:2301000 + Linux内核错误码。
3632
3633错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
3634
3635## socket.constructLocalSocketInstance<sup>11+</sup>
3636
3637constructLocalSocketInstance(): LocalSocket
3638
3639创建一个LocalSocket对象。
3640
3641**系统能力**:SystemCapability.Communication.NetStack
3642
3643**返回值:**
3644
3645| 类型                               | 说明                    |
3646  | :--------------------------------- | :---------------------- |
3647| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 |
3648
3649**示例:**
3650
3651```ts
3652import socket from "@ohos.net.socket";
3653let client: socket.LocalSocket = socket.constructLocalSocketInstance();
3654```
3655
3656## LocalSocket<sup>11+</sup>
3657
3658LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。
3659
3660### bind<sup>11+</sup>
3661
3662bind(address: LocalAddress): Promise\<void\>;
3663
3664绑定本地套接字文件的路径。使用promise方法作为异步方法。
3665
3666> **说明:**
3667> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。
3668> bind方法在本地套接字通信中非必须。
3669
3670**系统能力**:SystemCapability.Communication.NetStack
3671
3672**参数:**
3673
3674| 参数名   | 类型                               | 必填 | 说明                                                   |
3675| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
3676| address  | [LocalAddress](#localaddress11) | 是   | 目标地址信息,参考[LocalAddress](#localaddress11)。 |
3677
3678**错误码:**
3679
3680| 错误码ID | 错误信息                    |
3681| ------- | -------------------------- |
3682| 401     | Parameter error.           |
3683| 2301013 | Insufficient permissions.  |
3684| 2301022 | Invalid argument.          |
3685| 2301098 | Address already in use.    |
3686
3687**示例:**
3688
3689```ts
3690import socket from "@ohos.net.socket";
3691
3692let client = socket.constructLocalSocketInstance()
3693let sandboxPath: string = getContext().filesDir + '/testSocket'
3694let address : socket.LocalAddress = {
3695  address: sandboxPath
3696}
3697client.bind(address).then(() => {
3698  console.log('bind success')
3699}).catch((err: Object) => {
3700  console.error('failed to bind: ' + JSON.stringify(err))
3701})
3702```
3703
3704### connect<sup>11+</sup>
3705
3706connect(options: LocalConnectOptions): Promise\<void\>
3707
3708连接到指定的套接字文件。使用promise方法作为异步方法。
3709
3710> **说明:**
3711> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。
3712
3713**系统能力**:SystemCapability.Communication.NetStack
3714
3715**参数:**
3716
3717| 参数名  | 类型                                     | 必填 | 说明                                                         |
3718| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
3719| options | [LocalConnectOptions](#localconnectoptions11) | 是   | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 |
3720
3721**返回值:**
3722
3723| 类型            | 说明                                       |
3724| :-------------- | :---------------------------------------- |
3725| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 |
3726
3727**错误码:**
3728
3729| 错误码ID | 错误信息                 |
3730| ------- | ----------------------- |
3731| 401     | Parameter error.                 |
3732| 2301013     | Insufficient permissions.        |
3733| 2301022     | Invalid argument.                |
3734| 2301111     | Connection refused.              |
3735| 2301099     | Cannot assign requested address. |
3736
3737**示例:**
3738
3739```ts
3740import socket from "@ohos.net.socket";
3741
3742let client = socket.constructLocalSocketInstance();
3743let sandboxPath: string = getContext().filesDir + '/testSocket'
3744let connectOpt: socket.LocalConnectOptions = {
3745  address: {
3746    address: sandboxPath
3747  },
3748  timeout: 6000
3749}
3750client.connect(connectOpt).then(() => {
3751  console.log('connect success')
3752}).catch((err: Object) => {
3753  console.error('connect fail: ' + JSON.stringify(err));
3754});
3755```
3756
3757### send<sup>11+</sup>
3758
3759send(options: LocalSendOptions): Promise\<void\>
3760
3761通过LocalSocket连接发送数据。使用Promise方式作为异步方法。
3762
3763> **说明:**
3764> connect方法调用成功后,才可调用此方法。
3765
3766**系统能力**:SystemCapability.Communication.NetStack
3767
3768**参数:**
3769
3770| 参数名  | 类型                                    | 必填 | 说明                                                         |
3771| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
3772| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 |
3773
3774**返回值:**
3775
3776| 类型            | 说明                                         |
3777| :-------------- | :------------------------------------------ |
3778| Promise\<void\> | 以Promise形式返回通过LocalSocket发送数据的结果。 |
3779
3780**错误码:**
3781
3782| 错误码ID | 错误信息                 |
3783| ------- | ----------------------- |
3784| 401     | Parameter error.        |
3785| 2301011 | Operation would block.  |
3786
3787**示例:**
3788
3789```ts
3790import socket from "@ohos.net.socket"
3791
3792let client: socket.LocalSocket = socket.constructLocalSocketInstance()
3793let sandboxPath: string = getContext().filesDir + '/testSocket'
3794let connectOpt: socket.LocalConnectOptions = {
3795  address: {
3796    address: sandboxPath
3797  },
3798  timeout: 6000
3799}
3800client.connect(connectOpt).then(() => {
3801  console.log('connect success')
3802}).catch((err: Object) => {
3803  console.error('connect failed: ' + JSON.stringify(err))
3804})
3805let sendOpt: socket.LocalSendOptions = {
3806  data: 'Hello world!'
3807}
3808client.send(sendOpt).then(() => {
3809  console.log('send success')
3810}).catch((err: Object) => {
3811  console.error('send fail: ' + JSON.stringify(err))
3812})
3813```
3814
3815### close<sup>11+</sup>
3816
3817close(): Promise\<void\>
3818
3819关闭LocalSocket连接。使用Promise方式作为异步方法。
3820
3821**系统能力**:SystemCapability.Communication.NetStack
3822
3823**返回值:**
3824
3825| 类型            | 说明                                       |
3826| :-------------- | :----------------------------------------- |
3827| Promise\<void\> | 以Promise形式返回关闭LocalSocket连接的结果。 |
3828
3829**错误码:**
3830
3831| 错误码ID | 错误信息                 |
3832| ------- | ----------------------- |
3833| 2301009 | Bad file descriptor.    |
3834
3835**示例:**
3836
3837```ts
3838import socket from "@ohos.net.socket";
3839let client: socket.LocalSocket = socket.constructLocalSocketInstance();
3840
3841client.close().then(() => {
3842  console.log('close success');
3843}).catch((err: Object) => {
3844  console.error('close fail: ' + JSON.stringify(err));
3845});
3846```
3847
3848### getState<sup>11+</sup>
3849
3850getState(): Promise\<SocketStateBase\>
3851
3852获取LocalSocket状态。使用Promise方式作为异步方法。
3853
3854> **说明:**
3855> bind或connect方法调用成功后,才可调用此方法。
3856
3857**系统能力**:SystemCapability.Communication.NetStack
3858
3859**返回值:**
3860
3861| 类型                                          | 说明                                     |
3862| :------------------------------------------- | :--------------------------------------- |
3863| Promise<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取LocalSocket状态的结果。 |
3864
3865**示例:**
3866
3867```ts
3868import socket from "@ohos.net.socket";
3869let client: socket.LocalSocket = socket.constructLocalSocketInstance();
3870let sandboxPath: string = getContext().filesDir + '/testSocket'
3871let connectOpt: socket.LocalConnectOptions = {
3872  address: {
3873    address: sandboxPath
3874  },
3875  timeout: 6000
3876}
3877client.connect(connectOpt).then(() => {
3878  console.log('connect success');
3879  client.getState().then(() => {
3880    console.log('getState success');
3881  }).catch((err: Object) => {
3882    console.error('getState fail: ' + JSON.stringify(err))
3883  });
3884}).catch((err: Object) => {
3885  console.error('connect fail: ' + JSON.stringify(err));
3886});
3887```
3888
3889### getSocketFd<sup>11+</sup>
3890
3891getSocketFd(): Promise\<number\>
3892
3893获取LocalSocket的文件描述符。使用Promise方式作为异步方法。
3894
3895> **说明:**
3896> bind或connect方法调用成功后,才可调用此方法。
3897> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。
3898
3899**系统能力**:SystemCapability.Communication.NetStack
3900
3901**返回值:**
3902
3903| 类型               | 说明                              |
3904| :---------------- | :-------------------------------- |
3905| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
3906
3907**示例:**
3908
3909```ts
3910import socket from "@ohos.net.socket";
3911let client: socket.LocalSocket = socket.constructLocalSocketInstance();
3912let sandboxPath: string = getContext().filesDir + '/testSocket'
3913let connectOpt: socket.LocalConnectOptions = {
3914  address: {
3915    address: sandboxPath
3916  },
3917  timeout: 6000
3918}
3919client.connect(connectOpt).then(() => {
3920  console.log('connect ok')
3921}).catch((err: Object) => {
3922  console.error('connect fail: ' + JSON.stringify(err))
3923})
3924client.getSocketFd().then((data: number) => {
3925  console.info("fd: " + data);
3926}).catch((err: Object) => {
3927  console.error("getSocketFd faile: " + JSON.stringify(err));
3928})
3929```
3930
3931### setExtraOptions<sup>11+</sup>
3932
3933setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
3934
3935设置LocalSocket的套接字属性,使用Promise方式作为异步方法。
3936
3937> **说明:**
3938> bind或connect方法调用成功后,才可调用此方法。
3939
3940**系统能力**:SystemCapability.Communication.NetStack
3941
3942**参数:**
3943
3944| 参数名  | 类型                                      | 必填 | 说明                                                         |
3945| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
3946| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 |
3947
3948**返回值:**
3949
3950| 类型            | 说明                                           |
3951| :-------------- | :-------------------------------------------- |
3952| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 |
3953
3954**错误码:**
3955
3956| 错误码ID | 错误信息                 |
3957| ------- | ----------------------- |
3958| 401     | Parameter error.        |
3959| 2301009 | Bad file descriptor.    |
3960
3961**示例:**
3962
3963```ts
3964import socket from "@ohos.net.socket";
3965let client: socket.LocalSocket = socket.constructLocalSocketInstance();
3966let sandboxPath: string = getContext().filesDir + '/testSocket'
3967let connectOpt: socket.LocalConnectOptions = {
3968  address: {
3969    address: sandboxPath
3970  },
3971  timeout: 6000
3972}
3973client.connect(connectOpt).then(() => {
3974  console.log('connect success');
3975  let options: socket.ExtraOptionsBase = {
3976    receiveBufferSize: 8000,
3977    sendBufferSize: 8000,
3978    socketTimeout: 3000
3979  }
3980  client.setExtraOptions(options).then(() => {
3981    console.log('setExtraOptions success');
3982  }).catch((err: Object) => {
3983    console.error('setExtraOptions fail: ' + JSON.stringify(err));
3984  });
3985}).catch((err: Object) => {
3986  console.error('connect fail: ' + JSON.stringify(err));
3987});
3988```
3989
3990### getExtraOptions<sup>11+</sup>
3991
3992getExtraOptions(): Promise\<ExtraOptionsBase\>;
3993
3994获取LocalSocket的套接字属性,使用Promise方式作为异步方法。
3995
3996> **说明:**
3997> bind或connect方法调用成功后,才可调用此方法。
3998
3999**系统能力**:SystemCapability.Communication.NetStack
4000
4001**返回值:**
4002
4003| 类型                         | 说明                                      |
4004| :-------------------------- | :---------------------------------------- |
4005| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 |
4006
4007**错误码:**
4008
4009| 错误码ID | 错误信息                 |
4010| ------- | ----------------------- |
4011| 2301009 | Bad file descriptor.    |
4012
4013**示例:**
4014
4015```ts
4016import socket from "@ohos.net.socket";
4017let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4018let sandboxPath: string = getContext().filesDir + '/testSocket'
4019let connectOpt: socket.LocalConnectOptions = {
4020  address: {
4021    address: sandboxPath
4022  },
4023  timeout: 6000
4024}
4025client.connect(connectOpt).then(() => {
4026  console.log('connect success');
4027  client.getExtraOptions().then((options : socket.ExtraOptionsBase) => {
4028    console.log('options: ' + JSON.stringify(options));
4029  }).catch((err: Object) => {
4030    console.error('setExtraOptions fail: ' + JSON.stringify(err));
4031  });
4032}).catch((err: Object) => {
4033  console.error('connect fail: ' + JSON.stringify(err));
4034});
4035```
4036
4037### on('message')<sup>11+</sup>
4038
4039on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void
4040
4041订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4042
4043**系统能力**:SystemCapability.Communication.NetStack
4044
4045**参数:**
4046
4047| 参数名   | 类型                                              | 必填 | 说明                                      |
4048| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
4049| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。 |
4050| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收的消息。|
4051
4052**示例:**
4053
4054```ts
4055import socket from "@ohos.net.socket";
4056let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4057client.on('message', (value: socket.LocalSocketMessageInfo) => {
4058  const uintArray = new Uint8Array(value.message)
4059  let messageView = '';
4060  for (let i = 0; i < uintArray.length; i++) {
4061    messageView += String.fromCharCode(uintArray[i]);
4062  }
4063  console.log('total: ' + JSON.stringify(value));
4064  console.log('message infomation: ' + messageView);
4065});
4066```
4067
4068### off('message')<sup>11+</sup>
4069
4070off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
4071
4072取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4073
4074> **说明:**
4075> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4076
4077**系统能力**:SystemCapability.Communication.NetStack
4078
4079**参数:**
4080
4081| 参数名   | 类型                                               | 必填 | 说明                                 |
4082| -------- | ------------------------------------------------ | ---- | ----------------------------------- |
4083| type     | string                                           | 是   | 订阅的事件类型。'message':接收消息事件。 |
4084| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 指定传入on中的callback取消一个订阅。|
4085
4086**示例:**
4087
4088```ts
4089import socket from "@ohos.net.socket";
4090let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4091let messageView = '';
4092let callback = (value: socket.LocalSocketMessageInfo) => {
4093  const uintArray = new Uint8Array(value.message)
4094  let messageView = '';
4095  for (let i = 0; i < uintArray.length; i++) {
4096    messageView += String.fromCharCode(uintArray[i]);
4097  }
4098  console.log('total: ' + JSON.stringify(value));
4099  console.log('message infomation: ' + messageView);
4100}
4101client.on('message', callback);
4102client.off('message');
4103```
4104
4105### on('connect')<sup>11+</sup>
4106
4107on(type: 'connect', callback: Callback\<void\>): void;
4108
4109订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4110
4111**系统能力**:SystemCapability.Communication.NetStack
4112
4113**参数:**
4114
4115| 参数名   | 类型             | 必填 | 说明                                                         |
4116| -------- | ---------------- | ---- | --------------------------------------------------------- |
4117| type     | string           | 是   | 订阅的事件类型。                                             |
4118| callback | Callback\<void\> | 是   | 以callback的形式异步返回与服务端连接的结果。                     |
4119
4120**示例:**
4121
4122```ts
4123import socket from "@ohos.net.socket";
4124let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4125client.on('connect', () => {
4126  console.log("on connect success")
4127});
4128```
4129
4130### off('connect')<sup>11+</sup>
4131
4132off(type: 'connect', callback?: Callback\<void\>): void;
4133
4134取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4135
4136**系统能力**:SystemCapability.Communication.NetStack
4137
4138**参数:**
4139
4140| 参数名   | 类型             | 必填 | 说明                                                         |
4141| -------- | ---------------- | ---- | --------------------------------------------------------- |
4142| type     | string           | 是   | 订阅的事件类型。                                             |
4143| callback | Callback\<void\> | 否   | 指定传入on中的callback取消一个订阅。                           |
4144
4145**示例:**
4146
4147```ts
4148import socket from "@ohos.net.socket";
4149let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4150let callback = () => {
4151  console.log("on connect success");
4152}
4153client.on('connect', callback);
4154// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4155client.off('connect', callback);
4156client.off('connect');
4157```
4158
4159### on('close')<sup>11+</sup>
4160
4161on(type: 'close', callback: Callback\<void\>): void;
4162
4163订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4164
4165> **说明:**
4166> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4167
4168**系统能力**:SystemCapability.Communication.NetStack
4169
4170**参数:**
4171
4172| 参数名   | 类型             | 必填 | 说明                        |
4173| -------- | ---------------- | ---- | ------------------------ |
4174| type     | string           | 是   | 订阅LocalSocket的关闭事件。 |
4175| callback | Callback\<void\> | 是   | 以callback的形式异步返回关闭localsocket的结果。|
4176
4177**示例:**
4178
4179```ts
4180import socket from "@ohos.net.socket";
4181let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4182let callback = () => {
4183  console.log("on close success");
4184}
4185client.on('close', callback);
4186```
4187
4188### off('close')<sup>11+</sup>
4189
4190off(type: 'close', callback?: Callback\<void\>): void;
4191
4192订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4193
4194> **说明:**
4195> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4196
4197**系统能力**:SystemCapability.Communication.NetStack
4198
4199**参数:**
4200
4201| 参数名   | 类型             | 必填 | 说明                        |
4202| -------- | ---------------- | ---- | ------------------------ |
4203| type     | string           | 是   | 订阅LocalSocket的关闭事件。 |
4204| callback | Callback\<void\> | 否   | 取消指定传入on中的callback取消一个订阅。|
4205
4206**示例:**
4207
4208```ts
4209import socket from "@ohos.net.socket";
4210let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4211let callback = () => {
4212  console.log("on close success");
4213}
4214client.on('close', callback);
4215// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4216client.off('close', callback);
4217client.off('close');
4218```
4219
4220### on('error')<sup>11+</sup>
4221
4222on(type: 'error', callback: ErrorCallback): void
4223
4224订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
4225
4226**系统能力**:SystemCapability.Communication.NetStack
4227
4228**参数:**
4229
4230| 参数名   | 类型          | 必填 | 说明                            |
4231| -------- | ------------- | ---- | ---------------------------- |
4232| type     | string        | 是   | 订阅LocalSocket的error事件。   |
4233| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
4234
4235**示例:**
4236
4237```ts
4238import socket from "@ohos.net.socket";
4239let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4240client.on('error', (err: Object) => {
4241  console.log("on error, err:" + JSON.stringify(err))
4242});
4243```
4244
4245### off('error')<sup>11+</sup>
4246
4247off(type: 'error', callback?: ErrorCallback): void;
4248
4249取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
4250
4251> **说明:**
4252> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4253
4254**系统能力**:SystemCapability.Communication.NetStack
4255
4256**参数:**
4257
4258| 参数名   | 类型          | 必填 | 说明                             |
4259| -------- | ------------- | ---- | ----------------------------- |
4260| type     | string        | 是   | 取消订阅LocalSocket的error事件。 |
4261| callback | ErrorCallback | 否   | 指定传入on中的callback取消一个订阅。|
4262
4263**示例:**
4264
4265```ts
4266import socket from "@ohos.net.socket";
4267let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4268let callback = (err: Object) => {
4269  console.log("on error, err:" + JSON.stringify(err));
4270}
4271client.on('error', callback);
4272// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4273client.off('error', callback);
4274client.off('error');
4275```
4276
4277## LocalSocketMessageInfo<sup>11+</sup>
4278
4279LocalSocket客户端与服务端通信时接收的数据。
4280
4281**系统能力**:SystemCapability.Communication.NetStack
4282
4283| 名称     | 类型            | 必填 | 说明               |
4284| ------- | --------------- | --- | ------------------ |
4285| message | ArrayBuffer     | 是   | 收到的消息数据。     |
4286| address | string          | 是   | 使用的本地套接字路径。|
4287| size    | number          | 是   | 数据长度。          |
4288
4289## LocalAddress<sup>11+</sup>
4290
4291LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。
4292
4293**系统能力**:SystemCapability.Communication.NetStack
4294
4295| 名称     | 类型       | 必填 | 说明               |
4296| ------- | ---------- | --- | ------------------ |
4297| address | string     | 是   | 本地套接字路径。     |
4298
4299## LocalConnectOptions<sup>11+</sup>
4300
4301LocalSocket客户端在连接服务端时传入的参数信息。
4302
4303**系统能力**:SystemCapability.Communication.NetStack
4304
4305| 名称     | 类型       | 必填 | 说明                            |
4306| ------- | ---------- | --- | ------------------------------ |
4307| address | string     | 是   | 指定的本地套接字路径。            |
4308| timeout | number     | 否   | 连接服务端的超时时间,单位为毫秒。  |
4309
4310## LocalSendOptions<sup>11+</sup>
4311
4312LocalSocket发送请求的参数。
4313
4314**系统能力**:SystemCapability.Communication.NetStack
4315
4316| 名称     | 类型       | 必填 | 说明                 |
4317| ------- | ---------- | --- | ------------------- |
4318| data    | string \| ArrayBuffer | 是   | 需要发送的数据。 |
4319| encoding | string   | 否   | 字符编码。  |
4320
4321## ExtraOptionsBase<sup>7+</sup>
4322
4323Socket套接字的基础属性。
4324
4325**系统能力**:SystemCapability.Communication.NetStack
4326
4327| 名称            | 类型    | 必填 | 说明                              |
4328| ----------------- | ------- | ---- | ----------------------------- |
4329| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte)。     |
4330| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte)。     |
4331| reuseAddress      | boolean | 否   | 是否重用地址。                   |
4332| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。    |
4333
4334## socket.constructLocalSocketServerInstance<sup>11+</sup>
4335
4336constructLocalSocketServerInstance(): LocalSocketServer
4337
4338创建一个LocalSocketServer对象。
4339
4340**系统能力**:SystemCapability.Communication.NetStack
4341
4342**返回值:**
4343
4344| 类型                                | 说明                          |
4345| :---------------------------------- | :---------------------------- |
4346| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 |
4347
4348**示例:**
4349
4350```ts
4351import socket from "@ohos.net.socket";
4352let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4353```
4354
4355## LocalSocketServer<sup>11+</sup>
4356
4357LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。
4358
4359### listen<sup>11+</sup>
4360
4361listen(address: LocalAddress): Promise\<void\>
4362
4363绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
4364
4365> **说明:**
4366> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。
4367
4368**系统能力**:SystemCapability.Communication.NetStack
4369
4370**参数:**
4371
4372| 参数名  | 类型                      | 必填 | 说明                                          |
4373| ------- | ------------------------- | ---- | --------------------------------------------- |
4374| address | [LocalAddress](#localaddress11) | 是   | 目标地址信息。 |
4375
4376**返回值:**
4377
4378| 类型            | 说明                                                   |
4379| :-------------- | :---------------------------------------------------- |
4380| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。|
4381
4382**错误码:**
4383
4384| 错误码ID | 错误信息                      |
4385| -------- | --------------------------- |
4386| 401      | Parameter error.            |
4387| 2303109  | Bad file number.            |
4388| 2301013  | Insufficient permissions.   |
4389| 2301022  | Invalid argument.           |
4390| 2301098  | Address already in use.     |
4391
4392**示例:**
4393
4394```ts
4395import socket from "@ohos.net.socket";
4396let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4397let sandboxPath: string = getContext().filesDir + '/testSocket'
4398let addr: socket.LocalAddress = {
4399  address: sandboxPath
4400}
4401server.listen(addr).then(() => {
4402  console.log('listen success');
4403}).catch((err: Object) => {
4404  console.error('listen fail: ' + JSON.stringify(err));
4405});
4406```
4407
4408### getState<sup>11+</sup>
4409
4410getState(): Promise\<SocketStateBase\>
4411
4412获取LocalSocketServer状态。使用Promise方式作为异步方法。
4413
4414> **说明:**
4415> listen方法调用成功后,才可调用此方法。
4416
4417**系统能力**:SystemCapability.Communication.NetStack
4418
4419**返回值:**
4420
4421| 类型                                         | 说明                                            |
4422| :------------------------------------------- | :--------------------------------------------- |
4423| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 |
4424
4425**示例:**
4426
4427```ts
4428import socket from "@ohos.net.socket";
4429let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4430let sandboxPath: string = getContext().filesDir + '/testSocket'
4431let listenAddr: socket.LocalAddress = {
4432  address: sandboxPath
4433}
4434server.listen(listenAddr).then(() => {
4435  console.log("listen success");
4436}).catch((err: Object) => {
4437  console.error("listen fail: " + JSON.stringify(err));
4438})
4439server.getState().then((data: socket.SocketStateBase) => {
4440  console.log('getState success: ' + JSON.stringify(data));
4441}).catch((err: Object) => {
4442  console.error('getState fail: ' + JSON.stringify(err));
4443});
4444```
4445
4446### setExtraOptions<sup>11+</sup>
4447
4448setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
4449
4450设置LocalSocketServer连接的套接字属性,使用Promise方式作为异步方法。
4451
4452> **说明:**
4453> listen方法调用成功后,才可调用此方法。
4454
4455**系统能力**:SystemCapability.Communication.NetStack
4456
4457**参数:**
4458
4459| 参数名  | 类型                                      | 必填 | 说明                            |
4460| ------- | --------------------------------------- | ---- | ------------------------------ |
4461| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocketServer连接的其他属性。 |
4462
4463**返回值:**
4464
4465| 类型            | 说明                                             |
4466| :-------------- | :---------------------------------------------- |
4467| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
4468
4469**错误码:**
4470
4471| 错误码ID | 错误信息                        |
4472| -------- | ------------------------------- |
4473| 401      | Parameter error.                |
4474| 2301009  | Bad file descriptor.            |
4475
4476**示例:**
4477
4478```ts
4479import socket from "@ohos.net.socket";
4480let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4481let sandboxPath: string = getContext().filesDir + '/testSocket'
4482let listenAddr: socket.NetAddress = {
4483  address: sandboxPath
4484}
4485server.listen(listenAddr).then(() => {
4486  console.log("listen success");
4487}).catch((err: Object) => {
4488  console.error("listen fail: " + JSON.stringify(err));
4489})
4490
4491let options: socket.ExtraOptionsBase = {
4492  receiveBufferSize: 6000,
4493  sendBufferSize: 6000,
4494  socketTimeout: 3000
4495}
4496server.setExtraOptions(options).then(() => {
4497  console.log('setExtraOptions success');
4498}).catch((err: Object) => {
4499  console.error('setExtraOptions fail: ' + JSON.stringify(err));
4500});
4501```
4502
4503### getExtraOptions<sup>11+</sup>
4504
4505getExtraOptions(): Promise\<ExtraOptionsBase\>;
4506
4507获取LocalSocketServer中连接的套接字的属性,使用Promise方式作为异步方法。
4508
4509> **说明:**
4510> listen方法调用成功后,才可调用此方法。
4511
4512**系统能力**:SystemCapability.Communication.NetStack
4513
4514**返回值:**
4515
4516| 类型                         | 说明                        |
4517| :-------------------------- | :-------------------------- |
4518| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 |
4519
4520**错误码:**
4521
4522| 错误码ID | 错误信息               |
4523| -------- | -------------------- |
4524| 401     | Parameter error. |
4525
4526**示例:**
4527
4528```ts
4529import socket from "@ohos.net.socket";
4530let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4531let sandboxPath: string = getContext(this).filesDir + '/testSocket'
4532let listenAddr: socket.LocalAddress = {
4533  address: sandboxPath
4534}
4535server.listen(listenAddr).then(() => {
4536  console.log("listen success");
4537}).catch((err: Object) => {
4538  console.error("listen fail: " + JSON.stringify(err));
4539})
4540server.getExtraOptions().then((options) => {
4541  console.log('options: ' + JSON.stringify(options));
4542}).catch((err: Object) => {
4543  console.error('getExtraOptions fail: ' + JSON.stringify(err));
4544});
4545```
4546
4547### on('connect')<sup>11+</sup>
4548
4549on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void
4550
4551订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
4552
4553> **说明:**
4554> listen方法调用成功后,才可调用此方法。
4555
4556**系统能力**:SystemCapability.Communication.NetStack
4557
4558**参数:**
4559
4560| 参数名   | 类型                            | 必填 | 说明                                  |
4561| -------- | ------------------------------- | ---- | ------------------------------------- |
4562| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
4563| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是   | 以callback的形式异步返回接收到客户端连接的结果。|
4564
4565**错误码:**
4566
4567| 错误码ID | 错误信息         |
4568| -------- | ---------------- |
4569| 401      | Parameter error. |
4570
4571**示例:**
4572
4573```ts
4574import socket from "@ohos.net.socket";
4575let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4576server.on('connect', (connection: socket.LocalSocketConnection) => {
4577  if (connection) {
4578    console.log('accept a client')
4579  }
4580});
4581```
4582
4583### off('connect')<sup>11+</sup>
4584
4585off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void
4586
4587取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
4588
4589> **说明:**
4590> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4591
4592**系统能力**:SystemCapability.Communication.NetStack
4593
4594**参数:**
4595
4596| 参数名   | 类型                            | 必填 | 说明                                  |
4597| -------- | ------------------------------- | ---- | ------------------------------------- |
4598| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
4599| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否   | 指定传入on的一个callback取消注册。|
4600
4601**错误码:**
4602
4603| 错误码ID | 错误信息         |
4604| -------- | ---------------- |
4605| 401      | Parameter error. |
4606
4607**示例:**
4608
4609```ts
4610import socket from "@ohos.net.socket";
4611let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4612let callback = (connection: socket.LocalSocketConnection) => {
4613  if (connection) {
4614    console.log('accept a client')
4615  }
4616}
4617server.on('connect', callback);
4618// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4619server.off('connect', callback);
4620server.off('connect');
4621```
4622
4623### on('error')<sup>11+</sup>
4624
4625on(type: 'error', callback: ErrorCallback): void
4626
4627订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
4628
4629> **说明:**
4630> listen方法调用成功后,才可调用此方法。
4631
4632**系统能力**:SystemCapability.Communication.NetStack
4633
4634**参数:**
4635
4636| 参数名   | 类型          | 必填 | 说明                                 |
4637| -------- | ------------- | ---- | ------------------------------------ |
4638| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
4639| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
4640
4641**错误码:**
4642
4643| 错误码ID | 错误信息         |
4644| -------- | ---------------- |
4645| 401      | Parameter error. |
4646
4647**示例:**
4648
4649```ts
4650import socket from "@ohos.net.socket";
4651let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4652server.on('error', (err: Object) => {
4653  console.error("on error, err:" + JSON.stringify(err))
4654});
4655```
4656
4657### off('error')<sup>11+</sup>
4658
4659off(type: 'error', callback?: ErrorCallback): void
4660
4661取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
4662
4663> **说明:**
4664> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4665
4666**系统能力**:SystemCapability.Communication.NetStack
4667
4668**参数:**
4669
4670| 参数名   | 类型          | 必填 | 说明                                 |
4671| -------- | ------------- | ---- | ------------------------------------ |
4672| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
4673| callback | ErrorCallback | 否   | 指定传入on的一个callback取消订阅。   |
4674
4675**错误码:**
4676
4677| 错误码ID | 错误信息         |
4678| -------- | ---------------- |
4679| 401      | Parameter error. |
4680
4681**示例:**
4682
4683```ts
4684import socket from "@ohos.net.socket";
4685let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4686let callback = (err: Object) => {
4687  console.error("on error, err:" + JSON.stringify(err));
4688}
4689server.on('error', callback);
4690// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4691server.off('error', callback);
4692server.off('error');
4693```
4694
4695
4696## LocalSocketConnection<sup>11+</sup>
4697
4698LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。
4699
4700> **说明:**
4701> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。
4702
4703**系统能力**:SystemCapability.Communication.NetStack
4704
4705### 属性
4706
4707| 名称     | 类型   | 必填 | 说明                            |
4708| -------- | ------ | ---- | ---------------------------- |
4709| clientId | number | 是   | 客户端与服务端建立的会话连接的id。 |
4710
4711### send<sup>11+</sup>
4712
4713send(options: LocalSendOptions): Promise\<void\>
4714
4715通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。
4716
4717> **说明:**
4718> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。
4719
4720**系统能力**:SystemCapability.Communication.NetStack
4721
4722**参数:**
4723
4724| 参数名  | 类型                              | 必填 | 说明                                                         |
4725| ------- | --------------------------------- | ---- | -------------------------------------- |
4726| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocketConnection发送请求的参数。 |
4727
4728**返回值:**
4729
4730| 类型            | 说明                                             |
4731| :-------------- | :---------------------------------------------- |
4732| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
4733
4734**错误码:**
4735
4736| 错误码ID | 错误信息               |
4737| -------- | ---------------------- |
4738| 401      | Parameter error.       |
4739| 2301011  | Operation would block. |
4740
4741**示例:**
4742
4743```ts
4744import socket from "@ohos.net.socket";
4745let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4746
4747server.on('connect', (connection: socket.LocalSocketConnection) => {
4748  let sendOptions: socket.LocalSendOptions = {
4749    data: 'Hello, client!'
4750  }
4751  connection.send(sendOptions).then(() => {
4752    console.log('send success');
4753  }).catch((err: Object) => {
4754    console.error('send fail: ' + JSON.stringify(err));
4755  });
4756});
4757```
4758
4759### close<sup>11+</sup>
4760
4761close(): Promise\<void\>
4762
4763关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。
4764
4765**系统能力**:SystemCapability.Communication.NetStack
4766
4767**返回值:**
4768
4769| 类型            | 说明                                         |
4770| :-------------- | :------------------------------------------- |
4771| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
4772
4773**错误码:**
4774
4775| 错误码ID | 错误信息               |
4776| -------- | -------------------- |
4777| 201      | Permission denied.   |
4778| 2301009  | Bad file descriptor. |
4779
4780**示例:**
4781
4782```ts
4783import socket from "@ohos.net.socket";
4784let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4785server.on('connect', (connection: socket.LocalSocketConnection) => {
4786  connection.close().then(() => {
4787    console.log('close success');
4788  }).catch((err: Object) => {
4789    console.error('close fail: ' + JSON.stringify(err));
4790  });
4791});
4792```
4793
4794### on('message')<sup>11+</sup>
4795
4796on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void;
4797
4798订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
4799
4800**系统能力**:SystemCapability.Communication.NetStack
4801
4802**参数:**
4803
4804| 参数名   | 类型                                              | 必填 | 说明                                     |
4805| -------- | ----------------------------------------------- | ---- | --------------------------------------- |
4806| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。     |
4807| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收到的来自客户端的消息。 |
4808
4809**错误码:**
4810
4811| 错误码ID | 错误信息         |
4812| -------- | ---------------- |
4813| 401      | Parameter error. |
4814
4815**示例:**
4816
4817```ts
4818import socket from "@ohos.net.socket";
4819let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4820let sandboxPath: string = getContext().filesDir + '/testSocket'
4821let listenAddr: socket.LocalAddress = {
4822  address: sandboxPath
4823}
4824server.listen(listenAddr).then(() => {
4825  console.log("listen success");
4826}).catch((err: Object) => {
4827  console.error("listen fail: " + JSON.stringify(err));
4828});
4829server.on('connect', (connection: socket.LocalSocketConnection) => {
4830  connection.on('message', (value: socket.LocalSocketMessageInfo) => {
4831    const uintArray = new Uint8Array(value.message);
4832    let messageView = '';
4833    for (let i = 0; i < uintArray.length; i++) {
4834      messageView += String.fromCharCode(uintArray[i]);
4835    }
4836    console.log('total: ' + JSON.stringify(value));
4837    console.log('message infomation: ' + messageView);
4838  });
4839});
4840```
4841
4842### off('message')<sup>11+</sup>
4843
4844off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
4845
4846取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
4847
4848> **说明:**
4849> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4850
4851**系统能力**:SystemCapability.Communication.NetStack
4852
4853**参数:**
4854
4855| 参数名   | 类型                                              | 必填 | 说明                                 |
4856| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
4857| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。 |
4858| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 指定传入on的一个callback取消注册。 |
4859
4860**错误码:**
4861
4862| 错误码ID | 错误信息         |
4863| -------- | ---------------- |
4864| 401      | Parameter error. |
4865
4866**示例:**
4867
4868```ts
4869import socket from "@ohos.net.socket";
4870let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4871let callback = (value: socket.LocalSocketMessageInfo) => {
4872  const uintArray = new Uint8Array(value.message)
4873  let messageView = '';
4874  for (let i = 0; i < uintArray.length; i++) {
4875    messageView += String.fromCharCode(uintArray[i]);
4876  }
4877  console.log('total: ' + JSON.stringify(value));
4878  console.log('message infomation: ' + messageView);
4879}
4880server.on('connect', (connection: socket.LocalSocketConnection) => {
4881  connection.on('message', callback);
4882  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4883  connection.off('message', callback);
4884  connection.off('message');
4885});
4886```
4887
4888### on('close')<sup>11+</sup>
4889
4890on(type: 'close', callback: Callback\<void\>): void
4891
4892订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
4893
4894**系统能力**:SystemCapability.Communication.NetStack
4895
4896**参数:**
4897
4898| 参数名   | 类型             | 必填 | 说明                                |
4899| -------- | ---------------- | ---- | ----------------------------------- |
4900| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
4901| callback | Callback\<void\> | 是   | 以callback的形式异步返回会话关闭的结果。 |
4902
4903**错误码:**
4904
4905| 错误码ID | 错误信息         |
4906| -------- | ---------------- |
4907| 401      | Parameter error. |
4908
4909**示例:**
4910
4911```ts
4912import socket from "@ohos.net.socket";
4913let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4914server.on('connect', (connection: socket.LocalSocketConnection) => {
4915  connection.on('close', () => {
4916    console.log("on close success")
4917  });
4918});
4919```
4920
4921### off('close')<sup>11+</sup>
4922
4923off(type: 'close', callback?: Callback\<void\>): void
4924
4925取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
4926
4927> **说明:**
4928> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4929
4930**系统能力**:SystemCapability.Communication.NetStack
4931
4932**参数:**
4933
4934| 参数名   | 类型             | 必填 | 说明                                |
4935| -------- | ---------------- | ---- | ----------------------------------- |
4936| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
4937| callback | Callback\<void\> | 否   | 指定传入on的一个callback取消订阅。 |
4938
4939**错误码:**
4940
4941| 错误码ID | 错误信息         |
4942| -------- | ---------------- |
4943| 401      | Parameter error. |
4944
4945**示例:**
4946
4947```ts
4948import socket from "@ohos.net.socket";
4949let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4950let callback = () => {
4951  console.log("on close success");
4952}
4953server.on('connect', (connection: socket.LocalSocketConnection) => {
4954  connection.on('close', callback);
4955  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4956  connection.off('close', callback);
4957  connection.off('close');
4958});
4959```
4960
4961### on('error')<sup>11+</sup>
4962
4963on(type: 'error', callback: ErrorCallback): void
4964
4965订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
4966
4967**系统能力**:SystemCapability.Communication.NetStack
4968
4969**参数:**
4970
4971| 参数名   | 类型          | 必填 | 说明                                 |
4972| -------- | ------------- | ---- | ------------------------------------ |
4973| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
4974| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
4975
4976**错误码:**
4977
4978| 错误码ID | 错误信息         |
4979| -------- | ---------------- |
4980| 401      | Parameter error. |
4981
4982**示例:**
4983
4984```ts
4985import socket from "@ohos.net.socket";
4986let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4987server.on('connect', (connection: socket.LocalSocketConnection) => {
4988  connection.on('error', (err: Object) => {
4989    console.error("on error, err:" + JSON.stringify(err))
4990  });
4991});
4992```
4993
4994### off('error')<sup>11+</sup>
4995
4996off(type: 'error', callback?: ErrorCallback): void
4997
4998取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
4999
5000> **说明:**
5001> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5002
5003**系统能力**:SystemCapability.Communication.NetStack
5004
5005**参数:**
5006
5007| 参数名   | 类型          | 必填 | 说明                                 |
5008| -------- | ------------- | ---- | ------------------------------------ |
5009| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5010| callback | ErrorCallback | 否   | 指定传入on的一个callback取消订阅。   |
5011
5012**错误码:**
5013
5014| 错误码ID | 错误信息         |
5015| -------- | ---------------- |
5016| 401      | Parameter error. |
5017
5018**示例:**
5019
5020```ts
5021import socket from "@ohos.net.socket";
5022let callback = (err: Object) => {
5023  console.error("on error, err: " + JSON.stringify(err));
5024}
5025let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5026server.on('connect', (connection: socket.LocalSocketConnection) => {
5027  connection.on('error', callback);
5028  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5029  connection.off('error', callback);
5030  connection.off('error');
5031});
5032```
5033
5034## LocalSocket 错误码说明
5035
5036LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。
5037
5038错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
5039
5040## socket.constructTLSSocketInstance<sup>9+</sup>
5041
5042constructTLSSocketInstance(): TLSSocket
5043
5044创建并返回一个TLSSocket对象。
5045
5046**系统能力**:SystemCapability.Communication.NetStack
5047
5048**返回值:**
5049
5050| 类型                               | 说明                    |
5051|  --------------------------------- |  ---------------------- |
5052| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
5053
5054**示例:**
5055
5056```ts
5057import socket from "@ohos.net.socket";
5058let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5059```
5060
5061## TLSSocket<sup>9+</sup>
5062
5063TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。
5064
5065### bind<sup>9+</sup>
5066
5067bind(address: NetAddress, callback: AsyncCallback\<void\>): void
5068
5069绑定IP地址和端口。使用callback方法作为异步方法。
5070
5071**需要权限**:ohos.permission.INTERNET
5072
5073**系统能力**:SystemCapability.Communication.NetStack
5074
5075**参数:**
5076
5077| 参数名   | 类型                               | 必填 | 说明                                                   |
5078| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
5079| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
5080| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。 失败返回错误码,错误信息。|
5081
5082**错误码:**
5083
5084| 错误码ID | 错误信息                 |
5085| ------- | ----------------------- |
5086| 401     | Parameter error.        |
5087| 201     | Permission denied.      |
5088| 2303198 | Address already in use. |
5089| 2300002 | System internal error.  |
5090
5091**示例:**
5092
5093```ts
5094import socket from "@ohos.net.socket";
5095import { BusinessError } from '@ohos.base';
5096let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5097let bindAddr: socket.NetAddress = {
5098  address: '192.168.xx.xxx',
5099  port: 8080
5100}
5101tls.bind(bindAddr, (err: BusinessError) => {
5102  if (err) {
5103    console.log('bind fail');
5104    return;
5105  }
5106  console.log('bind success');
5107});
5108```
5109
5110### bind<sup>9+</sup>
5111
5112bind(address: NetAddress): Promise\<void\>
5113
5114绑定IP地址和端口。使用Promise方法作为异步方法。
5115
5116**需要权限**:ohos.permission.INTERNET
5117
5118**系统能力**:SystemCapability.Communication.NetStack
5119
5120**参数:**
5121
5122| 参数名  | 类型                               | 必填 | 说明                                                   |
5123| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
5124| address | [NetAddress](#netaddress)          | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
5125
5126**返回值:**
5127
5128| 类型            | 说明                                                     |
5129|  -------------- |  ------------------------------------------------------- |
5130| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 |
5131
5132**错误码:**
5133
5134| 错误码ID | 错误信息                 |
5135| ------- | ----------------------- |
5136| 401     | Parameter error.        |
5137| 201     | Permission denied.      |
5138| 2303198 | Address already in use. |
5139| 2300002 | System internal error.  |
5140
5141**示例:**
5142
5143```ts
5144import socket from "@ohos.net.socket";
5145import { BusinessError } from '@ohos.base';
5146let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5147let bindAddr: socket.NetAddress = {
5148  address: '192.168.xx.xxx',
5149  port: 8080
5150}
5151tls.bind(bindAddr).then(() => {
5152  console.log('bind success');
5153}).catch((err: BusinessError) => {
5154  console.log('bind fail');
5155});
5156```
5157
5158### getState<sup>9+</sup>
5159
5160getState(callback: AsyncCallback\<SocketStateBase\>): void
5161
5162在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。
5163
5164**系统能力**:SystemCapability.Communication.NetStack
5165
5166**参数:**
5167
5168| 参数名   | 类型                                                   | 必填 | 说明       |
5169| -------- | ------------------------------------------------------ | ---- | ---------- |
5170| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。成功返回TLSSocket状态,失败返回错误码,错误信息。 |
5171
5172**错误码:**
5173
5174| 错误码ID | 错误信息                        |
5175| ------- | ------------------------------ |
5176| 2303188 | Socket operation on non-socket.|
5177| 2300002 | System internal error.         |
5178
5179**示例:**
5180
5181```ts
5182import socket from "@ohos.net.socket";
5183import { BusinessError } from '@ohos.base';
5184let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5185let bindAddr: socket.NetAddress = {
5186  address: '192.168.xx.xxx',
5187  port: 8080
5188}
5189tls.bind(bindAddr, (err: BusinessError) => {
5190  if (err) {
5191    console.log('bind fail');
5192    return;
5193  }
5194  console.log('bind success');
5195});
5196tls.getState((err: BusinessError, data: socket.SocketStateBase) => {
5197  if (err) {
5198    console.log('getState fail');
5199    return;
5200  }
5201  console.log('getState success:' + JSON.stringify(data));
5202});
5203```
5204
5205### getState<sup>9+</sup>
5206
5207getState(): Promise\<SocketStateBase\>
5208
5209在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。
5210
5211**系统能力**:SystemCapability.Communication.NetStack
5212
5213**返回值:**
5214
5215| 类型                                             | 说明                                       |
5216|  ----------------------------------------------- |  ----------------------------------------- |
5217| Promise\<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。|
5218
5219**错误码:**
5220
5221| 错误码ID | 错误信息                        |
5222| ------- | ------------------------------ |
5223| 2303188 | Socket operation on non-socket.|
5224| 2300002 | System internal error.         |
5225
5226**示例:**
5227
5228```ts
5229import socket from "@ohos.net.socket";
5230import { BusinessError } from '@ohos.base';
5231let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5232let bindAddr: socket.NetAddress = {
5233  address: '192.168.xx.xxx',
5234  port: 8080
5235}
5236tls.bind(bindAddr, (err: BusinessError) => {
5237  if (err) {
5238    console.log('bind fail');
5239    return;
5240  }
5241  console.log('bind success');
5242});
5243tls.getState().then(() => {
5244  console.log('getState success');
5245}).catch((err: BusinessError) => {
5246  console.log('getState fail');
5247});
5248```
5249
5250### setExtraOptions<sup>9+</sup>
5251
5252setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
5253
5254在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
5255
5256**系统能力**:SystemCapability.Communication.NetStack
5257
5258**参数:**
5259
5260| 参数名   | 类型                                      | 必填 | 说明                                                         |
5261| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
5262| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
5263| callback | AsyncCallback\<void\>                     | 是   | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码,错误信息。|
5264
5265**错误码:**
5266
5267| 错误码ID | 错误信息                        |
5268| ------- | -----------------------------  |
5269| 401     | Parameter error.               |
5270| 2303188 | Socket operation on non-socket.|
5271| 2300002 | System internal error.         |
5272
5273**示例:**
5274
5275```ts
5276import socket from "@ohos.net.socket";
5277import { BusinessError } from '@ohos.base';
5278let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5279let bindAddr: socket.NetAddress = {
5280  address: '192.168.xx.xxx',
5281  port: 8080
5282}
5283tls.bind(bindAddr, (err: BusinessError) => {
5284  if (err) {
5285    console.log('bind fail');
5286    return;
5287  }
5288  console.log('bind success');
5289});
5290
5291let tcpExtraOptions: socket.TCPExtraOptions = {
5292  keepAlive: true,
5293  OOBInline: true,
5294  TCPNoDelay: true,
5295  socketLinger: { on: true, linger: 10 },
5296  receiveBufferSize: 1000,
5297  sendBufferSize: 1000,
5298  reuseAddress: true,
5299  socketTimeout: 3000
5300}
5301tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
5302  if (err) {
5303    console.log('setExtraOptions fail');
5304    return;
5305  }
5306  console.log('setExtraOptions success');
5307});
5308```
5309
5310### setExtraOptions<sup>9+</sup>
5311
5312setExtraOptions(options: TCPExtraOptions): Promise\<void\>
5313
5314在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
5315
5316**系统能力**:SystemCapability.Communication.NetStack
5317
5318**参数:**
5319
5320| 参数名  | 类型                                      | 必填 | 说明                                                         |
5321| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
5322| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
5323
5324**返回值:**
5325
5326| 类型            | 说明                                                 |
5327|  -------------- |  --------------------------------------------------- |
5328| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 |
5329
5330**错误码:**
5331
5332| 错误码ID | 错误信息                        |
5333| ------- | ------------------------------ |
5334| 401     | Parameter error.               |
5335| 2303188 | Socket operation on non-socket.|
5336| 2300002 | System internal error.         |
5337
5338**示例:**
5339
5340```ts
5341import socket from "@ohos.net.socket";
5342import { BusinessError } from '@ohos.base';
5343let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5344let bindAddr: socket.NetAddress = {
5345  address: '192.168.xx.xxx',
5346  port: 8080
5347}
5348tls.bind(bindAddr, (err: BusinessError) => {
5349  if (err) {
5350    console.log('bind fail');
5351    return;
5352  }
5353  console.log('bind success');
5354});
5355
5356let tcpExtraOptions: socket.TCPExtraOptions = {
5357  keepAlive: true,
5358  OOBInline: true,
5359  TCPNoDelay: true,
5360  socketLinger: { on: true, linger: 10 },
5361  receiveBufferSize: 1000,
5362  sendBufferSize: 1000,
5363  reuseAddress: true,
5364  socketTimeout: 3000
5365}
5366tls.setExtraOptions(tcpExtraOptions).then(() => {
5367  console.log('setExtraOptions success');
5368}).catch((err: BusinessError) => {
5369  console.log('setExtraOptions fail');
5370});
5371```
5372
5373### on('message')<sup>9+</sup>
5374
5375on(type: 'message', callback: Callback\<SocketMessageInfo\>): void;
5376
5377订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
5378
5379**系统能力**:SystemCapability.Communication.NetStack
5380
5381**参数:**
5382
5383| 参数名   | 类型                                                         | 必填 | 说明                                      |
5384| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
5385| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
5386| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。 |
5387
5388**示例:**
5389
5390```ts
5391import socket from "@ohos.net.socket";
5392import { BusinessError } from '@ohos.base';
5393let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5394let messageView = '';
5395tls.on('message', (value: socket.SocketMessageInfo) => {
5396  for (let i: number = 0; i < value.message.byteLength; i++) {
5397    let uint8Array = new Uint8Array(value.message)
5398    let messages = uint8Array[i]
5399    let message = String.fromCharCode(messages);
5400    messageView += message;
5401  }
5402  console.log('on message message: ' + JSON.stringify(messageView));
5403  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
5404});
5405```
5406
5407### off('message')<sup>9+</sup>
5408
5409off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
5410
5411取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
5412
5413> **说明:**
5414> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5415
5416**系统能力**:SystemCapability.Communication.NetStack
5417
5418**参数:**
5419
5420| 参数名   | 类型                                                         | 必填 | 说明                                      |
5421| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
5422| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
5423| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 否   | 回调函数。 |
5424
5425**示例:**
5426
5427```ts
5428import socket from "@ohos.net.socket";
5429import { BusinessError } from '@ohos.base';
5430let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5431let messageView = '';
5432let callback = (value: socket.SocketMessageInfo) => {
5433  for (let i: number = 0; i < value.message.byteLength; i++) {
5434    let uint8Array = new Uint8Array(value.message)
5435    let messages = uint8Array[i]
5436    let message = String.fromCharCode(messages);
5437    messageView += message;
5438  }
5439  console.log('on message message: ' + JSON.stringify(messageView));
5440  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
5441}
5442tls.on('message', callback);
5443// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5444tls.off('message', callback);
5445```
5446### on('connect' | 'close')<sup>9+</sup>
5447
5448on(type: 'connect' | 'close', callback: Callback\<void\>): void
5449
5450订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
5451
5452**系统能力**:SystemCapability.Communication.NetStack
5453
5454**参数:**
5455
5456| 参数名   | 类型             | 必填 | 说明                                                         |
5457| -------- | ---------------- | ---- | ------------------------------------------------------------ |
5458| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
5459| callback | Callback\<void\> | 是   | 回调函数。                                                   |
5460
5461**示例:**
5462
5463```ts
5464import socket from "@ohos.net.socket";
5465import { BusinessError } from '@ohos.base';
5466let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5467tls.on('connect', () => {
5468  console.log("on connect success")
5469});
5470tls.on('close', () => {
5471  console.log("on close success")
5472});
5473```
5474
5475### off('connect' | 'close')<sup>9+</sup>
5476
5477off(type: 'connect' | 'close', callback?: Callback\<void\>): void
5478
5479取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
5480
5481> **说明:**
5482> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5483
5484**系统能力**:SystemCapability.Communication.NetStack
5485
5486**参数:**
5487
5488| 参数名   | 类型             | 必填 | 说明                                                         |
5489| -------- | ---------------- | ---- | ------------------------------------------------------------ |
5490| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
5491| callback | Callback\<void\> | 否   | 回调函数。                                                   |
5492
5493**示例:**
5494
5495```ts
5496import socket from "@ohos.net.socket";
5497import { BusinessError } from '@ohos.base';
5498let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5499let callback1 = () => {
5500  console.log("on connect success");
5501}
5502tls.on('connect', callback1);
5503// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5504tls.off('connect', callback1);
5505tls.off('connect');
5506let callback2 = () => {
5507  console.log("on close success");
5508}
5509tls.on('close', callback2);
5510// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5511tls.off('close', callback2);
5512```
5513
5514### on('error')<sup>9+</sup>
5515
5516on(type: 'error', callback: ErrorCallback): void
5517
5518订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
5519
5520**系统能力**:SystemCapability.Communication.NetStack
5521
5522**参数:**
5523
5524| 参数名   | 类型          | 必填 | 说明                                 |
5525| -------- | ------------- | ---- | ------------------------------------ |
5526| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5527| callback | ErrorCallback | 是   | 回调函数。                           |
5528
5529**示例:**
5530
5531```ts
5532import socket from "@ohos.net.socket";
5533import { BusinessError } from '@ohos.base';
5534let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5535tls.on('error', (err: BusinessError) => {
5536  console.log("on error, err:" + JSON.stringify(err))
5537});
5538```
5539
5540### off('error')<sup>9+</sup>
5541
5542off(type: 'error', callback?: ErrorCallback): void
5543
5544取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
5545
5546> **说明:**
5547> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5548
5549**系统能力**:SystemCapability.Communication.NetStack
5550
5551**参数:**
5552
5553| 参数名   | 类型          | 必填 | 说明                                 |
5554| -------- | ------------- | ---- | ------------------------------------ |
5555| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5556| callback | ErrorCallback | 否   | 回调函数。                           |
5557
5558**示例:**
5559
5560```ts
5561import socket from "@ohos.net.socket";
5562import { BusinessError } from '@ohos.base';
5563let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5564let callback = (err: BusinessError) => {
5565  console.log("on error, err:" + JSON.stringify(err));
5566}
5567tls.on('error', callback);
5568// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5569tls.off('error', callback);
5570```
5571
5572### connect<sup>9+</sup>
5573
5574connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
5575
5576在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。
5577
5578**系统能力**:SystemCapability.Communication.NetStack
5579
5580**参数:**
5581
5582| 参数名   | 类型                                   | 必填 | 说明 |
5583| -------- | ---------------------------------------| ----| --------------- |
5584| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocket连接所需要的参数。|
5585| callback | AsyncCallback\<void\>                  | 是   | 回调函数,成功无返回,失败返回错误码,错误信息。|
5586
5587**错误码:**
5588
5589| 错误码ID | 错误信息                                      |
5590| ------- | -------------------------------------------- |
5591| 401     | Parameter error.                             |
5592| 2303104 | Interrupted system call.                     |
5593| 2303109 | Bad file number.                             |
5594| 2303111 | Resource temporarily unavailable try again.  |
5595| 2303188 | Socket operation on non-socket.              |
5596| 2303191 | Protocol wrong type for socket.              |
5597| 2303198 | Address already in use.                      |
5598| 2303199 | Cannot assign requested address.             |
5599| 2303210 | Connection timed out.                        |
5600| 2303501 | SSL is null.                                 |
5601| 2303502 | Error in tls reading.                        |
5602| 2303503 | Error in tls writing                         |
5603| 2303505 | Error occurred in the tls system call.       |
5604| 2303506 | Error clearing tls connection.               |
5605| 2300002 | System internal error.                       |
5606
5607**示例:**
5608
5609```ts
5610import socket from "@ohos.net.socket";
5611import { BusinessError } from '@ohos.base';
5612let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
5613let bindAddr: socket.NetAddress = {
5614  address: '0.0.0.0',
5615}
5616tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
5617  if (err) {
5618    console.log('bind fail');
5619    return;
5620  }
5621  console.log('bind success');
5622});
5623
5624let tlsConnectOptions: socket.TLSConnectOptions = {
5625  address: {
5626    address: '192.168.xx.xxx',
5627    port: 8080
5628  },
5629  secureOptions: {
5630    key: "xxxx",
5631    cert: "xxxx",
5632    ca: ["xxxx"],
5633    password: "xxxx",
5634    protocols: socket.Protocol.TLSv12,
5635    useRemoteCipherPrefer: true,
5636    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
5637    cipherSuite: "AES256-SHA256"
5638  },
5639  ALPNProtocols: ["spdy/1", "http/1.1"]
5640}
5641
5642tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => {
5643  console.error("connect callback error" + err);
5644});
5645
5646let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
5647tlsOneWay.bind(bindAddr, (err: BusinessError) => {
5648  if (err) {
5649    console.log('bind fail');
5650    return;
5651  }
5652  console.log('bind success');
5653});
5654
5655let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
5656  address: {
5657    address: '192.168.xx.xxx',
5658    port: 8080
5659  },
5660  secureOptions: {
5661    ca: ["xxxx", "xxxx"],
5662    cipherSuite: "AES256-SHA256"
5663  }
5664}
5665tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => {
5666  console.error("connect callback error" + err);
5667});
5668```
5669
5670### connect<sup>9+</sup>
5671
5672connect(options: TLSConnectOptions): Promise\<void\>
5673
5674在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。
5675
5676**系统能力**:SystemCapability.Communication.NetStack
5677
5678**参数:**
5679
5680| 参数名   | 类型                                   | 必填 | 说明 |
5681| -------- | --------------------------------------| ----| --------------- |
5682| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。|
5683
5684**返回值:**
5685
5686| 类型                                        | 说明                          |
5687| ------------------------------------------- | ----------------------------- |
5688| Promise\<void\>                              | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。|
5689
5690**错误码:**
5691
5692| 错误码ID | 错误信息                                      |
5693| ------- | -------------------------------------------- |
5694| 401     | Parameter error.                             |
5695| 2303104 | Interrupted system call.                     |
5696| 2303109 | Bad file number.                             |
5697| 2303111 | Resource temporarily unavailable try again.  |
5698| 2303188 | Socket operation on non-socket.              |
5699| 2303191 | Protocol wrong type for socket.              |
5700| 2303198 | Address already in use.                      |
5701| 2303199 | Cannot assign requested address.             |
5702| 2303210 | Connection timed out.                        |
5703| 2303501 | SSL is null.                                 |
5704| 2303502 | Error in tls reading.                        |
5705| 2303503 | Error in tls writing                         |
5706| 2303505 | Error occurred in the tls system call.       |
5707| 2303506 | Error clearing tls connection.               |
5708| 2300002 | System internal error.                       |
5709
5710**示例:**
5711
5712```ts
5713import socket from "@ohos.net.socket";
5714import { BusinessError } from '@ohos.base';
5715let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
5716let bindAddr: socket.NetAddress = {
5717  address: '0.0.0.0',
5718}
5719tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
5720  if (err) {
5721    console.log('bind fail');
5722    return;
5723  }
5724  console.log('bind success');
5725});
5726
5727let tlsConnectOptions: socket.TLSConnectOptions = {
5728  address: {
5729    address: '192.168.xx.xxx',
5730    port: 8080
5731  },
5732  secureOptions: {
5733    key: "xxxx",
5734    cert: "xxxx",
5735    ca: ["xxxx"],
5736    password: "xxxx",
5737    protocols: socket.Protocol.TLSv12,
5738    useRemoteCipherPrefer: true,
5739    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
5740    cipherSuite: "AES256-SHA256"
5741  },
5742  ALPNProtocols: ["spdy/1", "http/1.1"]
5743}
5744
5745tlsTwoWay.connect(tlsConnectOptions).then(() => {
5746  console.log("connect successfully");
5747}).catch((err: BusinessError) => {
5748  console.log("connect failed " + JSON.stringify(err));
5749});
5750
5751let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
5752tlsOneWay.bind(bindAddr, (err: BusinessError) => {
5753  if (err) {
5754    console.log('bind fail');
5755    return;
5756  }
5757  console.log('bind success');
5758});
5759
5760let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
5761  address: {
5762    address: '192.168.xx.xxx',
5763    port: 8080
5764  },
5765  secureOptions: {
5766    ca: ["xxxx", "xxxx"],
5767    cipherSuite: "AES256-SHA256"
5768  }
5769}
5770tlsOneWay.connect(tlsOneWayConnectOptions).then(() => {
5771  console.log("connect successfully");
5772}).catch((err: BusinessError) => {
5773  console.log("connect failed " + JSON.stringify(err));
5774});
5775```
5776
5777### getRemoteAddress<sup>9+</sup>
5778
5779getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
5780
5781在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
5782
5783**系统能力**:SystemCapability.Communication.NetStack
5784
5785**参数:**
5786
5787| 参数名   | 类型                                              | 必填 | 说明       |
5788| -------- | ------------------------------------------------- | ---- | ---------- |
5789| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码,错误信息。 |
5790
5791**错误码:**
5792
5793| 错误码ID | 错误信息                        |
5794| ------- | -----------------------------  |
5795| 2303188 | Socket operation on non-socket.|
5796| 2300002 | System internal error.         |
5797
5798**示例:**
5799
5800```ts
5801import socket from "@ohos.net.socket";
5802import { BusinessError } from '@ohos.base';
5803let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5804tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
5805  if (err) {
5806    console.log('getRemoteAddress fail');
5807    return;
5808  }
5809  console.log('getRemoteAddress success:' + JSON.stringify(data));
5810});
5811```
5812
5813### getRemoteAddress<sup>9+</sup>
5814
5815getRemoteAddress(): Promise\<NetAddress\>
5816
5817在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
5818
5819**系统能力**:SystemCapability.Communication.NetStack
5820
5821**返回值:**
5822
5823| 类型                                        | 说明                                        |
5824|  ------------------------------------------ |  ------------------------------------------ |
5825| Promise\<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
5826
5827**错误码:**
5828
5829| 错误码ID | 错误信息                        |
5830| ------- | ------------------------------ |
5831| 2303188 | Socket operation on non-socket.|
5832| 2300002 | System internal error.         |
5833
5834**示例:**
5835
5836```ts
5837import socket from "@ohos.net.socket";
5838import { BusinessError } from '@ohos.base';
5839let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5840tls.getRemoteAddress().then(() => {
5841  console.log('getRemoteAddress success');
5842}).catch((err: BusinessError) => {
5843  console.log('getRemoteAddress fail');
5844});
5845```
5846
5847### getCertificate<sup>9+</sup>
5848
5849getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
5850
5851在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。
5852
5853**系统能力**:SystemCapability.Communication.NetStack
5854
5855**参数:**
5856
5857| 参数名   | 类型                                   | 必填 | 说明 |
5858| -------- | ----------------------------------------| ---- | ---------------|
5859| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>    | 是   | 回调函数,成功返回本地的证书,失败返回错误码,错误信息。|
5860
5861**错误码:**
5862
5863| 错误码ID | 错误信息                        |
5864| ------- | ------------------------------ |
5865| 2303501 | SSL is null.                   |
5866| 2303504 | Error looking up x509.         |
5867| 2300002 | System internal error.         |
5868
5869**示例:**
5870
5871```ts
5872import socket from "@ohos.net.socket";
5873import { BusinessError } from '@ohos.base';
5874let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5875tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
5876  if (err) {
5877    console.log("getCertificate callback error = " + err);
5878  } else {
5879    console.log("getCertificate callback = " + data);
5880  }
5881});
5882```
5883
5884### getCertificate<sup>9+</sup>
5885
5886getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
5887
5888在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。
5889
5890**系统能力**:SystemCapability.Communication.NetStack
5891
5892**返回值:**
5893
5894| 类型            | 说明                  |
5895| -------------- | -------------------- |
5896| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
5897
5898**错误码:**
5899
5900| 错误码ID | 错误信息                        |
5901| ------- | ------------------------------ |
5902| 2303501 | SSL is null.                   |
5903| 2303504 | Error looking up x509.         |
5904| 2300002 | System internal error.         |
5905
5906**示例:**
5907
5908```ts
5909import socket from "@ohos.net.socket";
5910import { BusinessError } from '@ohos.base';
5911import util from "@ohos.util";
5912
5913let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5914tls.getCertificate().then((data: socket.X509CertRawData) => {
5915  const decoder = util.TextDecoder.create();
5916  const str = decoder.decodeWithStream(data.data);
5917  console.log("getCertificate: " + str);
5918}).catch((err: BusinessError) => {
5919  console.error("failed" + err);
5920});
5921```
5922
5923### getRemoteCertificate<sup>9+</sup>
5924
5925getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
5926
5927在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。
5928
5929**系统能力**:SystemCapability.Communication.NetStack
5930
5931**参数:**
5932
5933| 参数名    | 类型                                    | 必填  | 说明           |
5934| -------- | ----------------------------------------| ---- | ---------------|
5935| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>  | 是   | 回调函数,返回服务端的证书。失败返回错误码,错误信息。 |
5936
5937**错误码:**
5938
5939| 错误码ID | 错误信息                        |
5940| ------- | ------------------------------ |
5941| 2303501 | SSL is null.                   |
5942| 2300002 | System internal error.         |
5943
5944**示例:**
5945
5946```ts
5947import socket from "@ohos.net.socket";
5948import { BusinessError } from '@ohos.base';
5949let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5950tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
5951  if (err) {
5952    console.log("getRemoteCertificate callback error = " + err);
5953  } else {
5954    console.log("getRemoteCertificate callback = " + data);
5955  }
5956});
5957```
5958
5959### getRemoteCertificate<sup>9+</sup>
5960
5961getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
5962
5963在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。
5964
5965**系统能力**:SystemCapability.Communication.NetStack
5966
5967**返回值:**
5968
5969| 类型            | 说明                  |
5970| -------------- | -------------------- |
5971| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 |
5972
5973**错误码:**
5974
5975| 错误码ID | 错误信息                        |
5976| ------- | ------------------------------ |
5977| 2303501 | SSL is null.                   |
5978| 2300002 | System internal error.         |
5979
5980**示例:**
5981
5982```ts
5983import socket from "@ohos.net.socket";
5984import { BusinessError } from '@ohos.base';
5985let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5986tls.getRemoteCertificate().then((data: socket.X509CertRawData) => {
5987  console.log(data);
5988}).catch((err: BusinessError) => {
5989  console.error("failed" + err);
5990});
5991```
5992
5993### getProtocol<sup>9+</sup>
5994
5995getProtocol(callback: AsyncCallback\<string\>): void
5996
5997在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
5998
5999**系统能力**:SystemCapability.Communication.NetStack
6000
6001**参数:**
6002
6003| 参数名   | 类型                                       | 必填 | 说明           |
6004| -------- | ----------------------------------------| ---- | ---------------|
6005| callback | AsyncCallback\<string\>                  | 是   | 回调函数,返回通信的协议。失败返回错误码,错误信息。|
6006
6007**错误码:**
6008
6009| 错误码ID | 错误信息                        |
6010| ------- | -----------------------------  |
6011| 2303501 | SSL is null.                   |
6012| 2303505 | Error occurred in the tls system call. |
6013| 2300002 | System internal error.         |
6014
6015**示例:**
6016
6017```ts
6018import socket from "@ohos.net.socket";
6019import { BusinessError } from '@ohos.base';
6020let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6021tls.getProtocol((err: BusinessError, data: string) => {
6022  if (err) {
6023    console.log("getProtocol callback error = " + err);
6024  } else {
6025    console.log("getProtocol callback = " + data);
6026  }
6027});
6028```
6029
6030### getProtocol<sup>9+</sup>
6031
6032getProtocol():Promise\<string\>
6033
6034在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
6035
6036**系统能力**:SystemCapability.Communication.NetStack
6037
6038**返回值:**
6039
6040| 类型            | 说明                  |
6041| -------------- | -------------------- |
6042| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
6043
6044**错误码:**
6045
6046| 错误码ID | 错误信息                        |
6047| ------- | ------------------------------ |
6048| 2303501 | SSL is null.                   |
6049| 2303505 | Error occurred in the tls system call. |
6050| 2300002 | System internal error.         |
6051
6052**示例:**
6053
6054```ts
6055import socket from "@ohos.net.socket";
6056import { BusinessError } from '@ohos.base';
6057let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6058tls.getProtocol().then((data: string) => {
6059  console.log(data);
6060}).catch((err: BusinessError) => {
6061  console.error("failed" + err);
6062});
6063```
6064
6065### getCipherSuite<sup>9+</sup>
6066
6067getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
6068
6069在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
6070
6071**系统能力**:SystemCapability.Communication.NetStack
6072
6073**参数:**
6074
6075| 参数名   | 类型                                     | 必填 | 说明 |
6076| -------- | ----------------------------------------| ---- | ---------------|
6077| callback | AsyncCallback\<Array\<string\>\>          | 是   | 回调函数,返回通信双方支持的加密套件。 失败返回错误码,错误信息。 |
6078
6079**错误码:**
6080
6081| 错误码ID | 错误信息                        |
6082| ------- | ------------------------------ |
6083| 2303501 | SSL is null.                   |
6084| 2303502 | Error in tls reading.          |
6085| 2303505 | Error occurred in the tls system call. |
6086| 2300002 | System internal error.         |
6087
6088**示例:**
6089
6090```ts
6091import socket from "@ohos.net.socket";
6092import { BusinessError } from '@ohos.base';
6093let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6094tls.getCipherSuite((err: BusinessError, data: Array<string>) => {
6095  if (err) {
6096    console.log("getCipherSuite callback error = " + err);
6097  } else {
6098    console.log("getCipherSuite callback = " + data);
6099  }
6100});
6101```
6102
6103### getCipherSuite<sup>9+</sup>
6104
6105getCipherSuite(): Promise\<Array\<string\>\>
6106
6107在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
6108
6109**系统能力**:SystemCapability.Communication.NetStack
6110
6111**返回值:**
6112
6113| 类型                    | 说明                  |
6114| ---------------------- | --------------------- |
6115| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
6116
6117**错误码:**
6118
6119| 错误码ID | 错误信息                        |
6120| ------- | ------------------------------ |
6121| 2303501 | SSL is null.                   |
6122| 2303502 | Error in tls reading.          |
6123| 2303505 | Error occurred in the tls system call. |
6124| 2300002 | System internal error.         |
6125
6126**示例:**
6127
6128```ts
6129import socket from "@ohos.net.socket";
6130import { BusinessError } from '@ohos.base';
6131let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6132tls.getCipherSuite().then((data: Array<string>) => {
6133  console.log('getCipherSuite success:' + JSON.stringify(data));
6134}).catch((err: BusinessError) => {
6135  console.error("failed" + err);
6136});
6137```
6138
6139### getSignatureAlgorithms<sup>9+</sup>
6140
6141getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
6142
6143在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。
6144
6145**系统能力**:SystemCapability.Communication.NetStack
6146
6147**参数:**
6148
6149| 参数名   | 类型                                   | 必填 | 说明            |
6150| -------- | -------------------------------------| ---- | ---------------|
6151| callback | AsyncCallback\<Array\<string\>\>         | 是   | 回调函数,返回双方支持的签名算法。  |
6152
6153**错误码:**
6154
6155| 错误码ID | 错误信息                        |
6156| ------- | ------------------------------ |
6157| 2303501 | SSL is null.                   |
6158| 2300002 | System internal error.         |
6159
6160**示例:**
6161
6162```ts
6163import socket from "@ohos.net.socket";
6164import { BusinessError } from '@ohos.base';
6165let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6166tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
6167  if (err) {
6168    console.log("getSignatureAlgorithms callback error = " + err);
6169  } else {
6170    console.log("getSignatureAlgorithms callback = " + data);
6171  }
6172});
6173```
6174
6175### getSignatureAlgorithms<sup>9+</sup>
6176
6177getSignatureAlgorithms(): Promise\<Array\<string\>\>
6178
6179在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。
6180
6181**系统能力**:SystemCapability.Communication.NetStack
6182
6183**返回值:**
6184
6185| 类型                    | 说明                  |
6186| ---------------------- | -------------------- |
6187| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
6188
6189**错误码:**
6190
6191| 错误码ID | 错误信息                        |
6192| ------- | ------------------------------ |
6193| 2303501 | SSL is null.                   |
6194| 2300002 | System internal error.         |
6195
6196**示例:**
6197
6198```ts
6199import socket from "@ohos.net.socket";
6200import { BusinessError } from '@ohos.base';
6201let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6202tls.getSignatureAlgorithms().then((data: Array<string>) => {
6203  console.log("getSignatureAlgorithms success" + data);
6204}).catch((err: BusinessError) => {
6205  console.error("failed" + err);
6206});
6207```
6208
6209### send<sup>9+</sup>
6210
6211send(data: string, callback: AsyncCallback\<void\>): void
6212
6213在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。
6214
6215**系统能力**:SystemCapability.Communication.NetStack
6216
6217**参数:**
6218
6219| 参数名    | 类型                          | 必填 | 说明            |
6220| -------- | -----------------------------| ---- | ---------------|
6221|   data   | string                       | 是   | 发送的数据内容。   |
6222| callback | AsyncCallback\<void\>         | 是   | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
6223
6224**错误码:**
6225
6226| 错误码ID | 错误信息                                      |
6227| ------- | -------------------------------------------- |
6228| 401     | Parameter error.                             |
6229| 2303501 | SSL is null.                                 |
6230| 2303503 | Error in tls writing.                         |
6231| 2303505 | Error occurred in the tls system call.       |
6232| 2303506 | Error clearing tls connection.               |
6233| 2300002 | System internal error.                       |
6234
6235**示例:**
6236
6237```ts
6238import socket from "@ohos.net.socket";
6239import { BusinessError } from '@ohos.base';
6240let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6241tls.send("xxxx", (err: BusinessError) => {
6242  if (err) {
6243    console.log("send callback error = " + err);
6244  } else {
6245    console.log("send success");
6246  }
6247});
6248```
6249
6250### send<sup>9+</sup>
6251
6252send(data: string): Promise\<void\>
6253
6254在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
6255
6256**系统能力**:SystemCapability.Communication.NetStack
6257
6258**参数:**
6259
6260| 参数名    | 类型                          | 必填 | 说明            |
6261| -------- | -----------------------------| ---- | ---------------|
6262|   data   | string                       | 是   | 发送的数据内容。   |
6263
6264**错误码:**
6265
6266| 错误码ID | 错误信息                                      |
6267| ------- | -------------------------------------------- |
6268| 401     | Parameter error.                             |
6269| 2303501 | SSL is null.                                 |
6270| 2303503 | Error in tls writing.                         |
6271| 2303505 | Error occurred in the tls system call.       |
6272| 2303506 | Error clearing tls connection.               |
6273| 2300002 | System internal error.                       |
6274
6275**返回值:**
6276
6277| 类型           | 说明                  |
6278| -------------- | -------------------- |
6279| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
6280
6281**示例:**
6282
6283```ts
6284import socket from "@ohos.net.socket";
6285import { BusinessError } from '@ohos.base';
6286let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6287tls.send("xxxx").then(() => {
6288  console.log("send success");
6289}).catch((err: BusinessError) => {
6290  console.error("failed" + err);
6291});
6292```
6293
6294### close<sup>9+</sup>
6295
6296close(callback: AsyncCallback\<void\>): void
6297
6298在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。
6299
6300**系统能力**:SystemCapability.Communication.NetStack
6301
6302**参数:**
6303
6304| 参数名    | 类型                          | 必填 | 说明            |
6305| -------- | -----------------------------| ---- | ---------------|
6306| callback | AsyncCallback\<void\>         | 是   | 回调函数,成功返回TLSSocket关闭连接的结果。 失败返回错误码,错误信息。 |
6307
6308**错误码:**
6309
6310| 错误码ID | 错误信息                                      |
6311| ------- | -------------------------------------------- |
6312| 401 | Parameter error.                                 |
6313| 2303501 | SSL is null.                                 |
6314| 2303505 | Error occurred in the tls system call.       |
6315| 2303506 | Error clearing tls connection.               |
6316| 2300002 | System internal error.                       |
6317
6318**示例:**
6319
6320```ts
6321import socket from "@ohos.net.socket";
6322import { BusinessError } from '@ohos.base';
6323let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6324tls.close((err: BusinessError) => {
6325  if (err) {
6326    console.log("close callback error = " + err);
6327  } else {
6328    console.log("close success");
6329  }
6330});
6331```
6332
6333### close<sup>9+</sup>
6334
6335close(): Promise\<void\>
6336
6337在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。
6338
6339**系统能力**:SystemCapability.Communication.NetStack
6340
6341**返回值:**
6342
6343| 类型           | 说明                  |
6344| -------------- | -------------------- |
6345| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 |
6346
6347**错误码:**
6348
6349| 错误码ID | 错误信息                                      |
6350| ------- | -------------------------------------------- |
6351| 401 | Parameter error.                                 |
6352| 2303501 | SSL is null.                                 |
6353| 2303505 | Error occurred in the tls system call.       |
6354| 2303506 | Error clearing tls connection.               |
6355| 2300002 | System internal error.                       |
6356
6357**示例:**
6358
6359```ts
6360import socket from "@ohos.net.socket";
6361import { BusinessError } from '@ohos.base';
6362let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6363tls.close().then(() => {
6364  console.log("close success");
6365}).catch((err: BusinessError) => {
6366  console.error("failed" + err);
6367});
6368```
6369
6370## TLSConnectOptions<sup>9+</sup>
6371
6372TLS连接的操作。
6373
6374**系统能力**:SystemCapability.Communication.NetStack
6375
6376| 名称          | 类型                                     | 必填 | 说明            |
6377| -------------- | ------------------------------------- | ---  |-------------- |
6378| address        | [NetAddress](#netaddress)             | 是  |  网关地址。       |
6379| secureOptions  | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。|
6380| ALPNProtocols  | Array\<string\>                         | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。      |
6381
6382## TLSSecureOptions<sup>9+</sup>
6383
6384TLS安全相关操作,其中ca证书为必选参数,其他参数为可选参数。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。
6385
6386**系统能力**:SystemCapability.Communication.NetStack
6387
6388| 名称                 | 类型                                                    | 必填 | 说明                                |
6389| --------------------- | ------------------------------------------------------ | --- |----------------------------------- |
6390| ca                    | string \| Array\<string\>                               | 是 | 服务端的ca证书,用于认证校验服务端的数字证书。|
6391| cert                  | string                                                  | 否 | 本地客户端的数字证书。                 |
6392| key                   | string                                                  | 否 | 本地数字证书的私钥。                   |
6393| password                | string                                                  | 否 | 读取私钥的密码。                      |
6394| protocols             | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。                  |
6395| useRemoteCipherPrefer | boolean                                                 | 否 | 优先使用对等方的密码套件。        |
6396| signatureAlgorithms   | string                                                 | 否 | 通信过程中的签名算法,默认为"" 。              |
6397| cipherSuite           | string                                                 | 否 | 通信过程中的加密套件,默认为"" 。              |
6398
6399## Protocol<sup>9+</sup>
6400
6401TLS通信的协议版本。
6402
6403**系统能力**:SystemCapability.Communication.NetStack
6404
6405| 名称      |    值    | 说明                |
6406| --------- | --------- |------------------ |
6407| TLSv12    | "TLSv1.2" | 使用TLSv1.2协议通信。 |
6408| TLSv13    | "TLSv1.3" | 使用TLSv1.3协议通信。 |
6409
6410## X509CertRawData<sup>9+</sup>
6411
6412存储证书的数据。
6413
6414**系统能力**:SystemCapability.Communication.NetStack
6415
6416## socket.constructTLSSocketServerInstance<sup>10+</sup>
6417
6418constructTLSSocketServerInstance(): TLSSocketServer
6419
6420创建并返回一个TLSSocketServer对象。
6421
6422**系统能力**:SystemCapability.Communication.NetStack
6423
6424**返回值:**
6425
6426| 类型                                  | 说明                          |
6427|  ------------------------------------ |  ---------------------------- |
6428| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 |
6429
6430**示例:**
6431
6432```ts
6433import socket from "@ohos.net.socket";
6434import { BusinessError } from '@ohos.base';
6435let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6436```
6437
6438## TLSSocketServer<sup>10+</sup>
6439
6440TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。
6441
6442### listen<sup>10+</sup>
6443
6444listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
6445
6446绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。
6447
6448**需要权限**:ohos.permission.INTERNET
6449
6450**系统能力**:SystemCapability.Communication.NetStack
6451
6452**参数:**
6453
6454| 参数名   | 类型                                     | 必填 | 说明                                             |
6455| -------- | ---------------------------------------- | ---- | ------------------------------------------------ |
6456| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocketServer连接所需要的参数。                |
6457| callback | AsyncCallback\<void\>                     | 是   | 回调函数,成功返回空,失败返回错误码,错误信息。 |
6458
6459**错误码:**
6460
6461| 错误码ID | 错误信息                                    |
6462| -------- | ------------------------------------------- |
6463| 401      | Parameter error.                            |
6464| 201      | Permission denied.                          |
6465| 2300002  | System internal error.                      |
6466| 2303109  | Bad file number.                            |
6467| 2303111  | Resource temporarily unavailable try again. |
6468| 2303198  | Address already in use.                     |
6469| 2303199  | Cannot assign requested address.            |
6470| 2303501  | SSL is null.                                |
6471| 2303502  | Error in tls reading.                       |
6472| 2303503  | Error in tls writing                        |
6473| 2303505  | Error occurred in the tls system call.      |
6474| 2303506  | Error clearing tls connection.              |
6475
6476**示例:**
6477
6478```ts
6479import socket from "@ohos.net.socket";
6480import { BusinessError } from '@ohos.base';
6481let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6482
6483let tlsConnectOptions: socket.TLSConnectOptions = {
6484  address: {
6485    address: '192.168.xx.xxx',
6486    port: 8080
6487  },
6488  secureOptions: {
6489    key: "xxxx",
6490    cert: "xxxx",
6491    ca: ["xxxx"],
6492    password: "xxxx",
6493    protocols: socket.Protocol.TLSv12,
6494    useRemoteCipherPrefer: true,
6495    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6496    cipherSuite: "AES256-SHA256"
6497  },
6498  ALPNProtocols: ["spdy/1", "http/1.1"]
6499}
6500tlsServer.listen(tlsConnectOptions, (err: BusinessError) => {
6501  console.log("listen callback error" + err);
6502});
6503```
6504
6505### listen<sup>10+</sup>
6506
6507listen(options: TLSConnectOptions): Promise\<void\>
6508
6509绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。
6510
6511**需要权限**:ohos.permission.INTERNET
6512
6513**系统能力**:SystemCapability.Communication.NetStack
6514
6515**参数:**
6516
6517| 参数名  | 类型                                     | 必填 | 说明               |
6518| ------- | ---------------------------------------- | ---- | ------------------ |
6519| options | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。 |
6520
6521**返回值:**
6522
6523| 类型            | 说明                                                      |
6524| --------------- | --------------------------------------------------------- |
6525| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
6526
6527**错误码:**
6528
6529| 错误码ID | 错误信息                                    |
6530| -------- | ------------------------------------------- |
6531| 401      | Parameter error.                            |
6532| 201      | Permission denied.                          |
6533| 2300002  | System internal error.                      |
6534| 2303109  | Bad file number.                            |
6535| 2303111  | Resource temporarily unavailable try again. |
6536| 2303198  | Address already in use.                     |
6537| 2303199  | Cannot assign requested address.            |
6538| 2303501  | SSL is null.                                |
6539| 2303502  | Error in tls reading.                       |
6540| 2303503  | Error in tls writing                        |
6541| 2303505  | Error occurred in the tls system call.      |
6542| 2303506  | Error clearing tls connection.              |
6543
6544**示例:**
6545
6546```ts
6547import socket from "@ohos.net.socket";
6548import { BusinessError } from '@ohos.base';
6549let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6550
6551let tlsConnectOptions: socket.TLSConnectOptions = {
6552  address: {
6553    address: '192.168.xx.xxx',
6554    port: 8080
6555  },
6556  secureOptions: {
6557    key: "xxxx",
6558    cert: "xxxx",
6559    ca: ["xxxx"],
6560    password: "xxxx",
6561    protocols: socket.Protocol.TLSv12,
6562    useRemoteCipherPrefer: true,
6563    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6564    cipherSuite: "AES256-SHA256"
6565  },
6566  ALPNProtocols: ["spdy/1", "http/1.1"]
6567}
6568tlsServer.listen(tlsConnectOptions).then(() => {
6569  console.log("listen callback success");
6570}).catch((err: BusinessError) => {
6571  console.log("failed: " + JSON.stringify(err));
6572});
6573```
6574
6575### getState<sup>10+</sup>
6576
6577getState(callback: AsyncCallback\<SocketStateBase\>): void
6578
6579在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。
6580
6581> **说明:**
6582> listen方法调用成功后,才可调用此方法。
6583
6584**系统能力**:SystemCapability.Communication.NetStack
6585
6586**参数:**
6587
6588| 参数名   | 类型                                                 | 必填 | 说明                                                         |
6589| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
6590| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。成功返回TLSSocketServer状态,失败返回错误码,错误信息。 |
6591
6592**错误码:**
6593
6594| 错误码ID | 错误信息                        |
6595| -------- | ------------------------------- |
6596| 401      | Parameter error.                |
6597| 2303188  | Socket operation on non-socket. |
6598| 2300002  | System internal error.          |
6599
6600**示例:**
6601
6602```ts
6603import socket from "@ohos.net.socket";
6604import { BusinessError } from '@ohos.base';
6605let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6606let tlsConnectOptions: socket.TLSConnectOptions = {
6607  address: {
6608    address: '192.168.xx.xxx',
6609    port: 8080
6610  },
6611  secureOptions: {
6612    key: "xxxx",
6613    cert: "xxxx",
6614    ca: ["xxxx"],
6615    password: "xxxx",
6616    protocols: socket.Protocol.TLSv12,
6617    useRemoteCipherPrefer: true,
6618    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6619    cipherSuite: "AES256-SHA256"
6620  },
6621  ALPNProtocols: ["spdy/1", "http/1.1"]
6622}
6623tlsServer.listen(tlsConnectOptions).then(() => {
6624  console.log("listen callback success");
6625}).catch((err: BusinessError) => {
6626  console.log("failed: " + JSON.stringify(err));
6627});
6628tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
6629  if (err) {
6630    console.log('getState fail');
6631    return;
6632  }
6633  console.log('getState success:' + JSON.stringify(data));
6634});
6635```
6636
6637### getState<sup>10+</sup>
6638
6639getState(): Promise\<SocketStateBase\>
6640
6641在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。
6642
6643> **说明:**
6644> listen方法调用成功后,才可调用此方法。
6645
6646**系统能力**:SystemCapability.Communication.NetStack
6647
6648**返回值:**
6649
6650| 类型                                           | 说明                                                         |
6651|  --------------------------------------------- |  ----------------------------------------------------------- |
6652| Promise\<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 |
6653
6654**错误码:**
6655
6656| 错误码ID | 错误信息                        |
6657| -------- | ------------------------------- |
6658| 2303188  | Socket operation on non-socket. |
6659| 2300002  | System internal error.          |
6660
6661**示例:**
6662
6663```ts
6664import socket from "@ohos.net.socket";
6665import { BusinessError } from '@ohos.base';
6666let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6667let tlsConnectOptions: socket.TLSConnectOptions = {
6668  address: {
6669    address: '192.168.xx.xxx',
6670    port: 8080
6671  },
6672  secureOptions: {
6673    key: "xxxx",
6674    cert: "xxxx",
6675    ca: ["xxxx"],
6676    password: "xxxx",
6677    protocols: socket.Protocol.TLSv12,
6678    useRemoteCipherPrefer: true,
6679    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6680    cipherSuite: "AES256-SHA256"
6681  },
6682  ALPNProtocols: ["spdy/1", "http/1.1"]
6683}
6684tlsServer.listen(tlsConnectOptions).then(() => {
6685  console.log("listen callback success");
6686}).catch((err: BusinessError) => {
6687  console.log("failed: " + JSON.stringify(err));
6688});
6689tlsServer.getState().then(() => {
6690  console.log('getState success');
6691}).catch((err: BusinessError) => {
6692  console.log('getState fail');
6693});
6694```
6695
6696### setExtraOptions<sup>10+</sup>
6697
6698setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
6699
6700在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。
6701
6702> **说明:**
6703> listen方法调用成功后,才可调用此方法。
6704
6705**系统能力**:SystemCapability.Communication.NetStack
6706
6707**参数:**
6708
6709| 参数名   | 类型                                 | 必填 | 说明                                             |
6710| -------- | ------------------------------------ | ---- | ------------------------------------------------ |
6711| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。                  |
6712| callback | AsyncCallback\<void\>                | 是   | 回调函数。成功返回空,失败返回错误码,错误信息。 |
6713
6714**错误码:**
6715
6716| 错误码ID | 错误信息                        |
6717| -------- | ------------------------------- |
6718| 401      | Parameter error.                |
6719| 2303188  | Socket operation on non-socket. |
6720| 2300002  | System internal error.          |
6721
6722**示例:**
6723
6724```ts
6725import socket from "@ohos.net.socket";
6726import { BusinessError } from '@ohos.base';
6727let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6728let tlsConnectOptions: socket.TLSConnectOptions = {
6729  address: {
6730    address: '192.168.xx.xxx',
6731    port: 8080
6732  },
6733  secureOptions: {
6734    key: "xxxx",
6735    cert: "xxxx",
6736    ca: ["xxxx"],
6737    password: "xxxx",
6738    protocols: socket.Protocol.TLSv12,
6739    useRemoteCipherPrefer: true,
6740    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6741    cipherSuite: "AES256-SHA256"
6742  },
6743  ALPNProtocols: ["spdy/1", "http/1.1"]
6744}
6745tlsServer.listen(tlsConnectOptions).then(() => {
6746  console.log("listen callback success");
6747}).catch((err: BusinessError) => {
6748  console.log("failed: " + JSON.stringify(err));
6749});
6750
6751let tcpExtraOptions: socket.TCPExtraOptions = {
6752  keepAlive: true,
6753  OOBInline: true,
6754  TCPNoDelay: true,
6755  socketLinger: { on: true, linger: 10 },
6756  receiveBufferSize: 1000,
6757  sendBufferSize: 1000,
6758  reuseAddress: true,
6759  socketTimeout: 3000
6760}
6761tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
6762  if (err) {
6763    console.log('setExtraOptions fail');
6764    return;
6765  }
6766  console.log('setExtraOptions success');
6767});
6768```
6769
6770### setExtraOptions<sup>10+</sup>
6771
6772setExtraOptions(options: TCPExtraOptions): Promise\<void\>
6773
6774在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。
6775
6776> **说明:**
6777> listen方法调用成功后,才可调用此方法。
6778
6779**系统能力**:SystemCapability.Communication.NetStack
6780
6781**参数:**
6782
6783| 参数名  | 类型                                 | 必填 | 说明                            |
6784| ------- | ------------------------------------ | ---- | ------------------------------- |
6785| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。 |
6786
6787**返回值:**
6788
6789| 类型            | 说明                                                      |
6790|  -------------- |  -------------------------------------------------------- |
6791| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
6792
6793**错误码:**
6794
6795| 错误码ID | 错误信息                        |
6796| -------- | ------------------------------- |
6797| 401      | Parameter error.                |
6798| 2303188  | Socket operation on non-socket. |
6799| 2300002  | System internal error.          |
6800
6801**示例:**
6802
6803```ts
6804import socket from "@ohos.net.socket";
6805import { BusinessError } from '@ohos.base';
6806let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6807let tlsConnectOptions: socket.TLSConnectOptions = {
6808  address: {
6809    address: '192.168.xx.xxx',
6810    port: 8080
6811  },
6812  secureOptions: {
6813    key: "xxxx",
6814    cert: "xxxx",
6815    ca: ["xxxx"],
6816    password: "xxxx",
6817    protocols: socket.Protocol.TLSv12,
6818    useRemoteCipherPrefer: true,
6819    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6820    cipherSuite: "AES256-SHA256"
6821  },
6822  ALPNProtocols: ["spdy/1", "http/1.1"]
6823}
6824tlsServer.listen(tlsConnectOptions).then(() => {
6825  console.log("listen callback success");
6826}).catch((err: BusinessError) => {
6827  console.log("failed: " + JSON.stringify(err));
6828});
6829
6830let tcpExtraOptions: socket.TCPExtraOptions = {
6831  keepAlive: true,
6832  OOBInline: true,
6833  TCPNoDelay: true,
6834  socketLinger: { on: true, linger: 10 },
6835  receiveBufferSize: 1000,
6836  sendBufferSize: 1000,
6837  reuseAddress: true,
6838  socketTimeout: 3000
6839}
6840tlsServer.setExtraOptions(tcpExtraOptions).then(() => {
6841  console.log('setExtraOptions success');
6842}).catch((err: BusinessError) => {
6843  console.log('setExtraOptions fail');
6844});
6845```
6846
6847### getCertificate<sup>10+</sup>
6848
6849getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
6850
6851在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。
6852
6853> **说明:**
6854> listen方法调用成功后,才可调用此方法。
6855
6856**系统能力**:SystemCapability.Communication.NetStack
6857
6858**参数:**
6859
6860| 参数名   | 类型                                                  | 必填 | 说明                                                     |
6861| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- |
6862| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,成功返回本地的证书,失败返回错误码,错误信息。 |
6863
6864**错误码:**
6865
6866| 错误码ID | 错误信息               |
6867| -------- | ---------------------- |
6868| 401      | Parameter error.       |
6869| 2303501  | SSL is null.           |
6870| 2303504  | Error looking up x509. |
6871| 2300002  | System internal error. |
6872
6873**示例:**
6874
6875```ts
6876import socket from "@ohos.net.socket";
6877import { BusinessError } from '@ohos.base';
6878import util from "@ohos.util";
6879
6880let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6881let tlsConnectOptions: socket.TLSConnectOptions = {
6882  address: {
6883    address: '192.168.xx.xxx',
6884    port: 8080
6885  },
6886  secureOptions: {
6887    key: "xxxx",
6888    cert: "xxxx",
6889    ca: ["xxxx"],
6890    password: "xxxx",
6891    protocols: socket.Protocol.TLSv12,
6892    useRemoteCipherPrefer: true,
6893    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6894    cipherSuite: "AES256-SHA256"
6895  },
6896  ALPNProtocols: ["spdy/1", "http/1.1"]
6897}
6898tlsServer.listen(tlsConnectOptions).then(() => {
6899  console.log("listen callback success");
6900}).catch((err: BusinessError) => {
6901  console.log("failed: " + JSON.stringify(err));
6902});
6903tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
6904  if (err) {
6905    console.log("getCertificate callback error = " + err);
6906  } else {
6907    const decoder = util.TextDecoder.create();
6908    const str = decoder.decodeWithStream(data.data);
6909    console.log("getCertificate callback: " + str);
6910  }
6911});
6912```
6913
6914### getCertificate<sup>10+</sup>
6915
6916getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
6917
6918在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。
6919
6920> **说明:**
6921> listen方法调用成功后,才可调用此方法。
6922
6923**系统能力**:SystemCapability.Communication.NetStack
6924
6925**返回值:**
6926
6927| 类型                                            | 说明                                                         |
6928| ----------------------------------------------- | ------------------------------------------------------------ |
6929| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
6930
6931**错误码:**
6932
6933| 错误码ID | 错误信息               |
6934| -------- | ---------------------- |
6935| 2303501  | SSL is null.           |
6936| 2303504  | Error looking up x509. |
6937| 2300002  | System internal error. |
6938
6939**示例:**
6940
6941```ts
6942import socket from "@ohos.net.socket";
6943import { BusinessError } from '@ohos.base';
6944import util from "@ohos.util";
6945
6946let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6947let tlsConnectOptions: socket.TLSConnectOptions = {
6948  address: {
6949    address: '192.168.xx.xxx',
6950    port: 8080
6951  },
6952  secureOptions: {
6953    key: "xxxx",
6954    cert: "xxxx",
6955    ca: ["xxxx"],
6956    password: "xxxx",
6957    protocols: socket.Protocol.TLSv12,
6958    useRemoteCipherPrefer: true,
6959    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6960    cipherSuite: "AES256-SHA256"
6961  },
6962  ALPNProtocols: ["spdy/1", "http/1.1"]
6963}
6964tlsServer.listen(tlsConnectOptions).then(() => {
6965  console.log("listen callback success");
6966}).catch((err: BusinessError) => {
6967  console.log("failed: " + JSON.stringify(err));
6968});
6969tlsServer.getCertificate().then((data: socket.X509CertRawData) => {
6970  const decoder = util.TextDecoder.create();
6971  const str = decoder.decodeWithStream(data.data);
6972  console.log("getCertificate: " + str);
6973}).catch((err: BusinessError) => {
6974  console.error("failed" + err);
6975});
6976```
6977
6978### getProtocol<sup>10+</sup>
6979
6980getProtocol(callback: AsyncCallback\<string\>): void
6981
6982在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
6983
6984> **说明:**
6985> listen方法调用成功后,才可调用此方法。
6986
6987**系统能力**:SystemCapability.Communication.NetStack
6988
6989**参数:**
6990
6991| 参数名   | 类型                    | 必填 | 说明                                                 |
6992| -------- | ----------------------- | ---- | ---------------------------------------------------- |
6993| callback | AsyncCallback\<string\> | 是   | 回调函数,返回通信的协议。失败返回错误码,错误信息。 |
6994
6995**错误码:**
6996
6997| 错误码ID | 错误信息                               |
6998| -------- | -------------------------------------- |
6999| 401      | Parameter error.                       |
7000| 2303501  | SSL is null.                           |
7001| 2303505  | Error occurred in the tls system call. |
7002| 2300002  | System internal error.                 |
7003
7004**示例:**
7005
7006```ts
7007import socket from "@ohos.net.socket";
7008import { BusinessError } from '@ohos.base';
7009let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7010let tlsConnectOptions: socket.TLSConnectOptions = {
7011  address: {
7012    address: '192.168.xx.xxx',
7013    port: 8080
7014  },
7015  secureOptions: {
7016    key: "xxxx",
7017    cert: "xxxx",
7018    ca: ["xxxx"],
7019    password: "xxxx",
7020    protocols: socket.Protocol.TLSv12,
7021    useRemoteCipherPrefer: true,
7022    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7023    cipherSuite: "AES256-SHA256"
7024  },
7025  ALPNProtocols: ["spdy/1", "http/1.1"]
7026}
7027tlsServer.listen(tlsConnectOptions).then(() => {
7028  console.log("listen callback success");
7029}).catch((err: BusinessError) => {
7030  console.log("failed: " + JSON.stringify(err));
7031});
7032tlsServer.getProtocol((err: BusinessError, data: string) => {
7033  if (err) {
7034    console.log("getProtocol callback error = " + err);
7035  } else {
7036    console.log("getProtocol callback = " + data);
7037  }
7038});
7039```
7040
7041### getProtocol<sup>10+</sup>
7042
7043getProtocol():Promise\<string\>
7044
7045在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
7046
7047> **说明:**
7048> listen方法调用成功后,才可调用此方法。
7049
7050**系统能力**:SystemCapability.Communication.NetStack
7051
7052**返回值:**
7053
7054| 类型              | 说明                                                    |
7055| ----------------- | ------------------------------------------------------- |
7056| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
7057
7058**错误码:**
7059
7060| 错误码ID | 错误信息                               |
7061| -------- | -------------------------------------- |
7062| 2303501  | SSL is null.                           |
7063| 2303505  | Error occurred in the tls system call. |
7064| 2300002  | System internal error.                 |
7065
7066**示例:**
7067
7068```ts
7069import socket from "@ohos.net.socket";
7070import { BusinessError } from '@ohos.base';
7071let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7072let tlsConnectOptions: socket.TLSConnectOptions = {
7073  address: {
7074    address: '192.168.xx.xxx',
7075    port: 8080
7076  },
7077  secureOptions: {
7078    key: "xxxx",
7079    cert: "xxxx",
7080    ca: ["xxxx"],
7081    password: "xxxx",
7082    protocols: socket.Protocol.TLSv12,
7083    useRemoteCipherPrefer: true,
7084    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7085    cipherSuite: "AES256-SHA256"
7086  },
7087  ALPNProtocols: ["spdy/1", "http/1.1"]
7088}
7089tlsServer.listen(tlsConnectOptions).then(() => {
7090  console.log("listen callback success");
7091}).catch((err: BusinessError) => {
7092  console.log("failed: " + JSON.stringify(err));
7093});
7094tlsServer.getProtocol().then((data: string) => {
7095  console.log(data);
7096}).catch((err: BusinessError) => {
7097  console.error("failed" + err);
7098});
7099```
7100
7101### on('connect')<sup>10+</sup>
7102
7103on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void
7104
7105订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
7106
7107> **说明:**
7108> listen方法调用成功后,才可调用此方法。
7109
7110**系统能力**:SystemCapability.Communication.NetStack
7111
7112**参数:**
7113
7114| 参数名   | 类型                                                    | 必填 | 说明                                  |
7115| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
7116| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
7117| callback | Callback<[TLSSocketConnection](#tlssocketconnection10)> | 是   | 回调函数。                            |
7118
7119**错误码:**
7120
7121| 错误码ID | 错误信息         |
7122| -------- | ---------------- |
7123| 401      | Parameter error. |
7124
7125**示例:**
7126
7127```ts
7128import socket from "@ohos.net.socket";
7129import { BusinessError } from '@ohos.base';
7130let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7131let tlsConnectOptions: socket.TLSConnectOptions = {
7132  address: {
7133    address: '192.168.xx.xxx',
7134    port: 8080
7135  },
7136  secureOptions: {
7137    key: "xxxx",
7138    cert: "xxxx",
7139    ca: ["xxxx"],
7140    password: "xxxx",
7141    protocols: socket.Protocol.TLSv12,
7142    useRemoteCipherPrefer: true,
7143    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7144    cipherSuite: "AES256-SHA256"
7145  },
7146  ALPNProtocols: ["spdy/1", "http/1.1"]
7147}
7148tlsServer.listen(tlsConnectOptions).then(() => {
7149  console.log("listen callback success");
7150}).catch((err: BusinessError) => {
7151  console.log("failed: " + JSON.stringify(err));
7152});
7153tlsServer.on('connect', (data: socket.TLSSocketConnection) => {
7154  console.log(JSON.stringify(data))
7155});
7156```
7157
7158### off('connect')<sup>10+</sup>
7159
7160off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void
7161
7162取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
7163
7164> **说明:**
7165> listen方法调用成功后,才可调用此方法。
7166> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7167
7168**系统能力**:SystemCapability.Communication.NetStack
7169
7170**参数:**
7171
7172| 参数名   | 类型                                                    | 必填 | 说明                                  |
7173| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
7174| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
7175| callback | Callback<[TLSSocketConnection](#tlssocketconnection10)> | 否   | 回调函数。                            |
7176
7177**错误码:**
7178
7179| 错误码ID | 错误信息         |
7180| -------- | ---------------- |
7181| 401      | Parameter error. |
7182
7183**示例:**
7184
7185```ts
7186import socket from "@ohos.net.socket";
7187import { BusinessError } from '@ohos.base';
7188let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7189let tlsConnectOptions: socket.TLSConnectOptions = {
7190  address: {
7191    address: '192.168.xx.xxx',
7192    port: 8080
7193  },
7194  secureOptions: {
7195    key: "xxxx",
7196    cert: "xxxx",
7197    ca: ["xxxx"],
7198    password: "xxxx",
7199    protocols: socket.Protocol.TLSv12,
7200    useRemoteCipherPrefer: true,
7201    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7202    cipherSuite: "AES256-SHA256"
7203  },
7204  ALPNProtocols: ["spdy/1", "http/1.1"]
7205}
7206tlsServer.listen(tlsConnectOptions).then(() => {
7207  console.log("listen callback success");
7208}).catch((err: BusinessError) => {
7209  console.log("failed: " + JSON.stringify(err));
7210});
7211
7212let callback = (data: socket.TLSSocketConnection) => {
7213  console.log('on connect message: ' + JSON.stringify(data));
7214}
7215tlsServer.on('connect', callback);
7216// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7217tlsServer.off('connect', callback);
7218tlsServer.off('connect');
7219```
7220
7221### on('error')<sup>10+</sup>
7222
7223on(type: 'error', callback: ErrorCallback): void
7224
7225订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
7226
7227> **说明:**
7228> listen方法调用成功后,才可调用此方法。
7229
7230**系统能力**:SystemCapability.Communication.NetStack
7231
7232**参数:**
7233
7234| 参数名   | 类型          | 必填 | 说明                                 |
7235| -------- | ------------- | ---- | ------------------------------------ |
7236| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
7237| callback | ErrorCallback | 是   | 回调函数。                           |
7238
7239**错误码:**
7240
7241| 错误码ID | 错误信息         |
7242| -------- | ---------------- |
7243| 401      | Parameter error. |
7244
7245**示例:**
7246
7247```ts
7248import socket from "@ohos.net.socket";
7249import { BusinessError } from '@ohos.base';
7250let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7251let tlsConnectOptions: socket.TLSConnectOptions = {
7252  address: {
7253    address: '192.168.xx.xxx',
7254    port: 8080
7255  },
7256  secureOptions: {
7257    key: "xxxx",
7258    cert: "xxxx",
7259    ca: ["xxxx"],
7260    password: "xxxx",
7261    protocols: socket.Protocol.TLSv12,
7262    useRemoteCipherPrefer: true,
7263    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7264    cipherSuite: "AES256-SHA256"
7265  },
7266  ALPNProtocols: ["spdy/1", "http/1.1"]
7267}
7268tlsServer.listen(tlsConnectOptions).then(() => {
7269  console.log("listen callback success");
7270}).catch((err: BusinessError) => {
7271  console.log("failed: " + JSON.stringify(err));
7272});
7273tlsServer.on('error', (err: BusinessError) => {
7274  console.log("on error, err:" + JSON.stringify(err))
7275});
7276```
7277
7278### off('error')<sup>10+</sup>
7279
7280off(type: 'error', callback?: ErrorCallback): void
7281
7282取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
7283
7284> **说明:**
7285> listen方法调用成功后,才可调用此方法。
7286> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7287
7288**系统能力**:SystemCapability.Communication.NetStack
7289
7290**参数:**
7291
7292| 参数名   | 类型          | 必填 | 说明                                 |
7293| -------- | ------------- | ---- | ------------------------------------ |
7294| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
7295| callback | ErrorCallback | 否   | 回调函数。                           |
7296
7297**错误码:**
7298
7299| 错误码ID | 错误信息         |
7300| -------- | ---------------- |
7301| 401      | Parameter error. |
7302
7303**示例:**
7304
7305```ts
7306import socket from "@ohos.net.socket";
7307import { BusinessError } from '@ohos.base';
7308let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7309let tlsConnectOptions: socket.TLSConnectOptions = {
7310  address: {
7311    address: '192.168.xx.xxx',
7312    port: 8080
7313  },
7314  secureOptions: {
7315    key: "xxxx",
7316    cert: "xxxx",
7317    ca: ["xxxx"],
7318    password: "xxxx",
7319    protocols: socket.Protocol.TLSv12,
7320    useRemoteCipherPrefer: true,
7321    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7322    cipherSuite: "AES256-SHA256"
7323  },
7324  ALPNProtocols: ["spdy/1", "http/1.1"]
7325}
7326tlsServer.listen(tlsConnectOptions).then(() => {
7327  console.log("listen callback success");
7328}).catch((err: BusinessError) => {
7329  console.log("failed: " + JSON.stringify(err));
7330});
7331
7332let callback = (err: BusinessError) => {
7333  console.log("on error, err:" + JSON.stringify(err));
7334}
7335tlsServer.on('error', callback);
7336// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7337tlsServer.off('error', callback);
7338tlsServer.off('error');
7339```
7340
7341## TLSSocketConnection<sup>10+</sup>
7342
7343TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。
7344
7345> **说明:**
7346> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。
7347
7348**系统能力**:SystemCapability.Communication.NetStack
7349
7350### 属性
7351
7352| 名称     | 类型   | 必填 | 说明                                  |
7353| -------- | ------ | ---- | ------------------------------------- |
7354| clientId | number | 是   | 客户端与TLSSocketServer建立连接的id。 |
7355
7356### send<sup>10+</sup>
7357
7358send(data: string, callback: AsyncCallback\<void\>): void
7359
7360在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。
7361
7362**系统能力**:SystemCapability.Communication.NetStack
7363
7364**参数:**
7365
7366| 参数名   | 类型                  | 必填 | 说明                                             |
7367| -------- | --------------------- | ---- | ------------------------------------------------ |
7368| data     | string                | 是   | TLSSocketServer发送数据所需要的参数。            |
7369| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码,错误信息。 |
7370
7371**错误码:**
7372
7373| 错误码ID | 错误信息                               |
7374| -------- | -------------------------------------- |
7375| 401      | Parameter error.                       |
7376| 2303501  | SSL is null.                           |
7377| 2303503  | Error in tls writing.                  |
7378| 2303505  | Error occurred in the tls system call. |
7379| 2303506  | Error clearing tls connection.         |
7380| 2300002  | System internal error.                 |
7381
7382**示例:**
7383
7384```ts
7385import socket from "@ohos.net.socket";
7386import { BusinessError } from '@ohos.base';
7387let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7388let tlsConnectOptions: socket.TLSConnectOptions = {
7389  address: {
7390    address: '192.168.xx.xxx',
7391    port: 8080
7392  },
7393  secureOptions: {
7394    key: "xxxx",
7395    cert: "xxxx",
7396    ca: ["xxxx"],
7397    password: "xxxx",
7398    protocols: socket.Protocol.TLSv12,
7399    useRemoteCipherPrefer: true,
7400    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7401    cipherSuite: "AES256-SHA256"
7402  },
7403  ALPNProtocols: ["spdy/1", "http/1.1"]
7404}
7405tlsServer.listen(tlsConnectOptions).then(() => {
7406  console.log("listen callback success");
7407}).catch((err: BusinessError) => {
7408  console.log("failed" + err);
7409});
7410
7411tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7412  client.send('Hello, client!', (err: BusinessError) => {
7413    if (err) {
7414      console.log('send fail');
7415      return;
7416    }
7417    console.log('send success');
7418  });
7419});
7420```
7421
7422### send<sup>10+</sup>
7423
7424send(data: string): Promise\<void\>
7425
7426在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
7427
7428**系统能力**:SystemCapability.Communication.NetStack
7429
7430**参数:**
7431
7432| 参数名 | 类型   | 必填 | 说明                                  |
7433| ------ | ------ | ---- | ------------------------------------- |
7434| data   | string | 是   | TLSSocketServer发送数据所需要的参数。 |
7435
7436**返回值:**
7437
7438| 类型            | 说明                                                      |
7439| --------------- | --------------------------------------------------------- |
7440| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
7441
7442**错误码:**
7443
7444| 错误码ID | 错误信息                               |
7445| -------- | -------------------------------------- |
7446| 401      | Parameter error.                       |
7447| 2303501  | SSL is null.                           |
7448| 2303503  | Error in tls writing.                  |
7449| 2303505  | Error occurred in the tls system call. |
7450| 2303506  | Error clearing tls connection.         |
7451| 2300002  | System internal error.                 |
7452
7453**示例:**
7454
7455```ts
7456import socket from "@ohos.net.socket";
7457import { BusinessError } from '@ohos.base';
7458let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7459let tlsConnectOptions: socket.TLSConnectOptions = {
7460  address: {
7461    address: '192.168.xx.xxx',
7462    port: 8080
7463  },
7464  secureOptions: {
7465    key: "xxxx",
7466    cert: "xxxx",
7467    ca: ["xxxx"],
7468    password: "xxxx",
7469    protocols: socket.Protocol.TLSv12,
7470    useRemoteCipherPrefer: true,
7471    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7472    cipherSuite: "AES256-SHA256"
7473  },
7474  ALPNProtocols: ["spdy/1", "http/1.1"]
7475}
7476tlsServer.listen(tlsConnectOptions).then(() => {
7477  console.log("listen callback success");
7478}).catch((err: BusinessError) => {
7479  console.log("failed" + err);
7480});
7481
7482tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7483  client.send('Hello, client!').then(() => {
7484    console.log('send success');
7485  }).catch((err: BusinessError) => {
7486    console.log('send fail');
7487  });
7488});
7489```
7490
7491### close<sup>10+</sup>
7492
7493close(callback: AsyncCallback\<void\>): void
7494
7495在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。
7496
7497**系统能力**:SystemCapability.Communication.NetStack
7498
7499**参数:**
7500
7501| 参数名   | 类型                  | 必填 | 说明                                             |
7502| -------- | --------------------- | ---- | ------------------------------------------------ |
7503| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码,错误信息。 |
7504
7505**错误码:**
7506
7507| 错误码ID | 错误信息                               |
7508| -------- | -------------------------------------- |
7509| 401      | Parameter error.                       |
7510| 2303501  | SSL is null.                           |
7511| 2303505  | Error occurred in the tls system call. |
7512| 2303506  | Error clearing tls connection.         |
7513| 2300002  | System internal error.                 |
7514
7515**示例:**
7516
7517```ts
7518import socket from "@ohos.net.socket";
7519import { BusinessError } from '@ohos.base';
7520let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7521let tlsConnectOptions: socket.TLSConnectOptions = {
7522  address: {
7523    address: '192.168.xx.xxx',
7524    port: 8080
7525  },
7526  secureOptions: {
7527    key: "xxxx",
7528    cert: "xxxx",
7529    ca: ["xxxx"],
7530    password: "xxxx",
7531    protocols: socket.Protocol.TLSv12,
7532    useRemoteCipherPrefer: true,
7533    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7534    cipherSuite: "AES256-SHA256"
7535  },
7536  ALPNProtocols: ["spdy/1", "http/1.1"]
7537}
7538tlsServer.listen(tlsConnectOptions).then(() => {
7539  console.log("listen callback success");
7540}).catch((err: BusinessError) => {
7541  console.log("failed" + err);
7542});
7543
7544tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7545  client.close((err: BusinessError) => {
7546    if (err) {
7547      console.log('close fail');
7548      return;
7549    }
7550    console.log('close success');
7551  });
7552});
7553```
7554
7555### close<sup>10+</sup>
7556
7557close(): Promise\<void\>
7558
7559在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。
7560
7561**系统能力**:SystemCapability.Communication.NetStack
7562
7563**返回值:**
7564
7565| 类型            | 说明                                                      |
7566| --------------- | --------------------------------------------------------- |
7567| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 |
7568
7569**错误码:**
7570
7571| 错误码ID | 错误信息                               |
7572| -------- | -------------------------------------- |
7573| 2303501  | SSL is null.                           |
7574| 2303505  | Error occurred in the tls system call. |
7575| 2303506  | Error clearing tls connection.         |
7576| 2300002  | System internal error.                 |
7577
7578**示例:**
7579
7580```ts
7581import socket from "@ohos.net.socket";
7582import { BusinessError } from '@ohos.base';
7583let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7584let tlsConnectOptions: socket.TLSConnectOptions = {
7585  address: {
7586    address: '192.168.xx.xxx',
7587    port: 8080
7588  },
7589  secureOptions: {
7590    key: "xxxx",
7591    cert: "xxxx",
7592    ca: ["xxxx"],
7593    password: "xxxx",
7594    protocols: socket.Protocol.TLSv12,
7595    useRemoteCipherPrefer: true,
7596    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7597    cipherSuite: "AES256-SHA256"
7598  },
7599  ALPNProtocols: ["spdy/1", "http/1.1"]
7600}
7601tlsServer.listen(tlsConnectOptions).then(() => {
7602  console.log("listen callback success");
7603}).catch((err: BusinessError) => {
7604  console.log("failed" + err);
7605});
7606tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7607  client.close().then(() => {
7608    console.log('close success');
7609  }).catch((err: BusinessError) => {
7610    console.log('close fail');
7611  });
7612});
7613```
7614
7615### getRemoteAddress<sup>10+</sup>
7616
7617getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
7618
7619在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
7620
7621**系统能力**:SystemCapability.Communication.NetStack
7622
7623**参数:**
7624
7625| 参数名   | 类型                                        | 必填 | 说明                                                         |
7626| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ |
7627| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码,错误信息。 |
7628
7629**错误码:**
7630
7631| 错误码ID | 错误信息                        |
7632| -------- | ------------------------------- |
7633| 401      | Parameter error.                |
7634| 2303188  | Socket operation on non-socket. |
7635| 2300002  | System internal error.          |
7636
7637**示例:**
7638
7639```ts
7640import socket from "@ohos.net.socket";
7641import { BusinessError } from '@ohos.base';
7642let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7643let tlsConnectOptions: socket.TLSConnectOptions = {
7644  address: {
7645    address: '192.168.xx.xxx',
7646    port: 8080
7647  },
7648  secureOptions: {
7649    key: "xxxx",
7650    cert: "xxxx",
7651    ca: ["xxxx"],
7652    password: "xxxx",
7653    protocols: socket.Protocol.TLSv12,
7654    useRemoteCipherPrefer: true,
7655    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7656    cipherSuite: "AES256-SHA256"
7657  },
7658  ALPNProtocols: ["spdy/1", "http/1.1"]
7659}
7660tlsServer.listen(tlsConnectOptions).then(() => {
7661  console.log("listen callback success");
7662}).catch((err: BusinessError) => {
7663  console.log("failed" + err);
7664});
7665tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7666  client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
7667    if (err) {
7668      console.log('getRemoteAddress fail');
7669      return;
7670    }
7671    console.log('getRemoteAddress success:' + JSON.stringify(data));
7672  });
7673});
7674```
7675
7676### getRemoteAddress<sup>10+</sup>
7677
7678getRemoteAddress(): Promise\<NetAddress\>
7679
7680在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
7681
7682**系统能力**:SystemCapability.Communication.NetStack
7683
7684**返回值:**
7685
7686| 类型                                 | 说明                                                         |
7687|  ----------------------------------- |  ----------------------------------------------------------- |
7688| Promise\<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
7689
7690**错误码:**
7691
7692| 错误码ID | 错误信息                        |
7693| -------- | ------------------------------- |
7694| 2303188  | Socket operation on non-socket. |
7695| 2300002  | System internal error.          |
7696
7697**示例:**
7698
7699```ts
7700import socket from "@ohos.net.socket";
7701import { BusinessError } from '@ohos.base';
7702let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7703let tlsConnectOptions: socket.TLSConnectOptions = {
7704  address: {
7705    address: '192.168.xx.xxx',
7706    port: 8080
7707  },
7708  secureOptions: {
7709    key: "xxxx",
7710    cert: "xxxx",
7711    ca: ["xxxx"],
7712    password: "xxxx",
7713    protocols: socket.Protocol.TLSv12,
7714    useRemoteCipherPrefer: true,
7715    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7716    cipherSuite: "AES256-SHA256"
7717  },
7718  ALPNProtocols: ["spdy/1", "http/1.1"]
7719}
7720tlsServer.listen(tlsConnectOptions).then(() => {
7721  console.log("listen callback success");
7722}).catch((err: BusinessError) => {
7723  console.log("failed" + err);
7724});
7725tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7726  client.getRemoteAddress().then((data: socket.NetAddress) => {
7727    console.log('getRemoteAddress success:' + JSON.stringify(data));
7728  }).catch((err: BusinessError) => {
7729    console.error("failed" + err);
7730  });
7731});
7732```
7733
7734### getRemoteCertificate<sup>10+</sup>
7735
7736getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
7737
7738在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。
7739
7740**系统能力**:SystemCapability.Communication.NetStack
7741
7742**参数:**
7743
7744| 参数名   | 类型                                                  | 必填 | 说明                                                 |
7745| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- |
7746| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,返回对端的证书。失败返回错误码,错误信息。 |
7747
7748**错误码:**
7749
7750| 错误码ID | 错误信息               |
7751| -------- | ---------------------- |
7752| 401      | Parameter error.       |
7753| 2303501  | SSL is null.           |
7754| 2300002  | System internal error. |
7755
7756**示例:**
7757
7758```ts
7759import socket from "@ohos.net.socket";
7760import { BusinessError } from '@ohos.base';
7761import util from "@ohos.util";
7762
7763let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7764let tlsConnectOptions: socket.TLSConnectOptions = {
7765  address: {
7766    address: '192.168.xx.xxx',
7767    port: 8080
7768  },
7769  secureOptions: {
7770    key: "xxxx",
7771    cert: "xxxx",
7772    ca: ["xxxx"],
7773    password: "xxxx",
7774    protocols: socket.Protocol.TLSv12,
7775    useRemoteCipherPrefer: true,
7776    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7777    cipherSuite: "AES256-SHA256"
7778  },
7779  ALPNProtocols: ["spdy/1", "http/1.1"]
7780}
7781tlsServer.listen(tlsConnectOptions).then(() => {
7782  console.log("listen callback success");
7783}).catch((err: BusinessError) => {
7784  console.log("failed" + err);
7785});
7786tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7787  client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
7788    if (err) {
7789      console.log("getRemoteCertificate callback error: " + err);
7790    } else {
7791      const decoder = util.TextDecoder.create();
7792      const str = decoder.decodeWithStream(data.data);
7793      console.log("getRemoteCertificate callback: " + str);
7794    }
7795  });
7796});
7797```
7798
7799### getRemoteCertificate<sup>10+</sup>
7800
7801getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
7802
7803在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。
7804
7805**系统能力**:SystemCapability.Communication.NetStack
7806
7807**返回值:**
7808
7809| 类型                                            | 说明                                                         |
7810| ----------------------------------------------- | ------------------------------------------------------------ |
7811| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 |
7812
7813**错误码:**
7814
7815| 错误码ID | 错误信息               |
7816| -------- | ---------------------- |
7817| 2303501  | SSL is null.           |
7818| 2300002  | System internal error. |
7819
7820**示例:**
7821
7822```ts
7823import socket from "@ohos.net.socket";
7824import { BusinessError } from '@ohos.base';
7825import util from "@ohos.util";
7826
7827let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7828let tlsConnectOptions: socket.TLSConnectOptions = {
7829  address: {
7830    address: '192.168.xx.xxx',
7831    port: 8080
7832  },
7833  secureOptions: {
7834    key: "xxxx",
7835    cert: "xxxx",
7836    ca: ["xxxx"],
7837    password: "xxxx",
7838    protocols: socket.Protocol.TLSv12,
7839    useRemoteCipherPrefer: true,
7840    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7841    cipherSuite: "AES256-SHA256"
7842  },
7843  ALPNProtocols: ["spdy/1", "http/1.1"]
7844}
7845tlsServer.listen(tlsConnectOptions).then(() => {
7846  console.log("listen callback success");
7847}).catch((err: BusinessError) => {
7848  console.log("failed" + err);
7849});
7850tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7851  client.getRemoteCertificate().then((data: socket.X509CertRawData) => {
7852    const decoder = util.TextDecoder.create();
7853    const str = decoder.decodeWithStream(data.data);
7854    console.log("getRemoteCertificate success: " + str);
7855  }).catch((err: BusinessError) => {
7856    console.error("failed" + err);
7857  });
7858});
7859```
7860
7861### getCipherSuite<sup>10+</sup>
7862
7863getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
7864
7865在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
7866
7867**系统能力**:SystemCapability.Communication.NetStack
7868
7869**参数:**
7870
7871| 参数名   | 类型                             | 必填 | 说明                                                         |
7872| -------- | -------------------------------- | ---- | ------------------------------------------------------------ |
7873| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回通信双方支持的加密套件。 失败返回错误码,错误信息。 |
7874
7875**错误码:**
7876
7877| 错误码ID | 错误信息                               |
7878| -------- | -------------------------------------- |
7879| 401      | Parameter error.                       |
7880| 2303501  | SSL is null.                           |
7881| 2303502  | Error in tls reading.                  |
7882| 2303505  | Error occurred in the tls system call. |
7883| 2300002  | System internal error.                 |
7884
7885**示例:**
7886
7887```ts
7888import socket from "@ohos.net.socket";
7889import { BusinessError } from '@ohos.base';
7890let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7891let tlsConnectOptions: socket.TLSConnectOptions = {
7892  address: {
7893    address: '192.168.xx.xxx',
7894    port: 8080
7895  },
7896  secureOptions: {
7897    key: "xxxx",
7898    cert: "xxxx",
7899    ca: ["xxxx"],
7900    password: "xxxx",
7901    protocols: socket.Protocol.TLSv12,
7902    useRemoteCipherPrefer: true,
7903    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7904    cipherSuite: "AES256-SHA256"
7905  },
7906  ALPNProtocols: ["spdy/1", "http/1.1"]
7907}
7908tlsServer.listen(tlsConnectOptions).then(() => {
7909  console.log("listen callback success");
7910}).catch((err: BusinessError) => {
7911  console.log("failed" + err);
7912});
7913tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7914  client.getCipherSuite((err: BusinessError, data: Array<string>) => {
7915    if (err) {
7916      console.log("getCipherSuite callback error = " + err);
7917    } else {
7918      console.log("getCipherSuite callback = " + data);
7919    }
7920  });
7921});
7922```
7923
7924### getCipherSuite<sup>10+</sup>
7925
7926getCipherSuite(): Promise\<Array\<string\>\>
7927
7928在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
7929
7930**系统能力**:SystemCapability.Communication.NetStack
7931
7932**返回值:**
7933
7934| 类型                       | 说明                                                         |
7935| -------------------------- | ------------------------------------------------------------ |
7936| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
7937
7938**错误码:**
7939
7940| 错误码ID | 错误信息                               |
7941| -------- | -------------------------------------- |
7942| 2303501  | SSL is null.                           |
7943| 2303502  | Error in tls reading.                  |
7944| 2303505  | Error occurred in the tls system call. |
7945| 2300002  | System internal error.                 |
7946
7947**示例:**
7948
7949```ts
7950import socket from "@ohos.net.socket";
7951import { BusinessError } from '@ohos.base';
7952let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7953let tlsConnectOptions: socket.TLSConnectOptions = {
7954  address: {
7955    address: '192.168.xx.xxx',
7956    port: 8080
7957  },
7958  secureOptions: {
7959    key: "xxxx",
7960    cert: "xxxx",
7961    ca: ["xxxx"],
7962    password: "xxxx",
7963    protocols: socket.Protocol.TLSv12,
7964    useRemoteCipherPrefer: true,
7965    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7966    cipherSuite: "AES256-SHA256"
7967  },
7968  ALPNProtocols: ["spdy/1", "http/1.1"]
7969}
7970tlsServer.listen(tlsConnectOptions).then(() => {
7971  console.log("listen callback success");
7972}).catch((err: BusinessError) => {
7973  console.log("failed" + err);
7974});
7975tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
7976  client.getCipherSuite().then((data: Array<string>) => {
7977    console.log('getCipherSuite success:' + JSON.stringify(data));
7978  }).catch((err: BusinessError) => {
7979    console.error("failed" + err);
7980  });
7981});
7982```
7983
7984### getSignatureAlgorithms<sup>10+</sup>
7985
7986getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
7987
7988在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。
7989
7990**系统能力**:SystemCapability.Communication.NetStack
7991
7992**参数:**
7993
7994| 参数名   | 类型                             | 必填 | 说明                               |
7995| -------- | -------------------------------- | ---- | ---------------------------------- |
7996| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回双方支持的签名算法。 |
7997
7998**错误码:**
7999
8000| 错误码ID | 错误信息               |
8001| -------- | ---------------------- |
8002| 401      | Parameter error.       |
8003| 2303501  | SSL is null.           |
8004| 2300002  | System internal error. |
8005
8006**示例:**
8007
8008```ts
8009import socket from "@ohos.net.socket";
8010import { BusinessError } from '@ohos.base';
8011let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8012let tlsConnectOptions: socket.TLSConnectOptions = {
8013  address: {
8014    address: '192.168.xx.xxx',
8015    port: 8080
8016  },
8017  secureOptions: {
8018    key: "xxxx",
8019    cert: "xxxx",
8020    ca: ["xxxx"],
8021    password: "xxxx",
8022    protocols: socket.Protocol.TLSv12,
8023    useRemoteCipherPrefer: true,
8024    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8025    cipherSuite: "AES256-SHA256"
8026  },
8027  ALPNProtocols: ["spdy/1", "http/1.1"]
8028}
8029tlsServer.listen(tlsConnectOptions).then(() => {
8030  console.log("listen callback success");
8031}).catch((err: BusinessError) => {
8032  console.log("failed" + err);
8033});
8034tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8035  client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
8036    if (err) {
8037      console.log("getSignatureAlgorithms callback error = " + err);
8038    } else {
8039      console.log("getSignatureAlgorithms callback = " + data);
8040    }
8041  });
8042});
8043```
8044
8045### getSignatureAlgorithms<sup>10+</sup>
8046
8047getSignatureAlgorithms(): Promise\<Array\<string\>\>
8048
8049在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。
8050
8051**系统能力**:SystemCapability.Communication.NetStack
8052
8053**返回值:**
8054
8055| 类型                       | 说明                                          |
8056| -------------------------- | --------------------------------------------- |
8057| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
8058
8059**错误码:**
8060
8061| 错误码ID | 错误信息               |
8062| -------- | ---------------------- |
8063| 2303501  | SSL is null.           |
8064| 2300002  | System internal error. |
8065
8066**示例:**
8067
8068```ts
8069import socket from "@ohos.net.socket";
8070import { BusinessError } from '@ohos.base';
8071let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8072let tlsConnectOptions: socket.TLSConnectOptions = {
8073  address: {
8074    address: '192.168.xx.xxx',
8075    port: 8080
8076  },
8077  secureOptions: {
8078    key: "xxxx",
8079    cert: "xxxx",
8080    ca: ["xxxx"],
8081    password: "xxxx",
8082    protocols: socket.Protocol.TLSv12,
8083    useRemoteCipherPrefer: true,
8084    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8085    cipherSuite: "AES256-SHA256"
8086  },
8087  ALPNProtocols: ["spdy/1", "http/1.1"]
8088}
8089tlsServer.listen(tlsConnectOptions).then(() => {
8090  console.log("listen callback success");
8091}).catch((err: BusinessError) => {
8092  console.log("failed" + err);
8093});
8094tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8095  client.getSignatureAlgorithms().then((data: Array<string>) => {
8096    console.log("getSignatureAlgorithms success" + data);
8097  }).catch((err: BusinessError) => {
8098    console.error("failed" + err);
8099  });
8100});
8101```
8102
8103### on('message')<sup>10+</sup>
8104
8105on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
8106
8107订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
8108
8109**系统能力**:SystemCapability.Communication.NetStack
8110
8111**参数:**
8112
8113| 参数名   | 类型                                                         | 必填 | 说明                                      |
8114| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
8115| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
8116| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 是   | 回调函数。                                |
8117
8118**错误码:**
8119
8120| 错误码ID | 错误信息         |
8121| -------- | ---------------- |
8122| 401      | Parameter error. |
8123
8124**示例:**
8125
8126```ts
8127import socket from "@ohos.net.socket";
8128import { BusinessError } from '@ohos.base';
8129let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8130let tlsConnectOptions: socket.TLSConnectOptions = {
8131  address: {
8132    address: '192.168.xx.xxx',
8133    port: 8080
8134  },
8135  secureOptions: {
8136    key: "xxxx",
8137    cert: "xxxx",
8138    ca: ["xxxx"],
8139    password: "xxxx",
8140    protocols: socket.Protocol.TLSv12,
8141    useRemoteCipherPrefer: true,
8142    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8143    cipherSuite: "AES256-SHA256"
8144  },
8145  ALPNProtocols: ["spdy/1", "http/1.1"]
8146}
8147tlsServer.listen(tlsConnectOptions).then(() => {
8148  console.log("listen callback success");
8149}).catch((err: BusinessError) => {
8150  console.log("failed" + err);
8151});
8152
8153tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8154  client.on('message', (value: socket.SocketMessageInfo) => {
8155    let messageView = '';
8156    for (let i: number = 0; i < value.message.byteLength; i++) {
8157      let uint8Array = new Uint8Array(value.message)
8158      let messages = uint8Array[i]
8159      let message = String.fromCharCode(messages);
8160      messageView += message;
8161    }
8162    console.log('on message message: ' + JSON.stringify(messageView));
8163    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
8164  });
8165});
8166```
8167
8168### off('message')<sup>10+</sup>
8169
8170off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
8171
8172取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
8173
8174> **说明:**
8175> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8176
8177**系统能力**:SystemCapability.Communication.NetStack
8178
8179**参数:**
8180
8181| 参数名   | 类型                                                         | 必填 | 说明                                      |
8182| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
8183| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
8184| callback | Callback<[SocketMessageInfo](#socketmessageinfo11)> | 否   | 回调函数。                                |
8185
8186**错误码:**
8187
8188| 错误码ID | 错误信息         |
8189| -------- | ---------------- |
8190| 401      | Parameter error. |
8191
8192**示例:**
8193
8194```ts
8195import socket from "@ohos.net.socket";
8196import { BusinessError } from '@ohos.base';
8197let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8198let tlsConnectOptions: socket.TLSConnectOptions = {
8199  address: {
8200    address: '192.168.xx.xxx',
8201    port: 8080
8202  },
8203  secureOptions: {
8204    key: "xxxx",
8205    cert: "xxxx",
8206    ca: ["xxxx"],
8207    password: "xxxx",
8208    protocols: socket.Protocol.TLSv12,
8209    useRemoteCipherPrefer: true,
8210    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8211    cipherSuite: "AES256-SHA256"
8212  },
8213  ALPNProtocols: ["spdy/1", "http/1.1"]
8214}
8215tlsServer.listen(tlsConnectOptions).then(() => {
8216  console.log("listen callback success");
8217}).catch((err: BusinessError) => {
8218  console.log("failed" + err);
8219});
8220
8221let callback = (value: socket.SocketMessageInfo) => {
8222  let messageView = '';
8223  for (let i: number = 0; i < value.message.byteLength; i++) {
8224    let uint8Array = new Uint8Array(value.message)
8225    let messages = uint8Array[i]
8226    let message = String.fromCharCode(messages);
8227    messageView += message;
8228  }
8229  console.log('on message message: ' + JSON.stringify(messageView));
8230  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
8231}
8232tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8233  client.on('message', callback);
8234  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8235  client.off('message', callback);
8236  client.off('message');
8237});
8238```
8239
8240### on('close')<sup>10+</sup>
8241
8242on(type: 'close', callback: Callback\<void\>): void
8243
8244订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
8245
8246**系统能力**:SystemCapability.Communication.NetStack
8247
8248**参数:**
8249
8250| 参数名   | 类型             | 必填 | 说明                                |
8251| -------- | ---------------- | ---- | ----------------------------------- |
8252| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
8253| callback | Callback\<void\> | 是   | 回调函数。                          |
8254
8255**错误码:**
8256
8257| 错误码ID | 错误信息         |
8258| -------- | ---------------- |
8259| 401      | Parameter error. |
8260
8261**示例:**
8262
8263```ts
8264import socket from "@ohos.net.socket";
8265import { BusinessError } from '@ohos.base';
8266let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8267let tlsConnectOptions: socket.TLSConnectOptions = {
8268  address: {
8269    address: '192.168.xx.xxx',
8270    port: 8080
8271  },
8272  secureOptions: {
8273    key: "xxxx",
8274    cert: "xxxx",
8275    ca: ["xxxx"],
8276    password: "xxxx",
8277    protocols: socket.Protocol.TLSv12,
8278    useRemoteCipherPrefer: true,
8279    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8280    cipherSuite: "AES256-SHA256"
8281  },
8282  ALPNProtocols: ["spdy/1", "http/1.1"]
8283}
8284tlsServer.listen(tlsConnectOptions).then(() => {
8285  console.log("listen callback success");
8286}).catch((err: BusinessError) => {
8287  console.log("failed" + err);
8288});
8289tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8290  client.on('close', () => {
8291    console.log("on close success")
8292  });
8293});
8294```
8295
8296### off('close')<sup>10+</sup>
8297
8298off(type: 'close', callback?: Callback\<void\>): void
8299
8300取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
8301
8302> **说明:**
8303> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8304
8305**系统能力**:SystemCapability.Communication.NetStack
8306
8307**参数:**
8308
8309| 参数名   | 类型             | 必填 | 说明                                |
8310| -------- | ---------------- | ---- | ----------------------------------- |
8311| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
8312| callback | Callback\<void\> | 否   | 回调函数。                          |
8313
8314**错误码:**
8315
8316| 错误码ID | 错误信息         |
8317| -------- | ---------------- |
8318| 401      | Parameter error. |
8319
8320**示例:**
8321
8322```ts
8323import socket from "@ohos.net.socket";
8324import { BusinessError } from '@ohos.base';
8325let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8326let tlsConnectOptions: socket.TLSConnectOptions = {
8327  address: {
8328    address: '192.168.xx.xxx',
8329    port: 8080
8330  },
8331  secureOptions: {
8332    key: "xxxx",
8333    cert: "xxxx",
8334    ca: ["xxxx"],
8335    password: "xxxx",
8336    protocols: socket.Protocol.TLSv12,
8337    useRemoteCipherPrefer: true,
8338    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8339    cipherSuite: "AES256-SHA256"
8340  },
8341  ALPNProtocols: ["spdy/1", "http/1.1"]
8342}
8343tlsServer.listen(tlsConnectOptions).then(() => {
8344  console.log("listen callback success");
8345}).catch((err: BusinessError) => {
8346  console.log("failed" + err);
8347});
8348
8349let callback = () => {
8350  console.log("on close success");
8351}
8352tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8353  client.on('close', callback);
8354  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8355  client.off('close', callback);
8356  client.off('close');
8357});
8358```
8359
8360### on('error')<sup>10+</sup>
8361
8362on(type: 'error', callback: ErrorCallback): void
8363
8364订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
8365
8366**系统能力**:SystemCapability.Communication.NetStack
8367
8368**参数:**
8369
8370| 参数名   | 类型          | 必填 | 说明                                 |
8371| -------- | ------------- | ---- | ------------------------------------ |
8372| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
8373| callback | ErrorCallback | 是   | 回调函数。                           |
8374
8375**错误码:**
8376
8377| 错误码ID | 错误信息         |
8378| -------- | ---------------- |
8379| 401      | Parameter error. |
8380
8381**示例:**
8382
8383```ts
8384import socket from "@ohos.net.socket";
8385import { BusinessError } from '@ohos.base';
8386let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8387let tlsConnectOptions: socket.TLSConnectOptions = {
8388  address: {
8389    address: '192.168.xx.xxx',
8390    port: 8080
8391  },
8392  secureOptions: {
8393    key: "xxxx",
8394    cert: "xxxx",
8395    ca: ["xxxx"],
8396    password: "xxxx",
8397    protocols: socket.Protocol.TLSv12,
8398    useRemoteCipherPrefer: true,
8399    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8400    cipherSuite: "AES256-SHA256"
8401  },
8402  ALPNProtocols: ["spdy/1", "http/1.1"]
8403}
8404tlsServer.listen(tlsConnectOptions).then(() => {
8405  console.log("listen callback success");
8406}).catch((err: BusinessError) => {
8407  console.log("failed" + err);
8408});
8409
8410tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8411  client.on('error', (err: BusinessError) => {
8412    console.log("on error, err:" + JSON.stringify(err))
8413  });
8414});
8415```
8416
8417### off('error')<sup>10+</sup>
8418
8419off(type: 'error', callback?: ErrorCallback): void
8420
8421取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
8422
8423> **说明:**
8424> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8425
8426**系统能力**:SystemCapability.Communication.NetStack
8427
8428**参数:**
8429
8430| 参数名   | 类型          | 必填 | 说明                                 |
8431| -------- | ------------- | ---- | ------------------------------------ |
8432| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
8433| callback | ErrorCallback | 否   | 回调函数。                           |
8434
8435**错误码:**
8436
8437| 错误码ID | 错误信息         |
8438| -------- | ---------------- |
8439| 401      | Parameter error. |
8440
8441**示例:**
8442
8443```ts
8444import socket from "@ohos.net.socket";
8445import { BusinessError } from '@ohos.base';
8446let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8447let tlsConnectOptions: socket.TLSConnectOptions = {
8448  address: {
8449    address: '192.168.xx.xxx',
8450    port: 8080
8451  },
8452  secureOptions: {
8453    key: "xxxx",
8454    cert: "xxxx",
8455    ca: ["xxxx"],
8456    password: "xxxx",
8457    protocols: socket.Protocol.TLSv12,
8458    useRemoteCipherPrefer: true,
8459    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8460    cipherSuite: "AES256-SHA256"
8461  },
8462  ALPNProtocols: ["spdy/1", "http/1.1"]
8463}
8464tlsServer.listen(tlsConnectOptions).then(() => {
8465  console.log("listen callback success");
8466}).catch((err: BusinessError) => {
8467  console.log("failed" + err);
8468});
8469
8470let callback = (err: BusinessError) => {
8471  console.log("on error, err:" + JSON.stringify(err));
8472}
8473tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8474  client.on('error', callback);
8475  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8476  client.off('error', callback);
8477  client.off('error');
8478});
8479```
8480