• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.net.socket (Socket连接)
2
3<!--Kit: Network Kit-->
4<!--Subsystem: Communication-->
5<!--Owner: @wmyao_mm-->
6<!--Designer: @guo-min_net-->
7<!--Tester: @tongxilin-->
8<!--Adviser: @zhang_yixin13-->
9
10本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。
11
12> **说明:**
13>
14> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15> 本模块API使用时建议放在worker线程或者taskpool中做网络操作,否则可能会导致UI线程卡顿。
16
17## 导入模块
18
19```ts
20import { socket } from '@kit.NetworkKit';
21```
22
23## socket.constructUDPSocketInstance
24
25constructUDPSocketInstance(): UDPSocket
26
27创建一个UDPSocket对象。
28
29**系统能力**:SystemCapability.Communication.NetStack
30
31**返回值:**
32
33| 类型                               | 说明                    |
34|  --------------------------------- |  ---------------------- |
35| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 |
36
37**示例:**
38
39```ts
40import { socket } from '@kit.NetworkKit';
41let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
42```
43
44## UDPSocket
45
46UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。
47
48### bind
49
50bind(address: NetAddress, callback: AsyncCallback\<void\>): void
51
52绑定IP地址和端口,端口可以由用户指定或由系统随机分配。使用callback方式作为异步方法。
53
54**需要权限**:ohos.permission.INTERNET
55
56**系统能力**:SystemCapability.Communication.NetStack
57
58**参数:**
59
60| 参数名   | 类型                               | 必填 | 说明                                                   |
61| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
62| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
63| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。        |
64
65**错误码:**
66
67以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
68
69| 错误码ID | 错误信息                 |
70| ------- | ----------------------- |
71| 401     | Parameter error.        |
72| 201     | Permission denied.      |
73
74**示例:**
75
76```ts
77import { socket } from '@kit.NetworkKit';
78import { BusinessError } from '@kit.BasicServicesKit';
79
80let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
81let bindAddr: socket.NetAddress = {
82  address: '192.168.xx.xxx',
83  port: 1234
84}
85udp.bind(bindAddr, (err: BusinessError) => {
86  if (err) {
87    console.error('bind fail');
88    return;
89  }
90  console.log('bind success');
91});
92```
93
94### bind
95
96bind(address: NetAddress): Promise\<void\>
97
98绑定IP地址和端口,端口可以由用户指定或由系统随机分配。使用Promise方式作为异步方法。
99
100**需要权限**:ohos.permission.INTERNET
101
102**系统能力**:SystemCapability.Communication.NetStack
103
104**参数:**
105
106| 参数名  | 类型                               | 必填 | 说明                                                   |
107| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
108| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
109
110**错误码:**
111
112以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
113
114| 错误码ID | 错误信息                 |
115| ------- | ----------------------- |
116| 401     | Parameter error.        |
117| 201     | Permission denied.      |
118
119**返回值:**
120
121| 类型            | 说明                                       |
122|  -------------- |  ----------------------------------------- |
123| Promise\<void\> | Promise对象。无返回结果的Promise对象。|
124
125**示例:**
126
127```ts
128import { socket } from '@kit.NetworkKit';
129import { BusinessError } from '@kit.BasicServicesKit';
130
131let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
132let bindAddr: socket.NetAddress = {
133  address: '192.168.xx.xxx',
134  port: 8080
135}
136udp.bind(bindAddr).then(() => {
137  console.log('bind success');
138}).catch((err: BusinessError) => {
139  console.error('bind fail');
140});
141```
142
143### send
144
145send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void
146
147通过UDPSocket连接发送数据。使用callback方式作为异步方法。
148
149发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
150
151**需要权限**:ohos.permission.INTERNET
152
153**系统能力**:SystemCapability.Communication.NetStack
154
155**参数:**
156
157| 参数名   | 类型                                     | 必填 | 说明                                                         |
158| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
159| options  | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
160| callback | AsyncCallback\<void\>                    | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。                                                  |
161
162**错误码:**
163
164以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
165
166| 错误码ID | 错误信息                 |
167| ------- | ----------------------- |
168| 401     | Parameter error.        |
169| 201     | Permission denied.      |
170| 2301206 | Socks5 failed to connect to the proxy server.  |
171| 2301207 | Socks5 username or password is invalid.        |
172| 2301208 | Socks5 failed to connect to the remote server. |
173| 2301209 | Socks5 failed to negotiate the authentication method. |
174| 2301210 | Socks5 failed to send the message.             |
175| 2301211 | Socks5 failed to receive the message.          |
176| 2301212 | Socks5 serialization error.                    |
177| 2301213 | Socks5 deserialization error.                  |
178
179**示例:**
180
181```ts
182import { socket } from '@kit.NetworkKit';
183import { BusinessError } from '@kit.BasicServicesKit';
184
185let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
186let bindAddr: socket.NetAddress = {
187  address: '192.168.xx.xxx',  // 本端地址
188  port: 1234
189}
190udp.bind(bindAddr, (err: BusinessError) => {
191  if (err) {
192    console.error('bind fail');
193    return;
194  }
195  console.log('bind success');
196});
197let netAddress: socket.NetAddress = {
198  address: '192.168.xx.xxx',  // 对端地址
199  port: 8080
200}
201let sendOptions: socket.UDPSendOptions = {
202  data: 'Hello, server!',
203  address: netAddress
204}
205udp.send(sendOptions, (err: BusinessError) => {
206  if (err) {
207    console.error('send fail');
208    return;
209  }
210  console.log('send success');
211});
212```
213
214**示例(设置socket代理):**
215
216```ts
217import { socket } from '@kit.NetworkKit';
218import { BusinessError } from '@kit.BasicServicesKit';
219
220let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
221let bindAddr: socket.NetAddress = {
222  address: '192.168.xx.xxx',  // 本端地址
223  port: 1234
224}
225udp.bind(bindAddr, (err: BusinessError) => {
226  if (err) {
227    console.error('bind fail');
228    return;
229  }
230  console.log('bind success');
231});
232let netAddress: socket.NetAddress = {
233  address: '192.168.xx.xxx',  // 对端地址
234  port: 8080
235}
236let socks5Server: socket.NetAddress = {
237  address: '192.168.xx.xxx',
238  port: 8080
239}
240let proxyOptions: socket.ProxyOptions = {
241  type : 1,
242  address: socks5Server,
243  username: "xxx",
244  password: "xxx"
245}
246let sendOptions: socket.UDPSendOptions = {
247  data: 'Hello, server!',
248  address: netAddress,
249  proxy: proxyOptions,
250}
251udp.send(sendOptions, (err: BusinessError) => {
252  if (err) {
253    console.error('send fail');
254    return;
255  }
256  console.log('send success');
257});
258```
259
260### send
261
262send(options: UDPSendOptions): Promise\<void\>
263
264通过UDPSocket连接发送数据。使用Promise方式作为异步方法。
265
266发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
267
268**需要权限**:ohos.permission.INTERNET
269
270**系统能力**:SystemCapability.Communication.NetStack
271
272**参数:**
273
274| 参数名  | 类型                                     | 必填 | 说明                                                         |
275| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
276| options | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
277
278**错误码:**
279
280以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
281
282| 错误码ID | 错误信息                 |
283| ------- | ----------------------- |
284| 401     | Parameter error.        |
285| 201     | Permission denied.      |
286| 2301206 | Socks5 failed to connect to the proxy server.  |
287| 2301207 | Socks5 username or password is invalid.        |
288| 2301208 | Socks5 failed to connect to the remote server. |
289| 2301209 | Socks5 failed to negotiate the authentication method. |
290| 2301210 | Socks5 failed to send the message.             |
291| 2301211 | Socks5 failed to receive the message.          |
292| 2301212 | Socks5 serialization error.                    |
293| 2301213 | Socks5 deserialization error.                  |
294
295**返回值:**
296
297| 类型            | 说明                                           |
298|  -------------- |  --------------------------------------------- |
299| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
300
301**示例:**
302
303```ts
304import { socket } from '@kit.NetworkKit';
305import { BusinessError } from '@kit.BasicServicesKit';
306
307let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
308let bindAddr: socket.NetAddress = {
309  address: '192.168.xx.xxx', // 本端地址
310  port: 8080
311}
312udp.bind(bindAddr).then(() => {
313  console.log('bind success');
314}).catch((err: BusinessError) => {
315  console.error('bind fail');
316  return;
317});
318let netAddress: socket.NetAddress = {
319  address: '192.168.xx.xxx', // 对端地址
320  port: 8080
321}
322let sendOptions: socket.UDPSendOptions = {
323  data: 'Hello, server!',
324  address: netAddress
325}
326udp.send(sendOptions).then(() => {
327  console.log('send success');
328}).catch((err: BusinessError) => {
329  console.error('send fail');
330});
331```
332
333**示例(设置socket代理):**
334
335```ts
336import { socket } from '@kit.NetworkKit';
337import { BusinessError } from '@kit.BasicServicesKit';
338
339let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
340let bindAddr: socket.NetAddress = {
341  address: '192.168.xx.xxx', // 本端地址
342  port: 8080
343}
344udp.bind(bindAddr).then(() => {
345  console.log('bind success');
346}).catch((err: BusinessError) => {
347  console.error('bind fail');
348  return;
349});
350let netAddress: socket.NetAddress = {
351  address: '192.168.xx.xxx', // 对端地址
352  port: 8080
353}
354let socks5Server: socket.NetAddress = {
355  address: '192.168.xx.xxx',
356  port: 8080
357}
358let proxyOptions: socket.ProxyOptions = {
359  type : 1,
360  address: socks5Server,
361  username: "xxx",
362  password: "xxx"
363}
364let sendOptions: socket.UDPSendOptions = {
365  data: 'Hello, server!',
366  address: netAddress,
367  proxy: proxyOptions,
368}
369udp.send(sendOptions).then(() => {
370  console.log('send success');
371}).catch((err: BusinessError) => {
372  console.error('send fail');
373});
374```
375
376### close
377
378close(callback: AsyncCallback\<void\>): void
379
380关闭UDPSocket连接。使用callback方式作为异步方法。
381
382**需要权限**:ohos.permission.INTERNET
383
384**系统能力**:SystemCapability.Communication.NetStack
385
386**参数:**
387
388| 参数名   | 类型                  | 必填 | 说明       |
389| -------- | --------------------- | ---- | ---------- |
390| callback | AsyncCallback\<void\> | 是   | 回调函数。关闭UDPSocket连接后触发回调函数。 |
391
392**错误码:**
393
394以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
395
396| 错误码ID | 错误信息                 |
397| ------- | ----------------------- |
398| 201     | Permission denied.      |
399
400**示例:**
401
402```ts
403import { socket } from '@kit.NetworkKit';
404import { BusinessError } from '@kit.BasicServicesKit';
405
406let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
407udp.close((err: BusinessError) => {
408  if (err) {
409    console.error('close fail');
410    return;
411  }
412  console.log('close success');
413})
414```
415
416### close
417
418close(): Promise\<void\>
419
420关闭UDPSocket连接。使用Promise方式作为异步方法。
421
422**需要权限**:ohos.permission.INTERNET
423
424**系统能力**:SystemCapability.Communication.NetStack
425
426**错误码:**
427
428以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
429
430| 错误码ID | 错误信息                 |
431| ------- | ----------------------- |
432| 201     | Permission denied.      |
433
434**返回值:**
435
436| 类型            | 说明                                       |
437|  -------------- |  ----------------------------------------- |
438| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
439
440**示例:**
441
442```ts
443import { socket } from '@kit.NetworkKit';
444import { BusinessError } from '@kit.BasicServicesKit';
445
446let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
447udp.close().then(() => {
448  console.log('close success');
449}).catch((err: BusinessError) => {
450  console.error('close fail');
451});
452```
453
454### getState
455
456getState(callback: AsyncCallback\<SocketStateBase\>): void
457
458获取UDPSocket状态。使用callback方式作为异步方法。
459
460> **说明:**
461> bind方法调用成功后,才可调用此方法。
462
463**需要权限**:ohos.permission.INTERNET
464
465**系统能力**:SystemCapability.Communication.NetStack
466
467**参数:**
468
469| 参数名   | 类型                                                   | 必填 | 说明       |
470| -------- | ------------------------------------------------------ | ---- | ---------- |
471| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 |
472
473**错误码:**
474
475以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
476
477| 错误码ID | 错误信息                 |
478| ------- | ----------------------- |
479| 201     | Permission denied.      |
480
481**示例:**
482
483```ts
484import { socket } from '@kit.NetworkKit';
485import { BusinessError } from '@kit.BasicServicesKit';
486
487let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
488let bindAddr: socket.NetAddress = {
489  address: '192.168.xx.xxx',
490  port: 8080
491}
492udp.bind(bindAddr, (err: BusinessError) => {
493  if (err) {
494    console.error('bind fail');
495    return;
496  }
497  console.error('bind success');
498  udp.getState((err: BusinessError, data: socket.SocketStateBase) => {
499    if (err) {
500      console.log('getState fail');
501      return;
502    }
503    console.log('getState success:' + JSON.stringify(data));
504  })
505})
506```
507
508### getState
509
510getState(): Promise\<SocketStateBase\>
511
512获取UDPSocket状态。使用Promise方式作为异步方法。
513
514> **说明:**
515> bind方法调用成功后,才可调用此方法。
516
517**需要权限**:ohos.permission.INTERNET
518
519**系统能力**:SystemCapability.Communication.NetStack
520
521**错误码:**
522
523以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
524
525
526| 错误码ID | 错误信息                 |
527| ------- | ----------------------- |
528| 201     | Permission denied.      |
529
530**返回值:**
531
532| 类型                                             | 说明                                       |
533|  ----------------------------------------------- |  ----------------------------------------- |
534| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 |
535
536**示例:**
537
538```ts
539import { socket } from '@kit.NetworkKit';
540import { BusinessError } from '@kit.BasicServicesKit';
541
542let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
543let bindAddr: socket.NetAddress = {
544  address: '192.168.xx.xxx',
545  port: 8080
546}
547udp.bind(bindAddr, (err: BusinessError) => {
548  if (err) {
549    console.error('bind fail');
550    return;
551  }
552  console.log('bind success');
553  udp.getState().then((data: socket.SocketStateBase) => {
554    console.log('getState success:' + JSON.stringify(data));
555  }).catch((err: BusinessError) => {
556    console.error('getState fail' + JSON.stringify(err));
557  });
558});
559```
560
561### setExtraOptions
562
563setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void
564
565设置UDPSocket连接的其他属性。使用callback方式作为异步方法。
566
567> **说明:**
568> bind方法调用成功后,才可调用此方法。
569
570**需要权限**:ohos.permission.INTERNET
571
572**系统能力**:SystemCapability.Communication.NetStack
573
574**参数:**
575
576| 参数名   | 类型                                     | 必填 | 说明                                                         |
577| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
578| options  | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
579| callback | AsyncCallback\<void\>                    | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。                    |
580
581**错误码:**
582
583以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
584
585| 错误码ID | 错误信息                 |
586| ------- | ----------------------- |
587| 401     | Parameter error.        |
588| 201     | Permission denied.      |
589
590**示例:**
591
592```ts
593import { socket } from '@kit.NetworkKit';
594import { BusinessError } from '@kit.BasicServicesKit';
595
596let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
597
598let bindAddr: socket.NetAddress = {
599  address: '192.168.xx.xxx',
600  port: 8080
601}
602udp.bind(bindAddr, (err: BusinessError) => {
603  if (err) {
604    console.error('bind fail');
605    return;
606  }
607  console.log('bind success');
608  let udpextraoptions: socket.UDPExtraOptions = {
609    receiveBufferSize: 8192,
610    sendBufferSize: 8192,
611    reuseAddress: false,
612    socketTimeout: 6000,
613    broadcast: true
614  }
615  udp.setExtraOptions(udpextraoptions, (err: BusinessError) => {
616    if (err) {
617      console.error('setExtraOptions fail');
618      return;
619    }
620    console.log('setExtraOptions success');
621  })
622})
623```
624
625### setExtraOptions
626
627setExtraOptions(options: UDPExtraOptions): Promise\<void\>
628
629设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。
630
631> **说明:**
632> bind方法调用成功后,才可调用此方法。
633
634**需要权限**:ohos.permission.INTERNET
635
636**系统能力**:SystemCapability.Communication.NetStack
637
638**参数:**
639
640| 参数名  | 类型                                     | 必填 | 说明                                                         |
641| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
642| options | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
643
644**返回值:**
645
646| 类型            | 说明                                                 |
647|  -------------- |  --------------------------------------------------- |
648| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
649
650**错误码:**
651
652以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
653
654| 错误码ID | 错误信息                 |
655| ------- | ----------------------- |
656| 401     | Parameter error.        |
657| 201     | Permission denied.      |
658
659**示例:**
660
661```ts
662import { socket } from '@kit.NetworkKit';
663import { BusinessError } from '@kit.BasicServicesKit';
664
665let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
666
667let bindAddr: socket.NetAddress = {
668  address: '192.168.xx.xxx',
669  port: 8080
670}
671udp.bind(bindAddr, (err: BusinessError) => {
672  if (err) {
673    console.error('bind fail');
674    return;
675  }
676  console.log('bind success');
677  let udpextraoptions: socket.UDPExtraOptions = {
678    receiveBufferSize: 8192,
679    sendBufferSize: 8192,
680    reuseAddress: false,
681    socketTimeout: 6000,
682    broadcast: true
683  }
684  udp.setExtraOptions(udpextraoptions).then(() => {
685    console.log('setExtraOptions success');
686  }).catch((err: BusinessError) => {
687    console.error('setExtraOptions fail');
688  });
689})
690```
691
692### getLocalAddress<sup>12+</sup>
693
694getLocalAddress(): Promise\<NetAddress\>
695
696获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。
697
698> **说明:**
699> bind方法调用成功后,才可调用此方法。
700
701**系统能力**:SystemCapability.Communication.NetStack
702
703**返回值:**
704
705| 类型            | 说明                                                 |
706|  -------------- |  --------------------------------------------------- |
707| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
708
709**错误码:**
710
711以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
712
713| 错误码ID | 错误信息                                    |
714| -------- | ------------------------------------------- |
715| 2300002  | System internal error.                      |
716| 2301009  | Bad file descriptor.                            |
717| 2303188  | Socket operation on non-socket. |
718
719**示例:**
720
721```ts
722import { socket } from '@kit.NetworkKit';
723import { BusinessError } from '@kit.BasicServicesKit';
724
725let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
726
727let bindAddr: socket.NetAddress = {
728  address: '192.168.xx.xxx',
729  port: 8080
730}
731udp.bind(bindAddr).then(() => {
732  console.info('bind success');
733  udp.getLocalAddress().then((localAddress: socket.NetAddress) => {
734        console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress));
735      }).catch((err: BusinessError) => {
736        console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err));
737      })
738}).catch((err: BusinessError) => {
739  console.error('bind fail');
740});
741```
742
743### on('message')
744
745on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
746
747订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
748
749**系统能力**:SystemCapability.Communication.NetStack
750
751**参数:**
752
753| 参数名   | 类型                                                         | 必填 | 说明                                      |
754| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
755| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
756| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。       |
757
758**示例:**
759
760```ts
761import { socket } from '@kit.NetworkKit';
762import { BusinessError } from '@kit.BasicServicesKit';
763
764let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
765
766let messageView = '';
767udp.on('message', (value: socket.SocketMessageInfo) => {
768  for (let i: number = 0; i < value.message.byteLength; i++) {
769    let uint8Array = new Uint8Array(value.message)
770    let messages = uint8Array[i]
771    let message = String.fromCharCode(messages);
772    messageView += message;
773  }
774  console.log('on message message: ' + JSON.stringify(messageView));
775  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
776});
777```
778
779### off('message')
780
781off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
782
783取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
784
785**系统能力**:SystemCapability.Communication.NetStack
786
787**参数:**
788
789| 参数名   | 类型                                                         | 必填 | 说明                                      |
790| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
791| type     | string                                                       | 是   | 取消订阅的事件类型。'message':接收消息事件。 |
792| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。                              |
793
794**示例:**
795
796```ts
797import { socket } from '@kit.NetworkKit';
798import { BusinessError } from '@kit.BasicServicesKit';
799
800let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
801let messageView = '';
802let callback = (value: socket.SocketMessageInfo) => {
803  for (let i: number = 0; i < value.message.byteLength; i++) {
804    let uint8Array = new Uint8Array(value.message)
805    let messages = uint8Array[i]
806    let message = String.fromCharCode(messages);
807    messageView += message;
808  }
809  console.log('on message message: ' + JSON.stringify(messageView));
810  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
811}
812udp.on('message', callback);
813// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
814udp.off('message', callback);
815udp.off('message');
816```
817
818### on('listening' | 'close')
819
820on(type: 'listening' | 'close', callback: Callback\<void\>): void
821
822订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
823
824**系统能力**:SystemCapability.Communication.NetStack
825
826**参数:**
827
828| 参数名   | 类型             | 必填 | 说明                                                         |
829| -------- | ---------------- | ---- | ------------------------------------------------------------ |
830| type     | string           | 是   | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
831| callback | Callback\<void\> | 是   | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。           |
832
833**示例:**
834
835```ts
836import { socket } from '@kit.NetworkKit';
837import { BusinessError } from '@kit.BasicServicesKit';
838
839let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
840udp.on('listening', () => {
841  console.log("on listening success");
842});
843udp.on('close', () => {
844  console.log("on close success");
845});
846```
847
848### off('listening' | 'close')
849
850off(type: 'listening' | 'close', callback?: Callback\<void\>): void
851
852取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
853
854**系统能力**:SystemCapability.Communication.NetStack
855
856**参数:**
857
858| 参数名   | 类型             | 必填 | 说明                                                         |
859| -------- | ---------------- | ---- | ------------------------------------------------------------ |
860| type     | string           | 是   | 取消订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
861| callback | Callback\<void\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。     |
862
863**示例:**
864
865```ts
866import { socket } from '@kit.NetworkKit';
867import { BusinessError } from '@kit.BasicServicesKit';
868
869let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
870let callback1 = () => {
871  console.log("on listening, success");
872}
873udp.on('listening', callback1);
874// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
875udp.off('listening', callback1);
876udp.off('listening');
877let callback2 = () => {
878  console.log("on close, success");
879}
880udp.on('close', callback2);
881// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
882udp.off('close', callback2);
883udp.off('close');
884```
885
886### on('error')
887
888on(type: 'error', callback: ErrorCallback): void
889
890订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
891
892**系统能力**:SystemCapability.Communication.NetStack
893
894**参数:**
895
896| 参数名   | 类型          | 必填 | 说明                                 |
897| -------- | ------------- | ---- | ------------------------------------ |
898| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
899| callback | ErrorCallback | 是   | 回调函数。UDPSocket连接发生error事件后触发回调函数。                      |
900
901**示例:**
902
903```ts
904import { socket } from '@kit.NetworkKit';
905import { BusinessError } from '@kit.BasicServicesKit';
906
907let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
908udp.on('error', (err: BusinessError) => {
909  console.error("on error, err:" + JSON.stringify(err))
910});
911```
912
913### off('error')
914
915off(type: 'error', callback?: ErrorCallback): void
916
917取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
918
919**系统能力**:SystemCapability.Communication.NetStack
920
921**参数:**
922
923| 参数名   | 类型          | 必填 | 说明                                 |
924| -------- | ------------- | ---- | ------------------------------------ |
925| type     | string        | 是   | 取消订阅的事件类型。'error':error事件。 |
926| callback | ErrorCallback | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。      |
927
928**示例:**
929
930```ts
931import { socket } from '@kit.NetworkKit';
932import { BusinessError } from '@kit.BasicServicesKit';
933
934let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
935let callback = (err: BusinessError) => {
936  console.error("on error, err:" + JSON.stringify(err));
937}
938udp.on('error', callback);
939// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
940udp.off('error', callback);
941udp.off('error');
942```
943
944## NetAddress
945
946目标地址信息。
947
948**系统能力**:SystemCapability.Communication.NetStack
949
950| 名称  | 类型   | 必填 | 说明                                                         |
951| ------- | ------ | ---- | ------------------------------------------------------------ |
952| address<sup>11+</sup> | string | 是   | 本地绑定的ip地址。                                           |
953| port    | number | 否   | 端口号 ,范围0~65535。如果不指定系统随机分配端口。           |
954| family  | number | 否   | 网络协议类型,可选类型:<br />- 1:IPv4。默认为1。<br />- 2:IPv6。地址为IPV6类型,该字段必须被显式指定为2。<br />- 3:Domain<sup>18+</sup>。地址为Domain类型,该字段必须被显式指定为3。|
955
956## ProxyOptions<sup>18+</sup>
957
958Socket代理信息。
959
960**系统能力**:SystemCapability.Communication.NetStack
961
962| 名称  | 类型   | 必填 | 说明                                                         |
963| ------- | ------ | ---- | ------------------------------------------------------------ |
964| type    | [ProxyTypes](#proxytypes18) | 是   | 代理类型。                                 |
965| address | [NetAddress](#netaddress) | 是   | 代理地址信息。                             |
966| username  | string | 否   | 指定用户名,如果使用用户密码验证方式。  |
967| password  | string | 否   | 指定密码,如果使用用户密码验证方式。 |
968
969## ProxyTypes<sup>18+</sup>
970
971Socket代理类型。
972
973**系统能力**:SystemCapability.Communication.NetStack
974
975| 名称      |    值    | 说明                |
976| --------- | --------- |------------------ |
977| NONE    | 0 | 不使用代理。 |
978| SOCKS5  | 1 | 使用Socks5代理。 |
979
980## UDPSendOptions
981
982UDPSocket发送参数。
983
984**系统能力**:SystemCapability.Communication.NetStack
985
986| 名称  | 类型                               | 必填 | 说明           |
987| ------- | ---------------------------------- | ---- | -------------- |
988| data    | string \| ArrayBuffer                          | 是   | 发送的数据。   |
989| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
990| proxy<sup>18+</sup>   | [ProxyOptions](#proxyoptions18) | 否   | 使用的代理信息,默认不使用代理。 |
991
992## UDPExtraOptions
993
994UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。
995
996**系统能力**:SystemCapability.Communication.NetStack
997
998| 名称            | 类型    | 必填 | 说明                             |
999| ----------------- | ------- | ---- | -------------------------------- |
1000| broadcast         | boolean | 否   | 是否可以发送广播。true表示可发送广播,false表示不可发送广播。默认为false。  |
1001
1002## SocketMessageInfo<sup>11+</sup>
1003
1004socket连接信息
1005
1006**系统能力**:SystemCapability.Communication.NetStack
1007
1008| 名称        | 类型   | 必填 | 说明                                  |
1009| ---------- | ------ | ---- | ------------------------------------- |
1010| message    | ArrayBuffer | 是   | 接收的事件消息。 |
1011| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是   | socket连接信息。 |
1012
1013## SocketStateBase
1014
1015Socket的状态信息。
1016
1017**系统能力**:SystemCapability.Communication.NetStack
1018
1019| 名称      | 类型    | 必填 | 说明       |
1020| ----------- | ------- | ---- | ---------- |
1021| isBound     | boolean | 是   | 是否绑定。true:绑定;false:不绑定。 |
1022| isClose     | boolean | 是   | 是否关闭。true:关闭;false:打开。 |
1023| isConnected | boolean | 是   | 是否连接。true:连接;false:断开。 |
1024
1025## SocketRemoteInfo
1026
1027Socket的连接信息。
1028
1029**系统能力**:SystemCapability.Communication.NetStack
1030
1031| 名称  | 类型   | 必填 | 说明                                                         |
1032| ------- | ------ | ---- | ------------------------------------------------------------ |
1033| address | string | 是   | 本地绑定的ip地址。                                           |
1034| family  | 'IPv4' \| 'IPv6' | 是   | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 |
1035| port    | number | 是   | 端口号,范围0~65535。                                        |
1036| size    | number | 是   | 服务器响应信息的字节长度。                                   |
1037
1038## UDP 错误码说明
1039
1040UDP 其余错误码映射形式为:2301000 + Linux内核错误码。
1041
1042错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)。
1043
1044## socket.constructMulticastSocketInstance<sup>11+</sup>
1045
1046constructMulticastSocketInstance(): MulticastSocket
1047
1048创建一个MulticastSocket对象。
1049
1050**系统能力**:SystemCapability.Communication.NetStack
1051
1052**返回值:**
1053
1054| 类型                               | 说明                    |
1055| ----------------------------------- | ----------------------------- |
1056| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 |
1057
1058**示例:**
1059
1060```ts
1061import { socket } from '@kit.NetworkKit';
1062let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1063```
1064## MulticastSocket<sup>11+</sup>
1065
1066MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。
1067
1068### addMembership<sup>11+</sup>
1069
1070addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void
1071
1072加入多播组。使用callback方法作为异步方法。
1073
1074> **说明:**
1075> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1076> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
1077
1078**需要权限**:ohos.permission.INTERNET
1079
1080**系统能力**:SystemCapability.Communication.NetStack
1081
1082**参数:**
1083
1084| 参数名             | 类型                           | 必填 | 说明                                       |
1085| ----------------- | ----------------------------- | ---- | ----------------------------------------- |
1086| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
1087| callback          | AsyncCallback\<void\>         |  是  | 回调函数。失败返回错误码、错误信息。                                 |
1088
1089**错误码:**
1090
1091以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1092
1093| 错误码ID | 错误信息                 |
1094| ------- | ----------------------- |
1095| 401     | Parameter error.        |
1096| 201     | Permission denied.      |
1097| 2301022 | Invalid argument.       |
1098| 2301088 | Not a socket.           |
1099| 2301098 | Address in use.         |
1100
1101**示例:**
1102
1103```ts
1104import { socket } from '@kit.NetworkKit';
1105
1106let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1107let addr: socket.NetAddress = {
1108  address: '239.255.0.1',
1109  port: 8080
1110}
1111multicast.addMembership(addr, (err: Object) => {
1112  if (err) {
1113    console.error('add membership fail, err: ' + JSON.stringify(err));
1114    return;
1115  }
1116  console.log('add membership success');
1117})
1118```
1119
1120### addMembership<sup>11+</sup>
1121
1122addMembership(multicastAddress: NetAddress): Promise\<void\>
1123
1124加入多播组。使用Promise方法作为异步方法。
1125
1126> **说明:**
1127> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1128> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
1129
1130**需要权限**:ohos.permission.INTERNET
1131
1132**系统能力**:SystemCapability.Communication.NetStack
1133
1134**参数:**
1135
1136| 参数名             | 类型                           | 必填 | 说明                                           |
1137| ----------------- | ----------------------------- | ---- | --------------------------------------------  |
1138| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
1139
1140**返回值:**
1141
1142| 类型            | 说明                                               |
1143|  -------------- |  -----------------------------------------------  |
1144| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 |
1145
1146**错误码:**
1147
1148以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1149
1150| 错误码ID | 错误信息                 |
1151| ------- | ----------------------- |
1152| 401     | Parameter error.        |
1153| 201     | Permission denied.      |
1154| 2301088 | Not a socket.           |
1155| 2301098 | Address in use.         |
1156
1157**示例:**
1158
1159```ts
1160import { socket } from '@kit.NetworkKit';
1161
1162let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1163let addr: socket.NetAddress = {
1164  address: '239.255.0.1',
1165  port: 8080
1166}
1167multicast.addMembership(addr).then(() => {
1168  console.log('addMembership success');
1169}).catch((err: Object) => {
1170  console.error('addMembership fail');
1171});
1172```
1173
1174### dropMembership<sup>11+</sup>
1175
1176dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void
1177
1178退出多播组。使用callback方法作为异步方法。
1179
1180> **说明:**
1181> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1182> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
1183
1184**需要权限**:ohos.permission.INTERNET
1185
1186**系统能力**:SystemCapability.Communication.NetStack
1187
1188**参数:**
1189
1190| 参数名             | 类型                           | 必填 | 说明                                         |
1191| ----------------- | ----------------------------- | ---- | ------------------------------------------- |
1192| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。   |
1193| callback          | AsyncCallback\<void\>         |  是  | 回调函数。失败返回错误码、错误信息。|
1194
1195**错误码:**
1196
1197以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1198
1199| 错误码ID | 错误信息                 |
1200| ------- | ----------------------- |
1201| 401     | Parameter error.        |
1202| 201     | Permission denied.      |
1203| 2301088 | Not a socket.           |
1204| 2301098 | Address in use.         |
1205
1206**示例:**
1207
1208```ts
1209import { socket } from '@kit.NetworkKit';
1210
1211let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1212let addr: socket.NetAddress = {
1213  address: '239.255.0.1',
1214  port: 8080
1215}
1216multicast.dropMembership(addr, (err: Object) => {
1217  if (err) {
1218    console.error('drop membership fail, err: ' + JSON.stringify(err));
1219    return;
1220  }
1221  console.log('drop membership success');
1222})
1223```
1224
1225### dropMembership<sup>11+</sup>
1226
1227dropMembership(multicastAddress: NetAddress): Promise\<void\>
1228
1229退出多播组。使用Promise方法作为异步方法。
1230
1231> **说明:**
1232> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1233> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
1234
1235**需要权限**:ohos.permission.INTERNET
1236
1237**系统能力**:SystemCapability.Communication.NetStack
1238
1239**参数:**
1240
1241| 参数名             | 类型                                   | 必填 | 说明                                           |
1242| ----------------- | ------------------------------------- | ---- | --------------------------------------------  |
1243| multicastAddress  | [NetAddress](#netaddress) |  是  | 目标地址信息,参考[NetAddress](#netaddress)。     |
1244
1245**返回值:**
1246
1247| 类型            | 说明                                              |
1248|  -------------- |  ----------------------------------------------- |
1249| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 |
1250
1251**错误码:**
1252
1253以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1254
1255| 错误码ID | 错误信息                 |
1256| ------- | ----------------------- |
1257| 401     | Parameter error.        |
1258| 201     | Permission denied.      |
1259| 2301088 | Not a socket.           |
1260| 2301098 | Address in use.         |
1261
1262**示例:**
1263
1264```ts
1265import { socket } from '@kit.NetworkKit';
1266
1267let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1268let addr: socket.NetAddress = {
1269  address: '239.255.0.1',
1270  port: 8080
1271}
1272multicast.dropMembership(addr).then(() => {
1273  console.log('drop membership success');
1274}).catch((err: Object) => {
1275  console.error('drop membership fail');
1276});
1277```
1278
1279### setMulticastTTL<sup>11+</sup>
1280
1281setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void
1282
1283设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。
1284
1285> **说明:**
1286> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1287> 范围为 0~255,默认值为 1 。
1288> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1289> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1290
1291**系统能力**:SystemCapability.Communication.NetStack
1292
1293**参数:**
1294
1295| 参数名         | 类型                   | 必填 | 说明                         |
1296| ------------- | --------------------- | ---- | ----------------------------- |
1297| ttl           | number                |  是  | ttl设置数值,类型为数字number。 |
1298| callback      | AsyncCallback\<void\> |  是  | 回调函数。失败返回错误码、错误信息。    |
1299
1300**错误码:**
1301
1302以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1303
1304| 错误码ID | 错误信息                 |
1305| ------- | ----------------------- |
1306| 401     | Parameter error.        |
1307| 2301022 | Invalid argument.       |
1308| 2301088 | Not a socket.           |
1309
1310**示例:**
1311
1312```ts
1313import { socket } from '@kit.NetworkKit';
1314
1315let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1316let ttl = 8
1317multicast.setMulticastTTL(ttl, (err: Object) => {
1318  if (err) {
1319    console.error('set ttl fail, err: ' + JSON.stringify(err));
1320    return;
1321  }
1322  console.log('set ttl success');
1323})
1324```
1325
1326### setMulticastTTL<sup>11+</sup>
1327
1328setMulticastTTL(ttl: number): Promise\<void\>
1329
1330设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。
1331
1332> **说明:**
1333> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1334> 范围为 0~255,默认值为 1 。
1335> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1336> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1337
1338**系统能力**:SystemCapability.Communication.NetStack
1339
1340**参数:**
1341
1342| 参数名         | 类型                   | 必填 | 说明                           |
1343| ------------- | ---------------------- | ---- | ------------------------------ |
1344| ttl           | number                 |  是  | ttl设置数值,类型为数字Number。 |
1345
1346**返回值:**
1347
1348| 类型            | 说明                                             |
1349|  -------------- |  ---------------------------------------------- |
1350| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 |
1351
1352**错误码:**
1353
1354以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1355
1356| 错误码ID | 错误信息                 |
1357| ------- | ----------------------- |
1358| 401     | Parameter error.        |
1359| 2301022 | Invalid argument.       |
1360| 2301088 | Not a socket.           |
1361
1362**示例:**
1363
1364```ts
1365import { socket } from '@kit.NetworkKit';
1366
1367let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1368multicast.setMulticastTTL(8).then(() => {
1369  console.log('set ttl success');
1370}).catch((err: Object) => {
1371  console.error('set ttl failed');
1372});
1373```
1374
1375### getMulticastTTL<sup>11+</sup>
1376
1377getMulticastTTL(callback: AsyncCallback\<number\>): void
1378
1379获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。
1380
1381> **说明:**
1382> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1383> 范围为 0~255,默认值为 1 。
1384> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1385> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1386
1387**系统能力**:SystemCapability.Communication.NetStack
1388
1389**参数:**
1390
1391| 参数名         | 类型                     | 必填 | 说明                         |
1392| ------------- | ----------------------- | ---- | --------------------------- |
1393| callback      | AsyncCallback\<number\> |  是  | 回调函数。失败返回错误码、错误信息。  |
1394
1395**错误码:**
1396
1397以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1398
1399| 错误码ID | 错误信息                 |
1400| ------- | ----------------------- |
1401| 401     | Parameter error.        |
1402| 2301088 | Not a socket.           |
1403
1404**示例:**
1405
1406```ts
1407import { socket } from '@kit.NetworkKit';
1408
1409let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1410multicast.getMulticastTTL((err: Object, value: Number) => {
1411  if (err) {
1412    console.error('set ttl fail, err: ' + JSON.stringify(err));
1413    return;
1414  }
1415  console.log('set ttl success, value: ' + JSON.stringify(value));
1416})
1417```
1418
1419### getMulticastTTL<sup>11+</sup>
1420
1421getMulticastTTL(): Promise\<number\>
1422
1423获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。
1424
1425> **说明:**
1426> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1427> 范围为 0~255,默认值为 1 。
1428> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1429> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1430
1431**系统能力**:SystemCapability.Communication.NetStack
1432
1433**返回值:**
1434
1435| 类型               | 说明                        |
1436| ----------------   | --------------------------- |
1437| Promise\<number\> | 以Promise形式返回当前TTL数值。 |
1438
1439**错误码:**
1440
1441以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1442
1443| 错误码ID | 错误信息                |
1444| ------- | ----------------------- |
1445| 401     | Parameter error.        |
1446| 2301088 | Not a socket.           |
1447
1448**示例:**
1449
1450```ts
1451import { socket } from '@kit.NetworkKit';
1452
1453let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1454multicast.getMulticastTTL().then((value: Number) => {
1455  console.log('ttl: ', JSON.stringify(value));
1456}).catch((err: Object) => {
1457  console.error('set ttl failed');
1458});
1459```
1460
1461### setLoopbackMode<sup>11+</sup>
1462
1463setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void
1464
1465设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1466
1467> **说明:**
1468> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1469> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1470> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1471
1472**系统能力**:SystemCapability.Communication.NetStack
1473
1474**参数:**
1475
1476| 参数名         | 类型                  | 必填 | 说明                         |
1477| ------------- | --------------------- | ---- | ---------------------------- |
1478| flag          | boolean               |  是  | 是否开启环回模式。true表示环回模式开启,false表示环回模式关闭。  |
1479| callback      | AsyncCallback\<void\> |  是  | 回调函数。失败返回错误码、错误信息。    |
1480
1481**错误码:**
1482
1483以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1484
1485| 错误码ID | 错误信息                 |
1486| ------- | ----------------------- |
1487| 401     | Parameter error.        |
1488| 2301088 | Not a socket.           |
1489
1490**示例:**
1491
1492```ts
1493import { socket } from '@kit.NetworkKit';
1494
1495let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1496multicast.setLoopbackMode(false, (err: Object) => {
1497  if (err) {
1498    console.error('set loopback mode fail, err: ' + JSON.stringify(err));
1499    return;
1500  }
1501  console.log('set loopback mode success');
1502})
1503```
1504
1505### setLoopbackMode<sup>11+</sup>
1506
1507setLoopbackMode(flag: boolean): Promise\<void\>
1508
1509设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1510
1511> **说明:**
1512> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1513> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1514> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1515
1516**系统能力**:SystemCapability.Communication.NetStack
1517
1518**参数:**
1519
1520| 参数名         | 类型                   | 必填 | 说明                             |
1521| ------------- | ---------------------- | ---- | -------------------------------- |
1522| flag          | boolean                |  是  | 是否开启环回模式。true表示环回模式开启,false表示环回模式关闭。|
1523
1524**返回值:**
1525
1526| 类型            | 说明                                             |
1527|  -------------- |  ---------------------------------------------- |
1528| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 |
1529
1530**错误码:**
1531
1532以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1533
1534| 错误码ID | 错误信息                |
1535| ------- | ----------------------- |
1536| 401     | Parameter error.        |
1537| 2301088 | Not a socket.           |
1538
1539**示例:**
1540
1541```ts
1542import { socket } from '@kit.NetworkKit';
1543
1544let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1545multicast.setLoopbackMode(false).then(() => {
1546  console.log('set loopback mode success');
1547}).catch((err: Object) => {
1548  console.error('set loopback mode failed');
1549});
1550```
1551
1552### getLoopbackMode<sup>11+</sup>
1553
1554getLoopbackMode(callback: AsyncCallback\<boolean\>): void
1555
1556获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1557
1558> **说明:**
1559> 用于获取当前环回模式开启或关闭的状态。
1560> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1561> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1562
1563**系统能力**:SystemCapability.Communication.NetStack
1564
1565**参数:**
1566
1567| 参数名         | 类型                     | 必填 | 说明                         |
1568| ------------- | ----------------------- | ---- | --------------------------- |
1569| callback      | AsyncCallback\<boolean\> |  是  | 回调函数。返回值为环回模式状态,true表示环回模式开启,false表示环回模式关闭。  |
1570
1571**错误码:**
1572
1573以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1574
1575| 错误码ID | 错误信息                |
1576| ------- | ----------------------- |
1577| 401     | Parameter error.        |
1578| 2301088 | Not a socket.           |
1579
1580**示例:**
1581
1582```ts
1583import { socket } from '@kit.NetworkKit';
1584
1585let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1586multicast.getLoopbackMode((err: Object, value: Boolean) => {
1587  if (err) {
1588    console.error('get loopback mode fail, err: ' + JSON.stringify(err));
1589    return;
1590  }
1591  console.log('get loopback mode success, value: ' + JSON.stringify(value));
1592})
1593```
1594
1595### getLoopbackMode<sup>11+</sup>
1596
1597getLoopbackMode(): Promise\<boolean\>
1598
1599获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1600
1601> **说明:**
1602> 用于获取当前环回模式开启或关闭的状态。
1603> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1604> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1605
1606**系统能力**:SystemCapability.Communication.NetStack
1607
1608**返回值:**
1609
1610| 类型                | 说明                        |
1611| ----------------  | --------------------------- |
1612| Promise\<boolean\> | Promise对象。返回true表示环回模式开启,返回false表示环回模式关闭。 |
1613
1614**错误码:**
1615
1616以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1617
1618| 错误码ID | 错误信息                |
1619| ------- | ----------------------- |
1620| 401     | Parameter error.        |
1621| 2301088 | Not a socket.           |
1622
1623**示例:**
1624
1625```ts
1626import { socket } from '@kit.NetworkKit';
1627
1628let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1629multicast.getLoopbackMode().then((value: Boolean) => {
1630  console.log('loopback mode: ', JSON.stringify(value));
1631}).catch((err: Object) => {
1632  console.error('get loopback mode failed');
1633});
1634```
1635
1636## socket.constructTCPSocketInstance<sup>7+</sup>
1637
1638constructTCPSocketInstance(): TCPSocket
1639
1640创建一个TCPSocket对象。
1641
1642**系统能力**:SystemCapability.Communication.NetStack
1643
1644**返回值:**
1645
1646| 类型                               | 说明                    |
1647| --------------------------------- | ---------------------- |
1648| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 |
1649
1650**示例:**
1651
1652```ts
1653import { socket } from '@kit.NetworkKit';
1654let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1655```
1656
1657## TCPSocket
1658
1659TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。
1660
1661### bind
1662
1663bind(address: NetAddress, callback: AsyncCallback\<void\>): void
1664
1665绑定IP地址和端口,端口可以指定为0由系统随机分配或由用户指定为其它非0端口。使用callback方法作为异步方法。
1666
1667> **说明:**
1668> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1669> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1670> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1671
1672**需要权限**:ohos.permission.INTERNET
1673
1674**系统能力**:SystemCapability.Communication.NetStack
1675
1676**参数:**
1677
1678| 参数名   | 类型                               | 必填 | 说明                                                   |
1679| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1680| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1681| callback | AsyncCallback\<void\>              | 是   | 回调函数。失败返回错误、错误信息。                   |
1682
1683**错误码:**
1684
1685以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1686
1687| 错误码ID | 错误信息                 |
1688| ------- | ----------------------- |
1689| 401     | Parameter error.        |
1690| 201     | Permission denied.      |
1691
1692**示例:**
1693
1694```ts
1695import { socket } from '@kit.NetworkKit';
1696import { BusinessError } from '@kit.BasicServicesKit';
1697
1698let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1699let bindAddr: socket.NetAddress = {
1700  address: '192.168.xx.xxx',
1701  port: 8080
1702}
1703tcp.bind(bindAddr, (err: BusinessError) => {
1704  if (err) {
1705    console.error('bind fail');
1706    return;
1707  }
1708  console.log('bind success');
1709})
1710```
1711
1712### bind
1713
1714bind(address: NetAddress): Promise\<void\>
1715
1716绑定IP地址和端口,端口可以指定为0由系统随机分配或由用户指定为其它非0端口。使用Promise方法作为异步方法。
1717
1718> **说明:**
1719> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1720> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1721> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1722
1723**需要权限**:ohos.permission.INTERNET
1724
1725**系统能力**:SystemCapability.Communication.NetStack
1726
1727**参数:**
1728
1729| 参数名  | 类型                               | 必填 | 说明                                                   |
1730| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1731| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1732
1733**返回值:**
1734
1735| 类型            | 说明                                                     |
1736| --------------- | ------------------------------------------------------- |
1737| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 |
1738
1739**错误码:**
1740
1741以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1742
1743| 错误码ID | 错误信息                 |
1744| ------- | ----------------------- |
1745| 401     | Parameter error.        |
1746| 201     | Permission denied.      |
1747
1748**示例:**
1749
1750```ts
1751import { socket } from '@kit.NetworkKit';
1752import { BusinessError } from '@kit.BasicServicesKit';
1753
1754let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1755let bindAddr: socket.NetAddress = {
1756  address: '192.168.xx.xxx',
1757  port: 8080
1758}
1759tcp.bind(bindAddr).then(() => {
1760  console.log('bind success');
1761}).catch((err: BusinessError) => {
1762  console.error('bind fail');
1763});
1764```
1765
1766### connect
1767
1768connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void
1769
1770连接到指定的IP地址和端口。使用callback方法作为异步方法。
1771
1772> **说明:**
1773> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接
1774
1775**需要权限**:ohos.permission.INTERNET
1776
1777**系统能力**:SystemCapability.Communication.NetStack
1778
1779**参数:**
1780
1781| 参数名   | 类型                                     | 必填 | 说明                                                         |
1782| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1783| options  | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1784| callback | AsyncCallback\<void\>                    | 是   | 回调函数。失败返回错误码、错误信息。                      |
1785
1786**错误码:**
1787
1788以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1789
1790| 错误码ID | 错误信息                 |
1791| ------- | ----------------------- |
1792| 401     | Parameter error.        |
1793| 201     | Permission denied.      |
1794| 2301206 | Socks5 failed to connect to the proxy server.  |
1795| 2301207 | Socks5 username or password is invalid.        |
1796| 2301208 | Socks5 failed to connect to the remote server. |
1797| 2301209 | Socks5 failed to negotiate the authentication method. |
1798| 2301210 | Socks5 failed to send the message.             |
1799| 2301211 | Socks5 failed to receive the message.          |
1800| 2301212 | Socks5 serialization error.                    |
1801| 2301213 | Socks5 deserialization error.                  |
1802
1803**示例:**
1804
1805```ts
1806import { socket } from '@kit.NetworkKit';
1807import { BusinessError } from '@kit.BasicServicesKit';
1808
1809let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1810let netAddress: socket.NetAddress = {
1811  address: '192.168.xx.xxx',
1812  port: 8080
1813}
1814let tcpconnectoptions: socket.TCPConnectOptions = {
1815  address: netAddress,
1816  timeout: 6000
1817}
1818tcp.connect(tcpconnectoptions, (err: BusinessError) => {
1819  if (err) {
1820    console.error('connect fail');
1821    return;
1822  }
1823  console.log('connect success');
1824})
1825```
1826
1827**示例(设置socket代理):**
1828
1829```ts
1830import { socket } from '@kit.NetworkKit';
1831import { BusinessError } from '@kit.BasicServicesKit';
1832
1833let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1834let netAddress: socket.NetAddress = {
1835  address: '192.168.xx.xxx',
1836  port: 8080
1837}
1838let socks5Server: socket.NetAddress = {
1839  address: '192.168.xx.xxx',
1840  port: 8080
1841}
1842let proxyOptions: socket.ProxyOptions = {
1843  type : 1,
1844  address: socks5Server,
1845  username: "xxx",
1846  password: "xxx"
1847}
1848let tcpconnectoptions: socket.TCPConnectOptions = {
1849  address: netAddress,
1850  timeout: 6000,
1851  proxy: proxyOptions,
1852}
1853tcp.connect(tcpconnectoptions, (err: BusinessError) => {
1854  if (err) {
1855    console.error('connect fail');
1856    return;
1857  }
1858  console.log('connect success');
1859})
1860```
1861
1862### connect
1863
1864connect(options: TCPConnectOptions): Promise\<void\>
1865
1866连接到指定的IP地址和端口。使用promise方法作为异步方法。
1867
1868> **说明:**
1869> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。
1870
1871**需要权限**:ohos.permission.INTERNET
1872
1873**系统能力**:SystemCapability.Communication.NetStack
1874
1875**参数:**
1876
1877| 参数名  | 类型                                     | 必填 | 说明                                                         |
1878| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1879| options | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1880
1881**返回值:**
1882
1883| 类型            | 说明                                                       |
1884| -------------- | --------------------------------------------------------- |
1885| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 |
1886
1887**错误码:**
1888
1889以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
1890
1891| 错误码ID | 错误信息                 |
1892| ------- | ----------------------- |
1893| 401     | Parameter error.        |
1894| 201     | Permission denied.      |
1895| 2301206 | Socks5 failed to connect to the proxy server.  |
1896| 2301207 | Socks5 username or password is invalid.        |
1897| 2301208 | Socks5 failed to connect to the remote server. |
1898| 2301209 | Socks5 failed to negotiate the authentication method. |
1899| 2301210 | Socks5 failed to send the message.             |
1900| 2301211 | Socks5 failed to receive the message.          |
1901| 2301212 | Socks5 serialization error.                    |
1902| 2301213 | Socks5 deserialization error.                  |
1903
1904**示例:**
1905
1906```ts
1907import { socket } from '@kit.NetworkKit';
1908import { BusinessError } from '@kit.BasicServicesKit';
1909
1910let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1911let netAddress: socket.NetAddress = {
1912  address: '192.168.xx.xxx',
1913  port: 8080
1914}
1915let tcpconnectoptions: socket.TCPConnectOptions = {
1916  address: netAddress,
1917  timeout: 6000
1918}
1919tcp.connect(tcpconnectoptions).then(() => {
1920  console.log('connect success')
1921}).catch((err: BusinessError) => {
1922  console.error('connect fail');
1923});
1924```
1925
1926**示例(设置socket代理):**
1927
1928```ts
1929import { socket } from '@kit.NetworkKit';
1930import { BusinessError } from '@kit.BasicServicesKit';
1931
1932let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1933let netAddress: socket.NetAddress = {
1934  address: '192.168.xx.xxx',
1935  port: 8080
1936}
1937let socks5Server: socket.NetAddress = {
1938  address: '192.168.xx.xxx',
1939  port: 8080
1940}
1941let proxyOptions: socket.ProxyOptions = {
1942  type : 1,
1943  address: socks5Server,
1944  username: "xxx",
1945  password: "xxx"
1946}
1947let tcpconnectoptions: socket.TCPConnectOptions = {
1948  address: netAddress,
1949  timeout: 6000,
1950  proxy: proxyOptions,
1951}
1952tcp.connect(tcpconnectoptions).then(() => {
1953  console.log('connect success')
1954}).catch((err: BusinessError) => {
1955  console.error('connect fail');
1956});
1957```
1958
1959### send
1960
1961send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
1962
1963通过TCPSocket连接发送数据。使用callback方式作为异步方法。
1964
1965> **说明:**
1966> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
1967
1968**需要权限**:ohos.permission.INTERNET
1969
1970**系统能力**:SystemCapability.Communication.NetStack
1971
1972**参数:**
1973
1974| 参数名   | 类型                                    | 必填 | 说明                                                         |
1975| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1976| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
1977| callback | AsyncCallback\<void\>                   | 是   | 回调函数。失败返回错误码、错误信息。                           |
1978
1979**错误码:**
1980
1981以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
1982
1983| 错误码ID | 错误信息                 |
1984| ------- | ----------------------- |
1985| 401     | Parameter error.        |
1986| 201     | Permission denied.      |
1987
1988**示例:**
1989
1990```ts
1991import { socket } from '@kit.NetworkKit';
1992import { BusinessError } from '@kit.BasicServicesKit';
1993
1994let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1995let netAddress: socket.NetAddress = {
1996  address: '192.168.xx.xxx',
1997  port: 8080
1998}
1999let tcpconnectoptions: socket.TCPConnectOptions = {
2000  address: netAddress,
2001  timeout: 6000
2002}
2003tcp.connect(tcpconnectoptions, () => {
2004  console.log('connect success');
2005  let tcpSendOptions: socket.TCPSendOptions = {
2006    data: 'Hello, server!'
2007  }
2008  tcp.send(tcpSendOptions, (err: BusinessError) => {
2009    if (err) {
2010      console.error('send fail');
2011      return;
2012    }
2013    console.log('send success');
2014  })
2015})
2016```
2017
2018### send
2019
2020send(options: TCPSendOptions): Promise\<void\>
2021
2022通过TCPSocket连接发送数据。使用Promise方式作为异步方法。
2023
2024> **说明:**
2025> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
2026
2027**需要权限**:ohos.permission.INTERNET
2028
2029**系统能力**:SystemCapability.Communication.NetStack
2030
2031**参数:**
2032
2033| 参数名  | 类型                                    | 必填 | 说明                                                         |
2034| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
2035| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
2036
2037**返回值:**
2038
2039| 类型            | 说明                                               |
2040| -------------- | ------------------------------------------------- |
2041| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
2042
2043**错误码:**
2044
2045以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2046
2047| 错误码ID | 错误信息                 |
2048| ------- | ----------------------- |
2049| 401     | Parameter error.        |
2050| 201     | Permission denied.      |
2051
2052**示例:**
2053
2054```ts
2055import { socket } from '@kit.NetworkKit';
2056import { BusinessError } from '@kit.BasicServicesKit';
2057
2058let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2059let netAddress: socket.NetAddress = {
2060  address: '192.168.xx.xxx',
2061  port: 8080
2062}
2063let tcpconnectoptions: socket.TCPConnectOptions = {
2064  address: netAddress,
2065  timeout: 6000
2066}
2067tcp.connect(tcpconnectoptions, () => {
2068  console.log('connect success');
2069  let tcpSendOptions: socket.TCPSendOptions = {
2070    data: 'Hello, server!'
2071  }
2072  tcp.send(tcpSendOptions).then(() => {
2073    console.log('send success');
2074  }).catch((err: BusinessError) => {
2075    console.error('send fail');
2076  });
2077})
2078```
2079
2080### close
2081
2082close(callback: AsyncCallback\<void\>): void
2083
2084关闭TCPSocket连接。使用callback方式作为异步方法。
2085
2086**需要权限**:ohos.permission.INTERNET
2087
2088**系统能力**:SystemCapability.Communication.NetStack
2089
2090**参数:**
2091
2092| 参数名   | 类型                  | 必填 | 说明       |
2093| -------- | --------------------- | ---- | ---------- |
2094| callback | AsyncCallback\<void\> | 是   | 回调函数。失败返回错误码、错误信息。 |
2095
2096**错误码:**
2097
2098以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2099
2100| 错误码ID | 错误信息                 |
2101| ------- | ----------------------- |
2102| 201     | Permission denied.      |
2103
2104**示例:**
2105
2106```ts
2107import { socket } from '@kit.NetworkKit';
2108import { BusinessError } from '@kit.BasicServicesKit';
2109
2110let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2111
2112tcp.close((err: BusinessError) => {
2113  if (err) {
2114    console.error('close fail');
2115    return;
2116  }
2117  console.log('close success');
2118})
2119```
2120
2121### close
2122
2123close(): Promise\<void\>
2124
2125关闭TCPSocket连接。使用Promise方式作为异步方法。
2126
2127**需要权限**:ohos.permission.INTERNET
2128
2129**系统能力**:SystemCapability.Communication.NetStack
2130
2131**返回值:**
2132
2133| 类型            | 说明                                       |
2134| -------------- | ----------------------------------------- |
2135| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
2136
2137**错误码:**
2138
2139以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2140
2141| 错误码ID | 错误信息                 |
2142| ------- | ----------------------- |
2143| 201     | Permission denied.      |
2144
2145**示例:**
2146
2147```ts
2148import { socket } from '@kit.NetworkKit';
2149import { BusinessError } from '@kit.BasicServicesKit';
2150
2151let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2152
2153tcp.close().then(() => {
2154  console.log('close success');
2155}).catch((err: BusinessError) => {
2156  console.error('close fail');
2157});
2158```
2159
2160### getRemoteAddress
2161
2162getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
2163
2164获取对端Socket地址。使用callback方式作为异步方法。
2165
2166> **说明:**
2167> connect方法调用成功后,才可调用此方法。
2168
2169**需要权限**:ohos.permission.INTERNET
2170
2171**系统能力**:SystemCapability.Communication.NetStack
2172
2173**参数:**
2174
2175| 参数名   | 类型                                              | 必填 | 说明       |
2176| -------- | ------------------------------------------------- | ---- | ---------- |
2177| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 |
2178
2179**错误码:**
2180
2181以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2182
2183| 错误码ID | 错误信息                 |
2184| ------- | ----------------------- |
2185| 201     | Permission denied.      |
2186
2187**示例:**
2188
2189```ts
2190import { socket } from '@kit.NetworkKit';
2191import { BusinessError } from '@kit.BasicServicesKit';
2192
2193let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2194let netAddress: socket.NetAddress = {
2195  address: '192.168.xx.xxx',
2196  port: 8080
2197}
2198let tcpconnectoptions: socket.TCPConnectOptions = {
2199  address: netAddress,
2200  timeout: 6000
2201}
2202tcp.connect(tcpconnectoptions, () => {
2203  console.log('connect success');
2204  tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
2205    if (err) {
2206      console.error('getRemoteAddressfail');
2207      return;
2208    }
2209    console.log('getRemoteAddresssuccess:' + JSON.stringify(data));
2210  })
2211});
2212```
2213
2214### getRemoteAddress
2215
2216getRemoteAddress(): Promise\<NetAddress\>
2217
2218获取对端Socket地址。使用Promise方式作为异步方法。
2219
2220> **说明:**
2221> connect方法调用成功后,才可调用此方法。
2222
2223**需要权限**:ohos.permission.INTERNET
2224
2225**系统能力**:SystemCapability.Communication.NetStack
2226
2227**返回值:**
2228
2229| 类型                                        | 说明                                        |
2230| ------------------------------------------ | ------------------------------------------ |
2231| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 |
2232
2233**错误码:**
2234
2235以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2236
2237| 错误码ID | 错误信息                 |
2238| ------- | ----------------------- |
2239| 201     | Permission denied.      |
2240
2241**示例:**
2242
2243```ts
2244import { socket } from '@kit.NetworkKit';
2245import { BusinessError } from '@kit.BasicServicesKit';
2246
2247let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2248let netAddress: socket.NetAddress = {
2249  address: '192.168.xx.xxx',
2250  port: 8080
2251}
2252let tcpconnectoptions: socket.TCPConnectOptions = {
2253  address: netAddress,
2254  timeout: 6000
2255}
2256tcp.connect(tcpconnectoptions).then(() => {
2257  console.log('connect success');
2258  tcp.getRemoteAddress().then(() => {
2259    console.log('getRemoteAddress success');
2260  }).catch((err: BusinessError) => {
2261    console.error('getRemoteAddressfail');
2262  });
2263}).catch((err: BusinessError) => {
2264  console.error('connect fail');
2265});
2266```
2267
2268### getState
2269
2270getState(callback: AsyncCallback\<SocketStateBase\>): void
2271
2272获取TCPSocket状态。使用callback方式作为异步方法。
2273
2274> **说明:**
2275> bind或connect方法调用成功后,才可调用此方法。
2276
2277**需要权限**:ohos.permission.INTERNET
2278
2279**系统能力**:SystemCapability.Communication.NetStack
2280
2281**参数:**
2282
2283| 参数名   | 类型                                                   | 必填 | 说明       |
2284| -------- | ------------------------------------------------------ | ---- | ---------- |
2285| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 |
2286
2287**错误码:**
2288
2289以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2290
2291| 错误码ID | 错误信息                 |
2292| ------- | ----------------------- |
2293| 201     | Permission denied.      |
2294
2295**示例:**
2296
2297```ts
2298import { socket } from '@kit.NetworkKit';
2299import { BusinessError } from '@kit.BasicServicesKit';
2300
2301let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2302let netAddress: socket.NetAddress = {
2303  address: '192.168.xx.xxx',
2304  port: 8080
2305}
2306let tcpconnectoptions: socket.TCPConnectOptions = {
2307  address: netAddress,
2308  timeout: 6000
2309}
2310tcp.connect(tcpconnectoptions, () => {
2311  console.log('connect success');
2312  tcp.getState((err: BusinessError, data: socket.SocketStateBase) => {
2313    if (err) {
2314      console.error('getState fail');
2315      return;
2316    }
2317    console.log('getState success:' + JSON.stringify(data));
2318  });
2319});
2320```
2321
2322### getState
2323
2324getState(): Promise\<SocketStateBase\>
2325
2326获取TCPSocket状态。使用Promise方式作为异步方法。
2327
2328> **说明:**
2329> bind或connect方法调用成功后,才可调用此方法。
2330
2331**需要权限**:ohos.permission.INTERNET
2332
2333**系统能力**:SystemCapability.Communication.NetStack
2334
2335**返回值:**
2336
2337| 类型                                             | 说明                                       |
2338| ----------------------------------------------- | ----------------------------------------- |
2339| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 |
2340
2341**错误码:**
2342
2343以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2344
2345| 错误码ID | 错误信息                 |
2346| ------- | ----------------------- |
2347| 201     | Permission denied.      |
2348
2349**示例:**
2350
2351```ts
2352import { socket } from '@kit.NetworkKit';
2353import { BusinessError } from '@kit.BasicServicesKit';
2354
2355let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2356let netAddress: socket.NetAddress = {
2357  address: '192.168.xx.xxx',
2358  port: 8080
2359}
2360let tcpconnectoptions: socket.TCPConnectOptions = {
2361  address: netAddress,
2362  timeout: 6000
2363}
2364tcp.connect(tcpconnectoptions).then(() => {
2365  console.log('connect success');
2366  tcp.getState().then(() => {
2367    console.log('getState success');
2368  }).catch((err: BusinessError) => {
2369    console.error('getState fail');
2370  });
2371}).catch((err: BusinessError) => {
2372  console.error('connect fail');
2373});
2374```
2375
2376### getSocketFd<sup>10+</sup>
2377
2378getSocketFd(callback: AsyncCallback\<number\>): void
2379
2380获取TCPSocket的文件描述符。使用callback方式作为异步方法。
2381
2382> **说明:**
2383> bind或connect方法调用成功后,才可调用此方法。
2384
2385**系统能力**:SystemCapability.Communication.NetStack
2386
2387**参数:**
2388
2389| 参数名   | 类型                                                   | 必填 | 说明       |
2390| -------- | ------------------------------------------------------ | ---- | ---------- |
2391| callback | AsyncCallback\<number\> | 是   | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 |
2392
2393**示例:**
2394
2395```ts
2396import { socket } from '@kit.NetworkKit';
2397import { BusinessError } from '@kit.BasicServicesKit';
2398
2399let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2400let bindAddr: socket.NetAddress = {
2401  address: '0.0.0.0'
2402}
2403tcp.bind(bindAddr)
2404let netAddress: socket.NetAddress = {
2405  address: '192.168.xx.xxx',
2406  port: 8080
2407}
2408let tcpconnectoptions: socket.TCPConnectOptions = {
2409  address: netAddress,
2410  timeout: 6000
2411}
2412tcp.connect(tcpconnectoptions)
2413tcp.getSocketFd((err: BusinessError, data: number) => {
2414  console.info("getSocketFd failed: " + err);
2415  console.info("tunenlfd: " + data);
2416})
2417```
2418### getSocketFd<sup>10+</sup>
2419
2420getSocketFd(): Promise\<number\>
2421
2422获取TCPSocket的文件描述符。使用Promise方式作为异步方法。
2423
2424> **说明:**
2425> bind或connect方法调用成功后,才可调用此方法。
2426
2427**系统能力**:SystemCapability.Communication.NetStack
2428
2429**返回值:**
2430
2431| 类型                                             | 说明                                       |
2432| ----------------------------------------------- | ----------------------------------------- |
2433| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
2434
2435**示例:**
2436
2437```ts
2438import { socket } from '@kit.NetworkKit';
2439import { BusinessError } from '@kit.BasicServicesKit';
2440
2441let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2442let bindAddr: socket.NetAddress = {
2443  address: '0.0.0.0'
2444}
2445tcp.bind(bindAddr)
2446let netAddress: socket.NetAddress = {
2447  address: '192.168.xx.xxx',
2448  port: 8080
2449}
2450let tcpconnectoptions: socket.TCPConnectOptions = {
2451  address: netAddress,
2452  timeout: 6000
2453}
2454tcp.connect(tcpconnectoptions)
2455tcp.getSocketFd().then((data: number) => {
2456  console.info("tunenlfd: " + data);
2457})
2458```
2459
2460### setExtraOptions
2461
2462setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
2463
2464设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
2465
2466> **说明:**
2467> bind或connect方法调用成功后,才可调用此方法。
2468
2469**需要权限**:ohos.permission.INTERNET
2470
2471**系统能力**:SystemCapability.Communication.NetStack
2472
2473**参数:**
2474
2475| 参数名   | 类型                                      | 必填 | 说明                                                         |
2476| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2477| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2478| callback | AsyncCallback\<void\>                     | 是   | 回调函数。失败时返回错误码、错误信息。               |
2479
2480**错误码:**
2481
2482以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2483
2484| 错误码ID | 错误信息                 |
2485| ------- | ----------------------- |
2486| 401     | Parameter error.        |
2487| 201     | Permission denied.      |
2488
2489**示例:**
2490
2491```ts
2492import { socket } from '@kit.NetworkKit';
2493import { BusinessError } from '@kit.BasicServicesKit';
2494
2495let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2496let netAddress: socket.NetAddress = {
2497  address: '192.168.xx.xxx',
2498  port: 8080
2499}
2500let tcpconnectoptions: socket.TCPConnectOptions = {
2501  address: netAddress,
2502  timeout: 6000
2503}
2504
2505interface SocketLinger {
2506  on: boolean;
2507  linger: number;
2508}
2509
2510tcp.connect(tcpconnectoptions, () => {
2511  console.log('connect success');
2512  let tcpExtraOptions: socket.TCPExtraOptions = {
2513    keepAlive: true,
2514    OOBInline: true,
2515    TCPNoDelay: true,
2516    socketLinger: { on: true, linger: 10 } as SocketLinger,
2517    receiveBufferSize: 8192,
2518    sendBufferSize: 8192,
2519    reuseAddress: true,
2520    socketTimeout: 3000
2521  }
2522  tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
2523    if (err) {
2524      console.error('setExtraOptions fail');
2525      return;
2526    }
2527    console.log('setExtraOptions success');
2528  });
2529});
2530```
2531
2532### setExtraOptions
2533
2534setExtraOptions(options: TCPExtraOptions): Promise\<void\>
2535
2536设置TCPSocket连接的其他属性。使用Promise方式作为异步方法。
2537
2538> **说明:**
2539> bind或connect方法调用成功后,才可调用此方法。
2540
2541**需要权限**:ohos.permission.INTERNET
2542
2543**系统能力**:SystemCapability.Communication.NetStack
2544
2545**参数:**
2546
2547| 参数名  | 类型                                      | 必填 | 说明                                                         |
2548| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2549| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2550
2551**返回值:**
2552
2553| 类型            | 说明                                                 |
2554| -------------- | --------------------------------------------------- |
2555| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
2556
2557**错误码:**
2558
2559以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
2560
2561| 错误码ID | 错误信息                 |
2562| ------- | ----------------------- |
2563| 401     | Parameter error.        |
2564| 201     | Permission denied.      |
2565
2566**示例:**
2567
2568```ts
2569import { socket } from '@kit.NetworkKit';
2570import { BusinessError } from '@kit.BasicServicesKit';
2571
2572let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2573let netAddress: socket.NetAddress = {
2574  address: '192.168.xx.xxx',
2575  port: 8080
2576}
2577let tcpconnectoptions: socket.TCPConnectOptions = {
2578  address: netAddress,
2579  timeout: 6000
2580}
2581
2582interface SocketLinger {
2583  on: boolean;
2584  linger: number;
2585}
2586
2587tcp.connect(tcpconnectoptions, () => {
2588  console.log('connect success');
2589  let tcpExtraOptions: socket.TCPExtraOptions = {
2590    keepAlive: true,
2591    OOBInline: true,
2592    TCPNoDelay: true,
2593    socketLinger: { on: true, linger: 10 } as SocketLinger,
2594    receiveBufferSize: 8192,
2595    sendBufferSize: 8192,
2596    reuseAddress: true,
2597    socketTimeout: 3000
2598  }
2599  tcp.setExtraOptions(tcpExtraOptions).then(() => {
2600    console.log('setExtraOptions success');
2601  }).catch((err: BusinessError) => {
2602    console.error('setExtraOptions fail');
2603  });
2604});
2605```
2606
2607### getLocalAddress<sup>12+</sup>
2608
2609getLocalAddress(): Promise\<NetAddress\>
2610
2611获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。
2612
2613> **说明:**
2614> bind方法调用成功后,才可调用此方法。
2615
2616**系统能力**:SystemCapability.Communication.NetStack
2617
2618**返回值:**
2619
2620| 类型            | 说明                                                 |
2621|  -------------- |  --------------------------------------------------- |
2622| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
2623
2624**错误码:**
2625
2626以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
2627
2628| 错误码ID | 错误信息                                    |
2629| -------- | ------------------------------------------- |
2630| 2300002  | System internal error.                      |
2631| 2301009  | Bad file descriptor.                            |
2632| 2303188  | Socket operation on non-socket. |
2633
2634**示例:**
2635
2636```ts
2637import { socket } from '@kit.NetworkKit';
2638import { BusinessError } from '@kit.BasicServicesKit';
2639
2640let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2641let bindAddr: socket.NetAddress = {
2642  address: '192.168.xx.xxx',
2643  family: 1,
2644  port: 8080
2645}
2646tcp.bind(bindAddr).then(() => {
2647  tcp.getLocalAddress().then((localAddress: socket.NetAddress) => {
2648    console.info("SUCCESS! Address:" + JSON.stringify(localAddress));
2649  }).catch((err: BusinessError) => {
2650    console.error("FAILED! Error:" + JSON.stringify(err));
2651  })
2652}).catch((err: BusinessError) => {
2653  console.error('bind fail');
2654});
2655```
2656
2657### on('message')
2658
2659on(type: 'message', callback: Callback<SocketMessageInfo\>): void
2660
2661订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2662
2663**系统能力**:SystemCapability.Communication.NetStack
2664
2665**参数:**
2666
2667| 参数名   | 类型                                                         | 必填 | 说明                                      |
2668| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2669| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
2670| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。返回TCPSocket连接信息。                          |
2671
2672**示例:**
2673
2674```ts
2675import { socket } from '@kit.NetworkKit';
2676import { BusinessError } from '@kit.BasicServicesKit';
2677
2678let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2679let messageView = '';
2680tcp.on('message', (value: socket.SocketMessageInfo) => {
2681  for (let i: number = 0; i < value.message.byteLength; i++) {
2682    let uint8Array = new Uint8Array(value.message)
2683    let messages = uint8Array[i]
2684    let message = String.fromCharCode(messages);
2685    messageView += message;
2686  }
2687  console.log('on message message: ' + JSON.stringify(messageView));
2688  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2689});
2690```
2691
2692### off('message')
2693
2694off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
2695
2696取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2697
2698**系统能力**:SystemCapability.Communication.NetStack
2699
2700**参数:**
2701
2702| 参数名   | 类型                                                         | 必填 | 说明                                      |
2703| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2704| type     | string                                                       | 是   | 取消订阅的事件类型。'message':接收消息事件。 |
2705| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。                             |
2706
2707**示例:**
2708
2709```ts
2710import { socket } from '@kit.NetworkKit';
2711import { BusinessError } from '@kit.BasicServicesKit';
2712
2713let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2714let messageView = '';
2715let callback = (value: socket.SocketMessageInfo) => {
2716  for (let i: number = 0; i < value.message.byteLength; i++) {
2717    let uint8Array = new Uint8Array(value.message)
2718    let messages = uint8Array[i]
2719    let message = String.fromCharCode(messages);
2720    messageView += message;
2721  }
2722  console.log('on message message: ' + JSON.stringify(messageView));
2723  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2724}
2725tcp.on('message', callback);
2726// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2727tcp.off('message', callback);
2728tcp.off('message');
2729```
2730
2731### on('connect' | 'close')
2732
2733on(type: 'connect' | 'close', callback: Callback\<void\>): void
2734
2735订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2736
2737**系统能力**:SystemCapability.Communication.NetStack
2738
2739**参数:**
2740
2741| 参数名   | 类型             | 必填 | 说明                                                         |
2742| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2743| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2744| callback | Callback\<void\> | 是   | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。            |
2745
2746**示例:**
2747
2748```ts
2749import { socket } from '@kit.NetworkKit';
2750import { BusinessError } from '@kit.BasicServicesKit';
2751
2752let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2753tcp.on('connect', () => {
2754  console.log("on connect success")
2755});
2756tcp.on('close', () => {
2757  console.log("on close success")
2758});
2759```
2760
2761### off('connect' | 'close')
2762
2763off(type: 'connect' | 'close', callback?: Callback\<void\>): void
2764
2765取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2766
2767**系统能力**:SystemCapability.Communication.NetStack
2768
2769**参数:**
2770
2771| 参数名   | 类型             | 必填 | 说明                                                         |
2772| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2773| type     | string           | 是   | 取消订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2774| callback | Callback\<void\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。                        |
2775
2776**示例:**
2777
2778```ts
2779import { socket } from '@kit.NetworkKit';
2780import { BusinessError } from '@kit.BasicServicesKit';
2781
2782let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2783let callback1 = () => {
2784  console.log("on connect success");
2785}
2786tcp.on('connect', callback1);
2787// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2788tcp.off('connect', callback1);
2789tcp.off('connect');
2790let callback2 = () => {
2791  console.log("on close success");
2792}
2793tcp.on('close', callback2);
2794// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2795tcp.off('close', callback2);
2796tcp.off('close');
2797```
2798
2799### on('error')
2800
2801on(type: 'error', callback: ErrorCallback): void
2802
2803订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2804
2805**系统能力**:SystemCapability.Communication.NetStack
2806
2807**参数:**
2808
2809| 参数名   | 类型          | 必填 | 说明                                 |
2810| -------- | ------------- | ---- | ------------------------------------ |
2811| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2812| callback | ErrorCallback | 是   | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。                           |
2813
2814**示例:**
2815
2816```ts
2817import { socket } from '@kit.NetworkKit';
2818import { BusinessError } from '@kit.BasicServicesKit';
2819
2820let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2821tcp.on('error', (err: BusinessError) => {
2822  console.error("on error, err:" + JSON.stringify(err))
2823});
2824```
2825
2826### off('error')
2827
2828off(type: 'error', callback?: ErrorCallback): void
2829
2830取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2831
2832**系统能力**:SystemCapability.Communication.NetStack
2833
2834**参数:**
2835
2836| 参数名   | 类型          | 必填 | 说明                                 |
2837| -------- | ------------- | ---- | ------------------------------------ |
2838| type     | string        | 是   | 取消订阅的事件类型。'error':error事件。 |
2839| callback | ErrorCallback | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。                           |
2840
2841**示例:**
2842
2843```ts
2844import { socket } from '@kit.NetworkKit';
2845import { BusinessError } from '@kit.BasicServicesKit';
2846
2847let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2848let callback = (err: BusinessError) => {
2849  console.error("on error, err:" + JSON.stringify(err));
2850}
2851tcp.on('error', callback);
2852// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2853tcp.off('error', callback);
2854tcp.off('error');
2855```
2856
2857## TCPConnectOptions
2858
2859TCPSocket连接的参数。
2860
2861**系统能力**:SystemCapability.Communication.NetStack
2862
2863| 名称  | 类型                               | 必填 | 说明                       |
2864| ------- | ---------------------------------- | ---- | -------------------------- |
2865| address | [NetAddress](#netaddress) | 是   | 绑定的地址以及端口。       |
2866| timeout | number                             | 否   | 超时时间,单位毫秒(ms)。默认值为5000。 |
2867| proxy<sup>18+</sup>   | [ProxyOptions](#proxyoptions18) | 否   | 使用的代理信息,默认不使用代理。 |
2868
2869## TCPSendOptions
2870
2871TCPSocket发送请求的参数。
2872
2873**系统能力**:SystemCapability.Communication.NetStack
2874
2875| 名称   | 类型   | 必填 | 说明                                                         |
2876| -------- | ------ | ---- | ------------------------------------------------------------ |
2877| data     | string\| ArrayBuffer  | 是   | 发送的数据。                                                 |
2878| encoding | string | 否   | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 |
2879
2880## TCPExtraOptions
2881
2882TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。
2883
2884**系统能力**:SystemCapability.Communication.NetStack
2885
2886| 名称            | 类型    | 必填 | 说明                                                         |
2887| ----------------- | ------- | ---- | ------------------------------------------------------------ |
2888| keepAlive         | boolean | 否   | 是否保持连接。默认为false。true:保持连接;false:断开连接。                                  |
2889| OOBInline         | boolean | 否   | 是否为OOB内联。默认为false。true:是OOB内联;false:不是OOB内联。                                 |
2890| TCPNoDelay        | boolean | 否   | TCPSocket连接是否无时延。默认为false。true:无时延;false:有时延。                       |
2891| socketLinger      | \{on:boolean, linger:number\}  | 否   | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 |
2892
2893## socket.constructTCPSocketServerInstance<sup>10+</sup>
2894
2895constructTCPSocketServerInstance(): TCPSocketServer
2896
2897创建一个TCPSocketServer对象。
2898
2899**系统能力**:SystemCapability.Communication.NetStack
2900
2901**返回值:**
2902
2903| 类型                                | 说明                          |
2904|  ---------------------------------- |  ---------------------------- |
2905| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 |
2906
2907**示例:**
2908
2909```ts
2910import { socket } from '@kit.NetworkKit';
2911let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2912```
2913
2914## TCPSocketServer<sup>10+</sup>
2915
2916TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。
2917
2918### listen<sup>10+</sup>
2919
2920listen(address: NetAddress, callback: AsyncCallback\<void\>): void
2921
2922绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。
2923
2924> **说明:**
2925> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2926
2927**需要权限**:ohos.permission.INTERNET
2928
2929**系统能力**:SystemCapability.Communication.NetStack
2930
2931**参数:**
2932
2933| 参数名   | 类型                      | 必填 | 说明                                          |
2934| -------- | ------------------------- | ---- | --------------------------------------------- |
2935| address  | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2936| callback | AsyncCallback\<void\>     | 是   | 回调函数。失败时返回错误码、错误信息。    |
2937
2938**错误码:**
2939
2940以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
2941
2942| 错误码ID | 错误信息                                    |
2943| -------- | ------------------------------------------- |
2944| 401      | Parameter error.                            |
2945| 201      | Permission denied.                          |
2946| 2300002  | System internal error.                      |
2947| 2303109  | Bad file number.                            |
2948| 2303111  | Resource temporarily unavailable. Try again.|
2949| 2303198  | Address already in use.                     |
2950| 2303199  | Cannot assign requested address.            |
2951
2952**示例:**
2953
2954```ts
2955import { socket } from '@kit.NetworkKit';
2956import { BusinessError } from '@kit.BasicServicesKit';
2957
2958let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2959let listenAddr: socket.NetAddress = {
2960  address:  '192.168.xx.xxx',
2961  port: 8080,
2962  family: 1
2963}
2964tcpServer.listen(listenAddr, (err: BusinessError) => {
2965  if (err) {
2966    console.error("listen fail");
2967    return;
2968  }
2969  console.log("listen success");
2970})
2971```
2972
2973### listen<sup>10+</sup>
2974
2975listen(address: NetAddress): Promise\<void\>
2976
2977绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
2978
2979> **说明:**
2980> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2981
2982**需要权限**:ohos.permission.INTERNET
2983
2984**系统能力**:SystemCapability.Communication.NetStack
2985
2986**参数:**
2987
2988| 参数名  | 类型                      | 必填 | 说明                                          |
2989| ------- | ------------------------- | ---- | --------------------------------------------- |
2990| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2991
2992**返回值:**
2993
2994| 类型            | 说明                                                         |
2995|  -------------- |  ----------------------------------------------------------- |
2996| Promise\<void\> | Promise对象。无返回结果的Promise对象。|
2997
2998**错误码:**
2999
3000以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3001
3002| 错误码ID | 错误信息                                    |
3003| -------- | ------------------------------------------- |
3004| 401      | Parameter error.                            |
3005| 201      | Permission denied.                          |
3006| 2300002  | System internal error.                      |
3007| 2303109  | Bad file number.                            |
3008| 2303111  | Resource temporarily unavailable. Try again.|
3009| 2303198  | Address already in use.                     |
3010| 2303199  | Cannot assign requested address.            |
3011
3012**示例:**
3013
3014```ts
3015import { socket } from '@kit.NetworkKit';
3016import { BusinessError } from '@kit.BasicServicesKit';
3017
3018let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3019let listenAddr: socket.NetAddress = {
3020  address:  '192.168.xx.xxx',
3021  port: 8080,
3022  family: 1
3023}
3024tcpServer.listen(listenAddr).then(() => {
3025  console.log('listen success');
3026}).catch((err: BusinessError) => {
3027  console.error('listen fail');
3028});
3029```
3030
3031### getState<sup>10+</sup>
3032
3033getState(callback: AsyncCallback\<SocketStateBase\>): void
3034
3035获取TCPSocketServer状态。使用callback方式作为异步方法。
3036
3037> **说明:**
3038> listen方法调用成功后,才可调用此方法。
3039
3040**需要权限**:ohos.permission.INTERNET
3041
3042**系统能力**:SystemCapability.Communication.NetStack
3043
3044**参数:**
3045
3046| 参数名   | 类型                                               | 必填 | 说明       |
3047| -------- | -------------------------------------------------- | ---- | ---------- |
3048| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
3049
3050**错误码:**
3051
3052以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3053
3054| 错误码ID | 错误信息                        |
3055| -------- | ------------------------------- |
3056| 401      | Parameter error.                |
3057| 201      | Permission denied.              |
3058| 2300002  | System internal error.          |
3059| 2303188  | Socket operation on non-socket. |
3060
3061**示例:**
3062
3063```ts
3064import { socket } from '@kit.NetworkKit';
3065import { BusinessError } from '@kit.BasicServicesKit';
3066
3067let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3068let listenAddr: socket.NetAddress = {
3069  address:  '192.168.xx.xxx',
3070  port: 8080,
3071  family: 1
3072}
3073tcpServer.listen(listenAddr, (err: BusinessError) => {
3074  if (err) {
3075    console.error("listen fail");
3076    return;
3077  }
3078  console.log("listen success");
3079})
3080tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
3081  if (err) {
3082    console.error('getState fail');
3083    return;
3084  }
3085  console.log('getState success:' + JSON.stringify(data));
3086})
3087```
3088
3089### getState<sup>10+</sup>
3090
3091getState(): Promise\<SocketStateBase\>
3092
3093获取TCPSocketServer状态。使用Promise方式作为异步方法。
3094
3095> **说明:**
3096> listen方法调用成功后,才可调用此方法。
3097
3098**需要权限**:ohos.permission.INTERNET
3099
3100**系统能力**:SystemCapability.Communication.NetStack
3101
3102**返回值:**
3103
3104| 类型                                         | 说明                                       |
3105|  ------------------------------------------- |  ----------------------------------------- |
3106| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 |
3107
3108**错误码:**
3109
3110以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3111
3112| 错误码ID | 错误信息                        |
3113| -------- | ------------------------------- |
3114| 201      | Permission denied.              |
3115| 2300002  | System internal error.          |
3116| 2303188  | Socket operation on non-socket. |
3117
3118**示例:**
3119
3120```ts
3121import { socket } from '@kit.NetworkKit';
3122import { BusinessError } from '@kit.BasicServicesKit';
3123
3124let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3125let listenAddr: socket.NetAddress = {
3126  address:  '192.168.xx.xxx',
3127  port: 8080,
3128  family: 1
3129}
3130tcpServer.listen(listenAddr, (err: BusinessError) => {
3131  if (err) {
3132    console.error("listen fail");
3133    return;
3134  }
3135  console.log("listen success");
3136})
3137tcpServer.getState().then((data: socket.SocketStateBase) => {
3138  console.log('getState success' + JSON.stringify(data));
3139}).catch((err: BusinessError) => {
3140  console.error('getState fail');
3141});
3142```
3143
3144### setExtraOptions<sup>10+</sup>
3145
3146setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
3147
3148设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。
3149
3150> **说明:**
3151> listen方法调用成功后,才可调用此方法。
3152
3153**需要权限**:ohos.permission.INTERNET
3154
3155**系统能力**:SystemCapability.Communication.NetStack
3156
3157**参数:**
3158
3159| 参数名   | 类型                                | 必填 | 说明                                                         |
3160| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
3161| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
3162| callback | AsyncCallback\<void\>               | 是   | 回调函数。失败时返回错误码、错误信息。                |
3163
3164**错误码:**
3165
3166以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3167
3168| 错误码ID | 错误信息                        |
3169| -------- | ------------------------------- |
3170| 401      | Parameter error.                |
3171| 201      | Permission denied.              |
3172| 2300002  | System internal error.          |
3173| 2303188  | Socket operation on non-socket. |
3174
3175**示例:**
3176
3177```ts
3178import { socket } from '@kit.NetworkKit';
3179import { BusinessError } from '@kit.BasicServicesKit';
3180
3181let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3182let listenAddr: socket.NetAddress = {
3183  address:  '192.168.xx.xxx',
3184  port: 8080,
3185  family: 1
3186}
3187tcpServer.listen(listenAddr, (err: BusinessError) => {
3188  if (err) {
3189    console.error("listen fail");
3190    return;
3191  }
3192  console.log("listen success");
3193})
3194
3195interface SocketLinger {
3196  on: boolean;
3197  linger: number;
3198}
3199
3200let tcpExtraOptions: socket.TCPExtraOptions = {
3201  keepAlive: true,
3202  OOBInline: true,
3203  TCPNoDelay: true,
3204  socketLinger: { on: true, linger: 10 } as SocketLinger,
3205  receiveBufferSize: 8192,
3206  sendBufferSize: 8192,
3207  reuseAddress: true,
3208  socketTimeout: 3000
3209}
3210tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
3211  if (err) {
3212    console.error('setExtraOptions fail');
3213    return;
3214  }
3215  console.log('setExtraOptions success');
3216});
3217```
3218
3219### setExtraOptions<sup>10+</sup>
3220
3221setExtraOptions(options: TCPExtraOptions): Promise\<void\>
3222
3223设置TCPSocketServer连接的其他属性。使用Promise方式作为异步方法。
3224
3225> **说明:**
3226> listen方法调用成功后,才可调用此方法。
3227
3228**需要权限**:ohos.permission.INTERNET
3229
3230**系统能力**:SystemCapability.Communication.NetStack
3231
3232**参数:**
3233
3234| 参数名  | 类型                                | 必填 | 说明                                                         |
3235| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
3236| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
3237
3238**返回值:**
3239
3240| 类型            | 说明                                                       |
3241|  -------------- |  --------------------------------------------------------- |
3242| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
3243
3244**错误码:**
3245
3246以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3247
3248| 错误码ID | 错误信息                        |
3249| -------- | ------------------------------- |
3250| 401      | Parameter error.                |
3251| 201      | Permission denied.              |
3252| 2300002  | System internal error.          |
3253| 2303188  | Socket operation on non-socket. |
3254
3255**示例:**
3256
3257```ts
3258import { socket } from '@kit.NetworkKit';
3259import { BusinessError } from '@kit.BasicServicesKit';
3260
3261let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3262let listenAddr: socket.NetAddress = {
3263  address:  '192.168.xx.xxx',
3264  port: 8080,
3265  family: 1
3266}
3267
3268interface SocketLinger {
3269  on: boolean;
3270  linger: number;
3271}
3272
3273tcpServer.listen(listenAddr, (err: BusinessError) => {
3274  if (err) {
3275    console.error("listen fail");
3276    return;
3277  }
3278  console.log("listen success");
3279})
3280
3281let tcpExtraOptions: socket.TCPExtraOptions = {
3282  keepAlive: true,
3283  OOBInline: true,
3284  TCPNoDelay: true,
3285  socketLinger: { on: true, linger: 10 } as SocketLinger,
3286  receiveBufferSize: 8192,
3287  sendBufferSize: 8192,
3288  reuseAddress: true,
3289  socketTimeout: 3000
3290}
3291tcpServer.setExtraOptions(tcpExtraOptions).then(() => {
3292  console.log('setExtraOptions success');
3293}).catch((err: BusinessError) => {
3294  console.error('setExtraOptions fail');
3295});
3296```
3297
3298### getLocalAddress<sup>12+</sup>
3299
3300getLocalAddress(): Promise\<NetAddress\>
3301
3302获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。
3303
3304> **说明:**
3305> listen方法调用成功后,才可调用此方法。
3306
3307**系统能力**:SystemCapability.Communication.NetStack
3308
3309**返回值:**
3310
3311| 类型            | 说明                                                 |
3312|  -------------- |  --------------------------------------------------- |
3313| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
3314
3315**错误码:**
3316
3317以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
3318
3319| 错误码ID | 错误信息                                    |
3320| -------- | ------------------------------------------- |
3321| 2300002  | System internal error.                      |
3322| 2301009  | Bad file descriptor.                            |
3323| 2303188  | Socket operation on non-socket. |
3324
3325**示例:**
3326
3327```ts
3328import { socket } from '@kit.NetworkKit';
3329import { BusinessError } from '@kit.BasicServicesKit';
3330
3331let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3332let listenAddr: socket.NetAddress = {
3333  address: '192.168.xx.xxx',
3334  port: 8080,
3335  family: 1
3336}
3337tcpServer.listen(listenAddr).then(() => {
3338  tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
3339    console.info("SUCCESS! Address:" + JSON.stringify(localAddress));
3340  }).catch((err: BusinessError) => {
3341    console.error("FerrorAILED! Error:" + JSON.stringify(err));
3342  })
3343}).catch((err: BusinessError) => {
3344  console.error('listen fail');
3345});
3346```
3347
3348### on('connect')<sup>10+</sup>
3349
3350on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void
3351
3352订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
3353
3354> **说明:**
3355> listen方法调用成功后,才可调用此方法。
3356
3357**系统能力**:SystemCapability.Communication.NetStack
3358
3359**参数:**
3360
3361| 参数名   | 类型                            | 必填 | 说明                                  |
3362| -------- | ------------------------------- | ---- | ------------------------------------- |
3363| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
3364| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是   | 回调函数。失败时返回错误码、错误信息。       |
3365
3366**错误码:**
3367
3368以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
3369
3370| 错误码ID | 错误信息         |
3371| -------- | ---------------- |
3372| 401      | Parameter error. |
3373
3374**示例:**
3375
3376```ts
3377import { socket } from '@kit.NetworkKit';
3378import { BusinessError } from '@kit.BasicServicesKit';
3379
3380let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3381
3382let listenAddr: socket.NetAddress = {
3383  address:  '192.168.xx.xxx',
3384  port: 8080,
3385  family: 1
3386}
3387tcpServer.listen(listenAddr, (err: BusinessError) => {
3388  if (err) {
3389    console.error("listen fail");
3390    return;
3391  }
3392  console.log("listen success");
3393  tcpServer.on('connect', (data: socket.TCPSocketConnection) => {
3394    console.log(JSON.stringify(data))
3395  });
3396})
3397```
3398
3399### off('connect')<sup>10+</sup>
3400
3401off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void
3402
3403取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
3404
3405**系统能力**:SystemCapability.Communication.NetStack
3406
3407**参数:**
3408
3409| 参数名   | 类型                            | 必填 | 说明                                  |
3410| -------- | ------------------------------- | ---- | ------------------------------------- |
3411| type     | string                          | 是   | 取消订阅的事件类型。'connect':连接事件。 |
3412| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 |
3413
3414**错误码:**
3415
3416以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
3417
3418| 错误码ID | 错误信息         |
3419| -------- | ---------------- |
3420| 401      | Parameter error. |
3421
3422**示例:**
3423
3424```ts
3425import { socket } from '@kit.NetworkKit';
3426import { BusinessError } from '@kit.BasicServicesKit';
3427
3428let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3429
3430let listenAddr: socket.NetAddress = {
3431  address:  '192.168.xx.xxx',
3432  port: 8080,
3433  family: 1
3434}
3435tcpServer.listen(listenAddr, (err: BusinessError) => {
3436  if (err) {
3437    console.error("listen fail");
3438    return;
3439  }
3440  console.log("listen success");
3441  let callback = (data: socket.TCPSocketConnection) => {
3442    console.log('on connect message: ' + JSON.stringify(data));
3443  }
3444  tcpServer.on('connect', callback);
3445  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3446  tcpServer.off('connect', callback);
3447  tcpServer.off('connect');
3448})
3449```
3450
3451### on('error')<sup>10+</sup>
3452
3453on(type: 'error', callback: ErrorCallback): void
3454
3455订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3456
3457> **说明:**
3458> listen方法调用成功后,才可调用此方法。
3459
3460**系统能力**:SystemCapability.Communication.NetStack
3461
3462**参数:**
3463
3464| 参数名   | 类型          | 必填 | 说明                                 |
3465| -------- | ------------- | ---- | ------------------------------------ |
3466| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3467| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。|
3468
3469**错误码:**
3470
3471以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
3472
3473| 错误码ID | 错误信息         |
3474| -------- | ---------------- |
3475| 401      | Parameter error. |
3476
3477**示例:**
3478
3479```ts
3480import { socket } from '@kit.NetworkKit';
3481import { BusinessError } from '@kit.BasicServicesKit';
3482
3483let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3484
3485let listenAddr: socket.NetAddress = {
3486  address:  '192.168.xx.xxx',
3487  port: 8080,
3488  family: 1
3489}
3490tcpServer.listen(listenAddr, (err: BusinessError) => {
3491  if (err) {
3492    console.error("listen fail");
3493    return;
3494  }
3495  console.log("listen success");
3496  tcpServer.on('error', (err: BusinessError) => {
3497    console.error("on error, err:" + JSON.stringify(err))
3498  });
3499})
3500```
3501
3502### off('error')<sup>10+</sup>
3503
3504off(type: 'error', callback?: ErrorCallback): void
3505
3506取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3507
3508**系统能力**:SystemCapability.Communication.NetStack
3509
3510**参数:**
3511
3512| 参数名   | 类型          | 必填 | 说明                                 |
3513| -------- | ------------- | ---- | ------------------------------------ |
3514| type     | string        | 是   | 取消订阅的事件类型。'error':error事件。 |
3515| callback | ErrorCallback | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。                           |
3516
3517**错误码:**
3518
3519以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
3520
3521| 错误码ID | 错误信息         |
3522| -------- | ---------------- |
3523| 401      | Parameter error. |
3524
3525**示例:**
3526
3527```ts
3528import { socket } from '@kit.NetworkKit';
3529import { BusinessError } from '@kit.BasicServicesKit';
3530
3531let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3532
3533let listenAddr: socket.NetAddress = {
3534  address:  '192.168.xx.xxx',
3535  port: 8080,
3536  family: 1
3537}
3538tcpServer.listen(listenAddr, (err: BusinessError) => {
3539  if (err) {
3540    console.error("listen fail");
3541    return;
3542  }
3543  console.log("listen success");
3544  let callback = (err: BusinessError) => {
3545    console.error("on error, err:" + JSON.stringify(err));
3546  }
3547  tcpServer.on('error', callback);
3548  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3549  tcpServer.off('error', callback);
3550  tcpServer.off('error');
3551})
3552```
3553
3554### close<sup>20+</sup>
3555
3556close(): Promise\<void\>
3557
3558TCPSocketServer停止监听并释放通过[listen](#listen10)方法绑定的端口。若多次调用[listen](#listen10)方法,再调用此方法时会释放TCPSocketServer的所有监听端口。使用Promise异步回调。
3559
3560> **说明:**
3561> 该方法不会关闭已有连接。如需关闭,请调用[TCPSocketConnection](#tcpsocketconnection10)的[close](#close10)方法。
3562
3563**需要权限**:ohos.permission.INTERNET
3564
3565**系统能力**:SystemCapability.Communication.NetStack
3566
3567**返回值:**
3568
3569| 类型            | 说明                                                       |
3570|  -------------- |  --------------------------------------------------------- |
3571| Promise\<void\> | Promise对象,无返回结果。 |
3572
3573**错误码:**
3574
3575以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3576
3577| 错误码ID | 错误信息                                    |
3578| -------- | ------------------------------------------- |
3579| 201      | Permission denied.                          |
3580| 2300002  | System internal error.                      |
3581
3582**示例:**
3583
3584```ts
3585import { socket } from '@kit.NetworkKit';
3586import { BusinessError } from '@kit.BasicServicesKit';
3587
3588let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3589let listenAddr: socket.NetAddress = {
3590  address: '192.168.xx.xxx',
3591  port: 8080,
3592  family: 1
3593}
3594tcpServer.on('connect', (connection: socket.TCPSocketConnection) => {
3595  console.info("connection clientId: " + connection.clientId);
3596  // 逻辑处理
3597  tcpServer.close(); // 停止监听
3598  connection.close(); // 关闭当前连接
3599});
3600tcpServer.listen(listenAddr).then(() => {
3601  console.info('listen success');
3602}).catch((err: BusinessError) => {
3603  console.error('listen fail: ' + err.code);
3604});
3605```
3606
3607## TCPSocketConnection<sup>10+</sup>
3608
3609TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。
3610
3611> **说明:**
3612> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。
3613
3614**系统能力**:SystemCapability.Communication.NetStack
3615
3616### 属性
3617
3618| 名称     | 类型   | 必填 | 说明                                      |
3619| -------- | ------ | ---- | ----------------------------------------- |
3620| clientId | number | 是   | 客户端与TCPSocketServer建立连接的id。 |
3621
3622### send<sup>10+</sup>
3623
3624send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
3625
3626通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。
3627
3628> **说明:**
3629> 与客户端建立连接后,才可调用此方法。
3630
3631**需要权限**:ohos.permission.INTERNET
3632
3633**系统能力**:SystemCapability.Communication.NetStack
3634
3635**参数:**
3636
3637| 参数名   | 类型                              | 必填 | 说明                                                         |
3638| -------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3639| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3640| callback | AsyncCallback\<void\>             | 是   | 回调函数。失败时返回错误码、错误信息。             |
3641
3642**错误码:**
3643
3644以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3645
3646| 错误码ID | 错误信息               |
3647| -------- | ---------------------- |
3648| 401      | Parameter error.       |
3649| 201      | Permission denied.     |
3650| 2300002  | System internal error. |
3651
3652**示例:**
3653
3654```ts
3655import { socket } from '@kit.NetworkKit';
3656
3657let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3658
3659tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3660  let tcpSendOption: socket.TCPSendOptions = {
3661    data: 'Hello, client!'
3662  }
3663  client.send(tcpSendOption, () => {
3664    console.log('send success');
3665  });
3666});
3667```
3668
3669### send<sup>10+</sup>
3670
3671send(options: TCPSendOptions): Promise\<void\>
3672
3673通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。
3674
3675> **说明:**
3676> 与客户端建立连接后,才可调用此方法。
3677
3678**需要权限**:ohos.permission.INTERNET
3679
3680**系统能力**:SystemCapability.Communication.NetStack
3681
3682**参数:**
3683
3684| 参数名  | 类型                              | 必填 | 说明                                                         |
3685| ------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3686| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3687
3688**返回值:**
3689
3690| 类型            | 说明                                                         |
3691|  -------------- |  ----------------------------------------------------------- |
3692| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
3693
3694**错误码:**
3695
3696以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3697
3698| 错误码ID | 错误信息               |
3699| -------- | ---------------------- |
3700| 401      | Parameter error.       |
3701| 201      | Permission denied.     |
3702| 2300002  | System internal error. |
3703
3704**示例:**
3705
3706```ts
3707import { socket } from '@kit.NetworkKit';
3708import { BusinessError } from '@kit.BasicServicesKit';
3709
3710let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3711
3712tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3713  let tcpSendOption: socket.TCPSendOptions = {
3714    data: 'Hello, client!'
3715  }
3716  client.send(tcpSendOption).then(() => {
3717    console.log('send success');
3718  }).catch((err: BusinessError) => {
3719    console.error('send fail');
3720  });
3721});
3722```
3723
3724### close<sup>10+</sup>
3725
3726close(callback: AsyncCallback\<void\>): void
3727
3728关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。
3729
3730**需要权限**:ohos.permission.INTERNET
3731
3732**系统能力**:SystemCapability.Communication.NetStack
3733
3734**参数:**
3735
3736| 参数名   | 类型                  | 必填 | 说明       |
3737| -------- | --------------------- | ---- | ---------- |
3738| callback | AsyncCallback\<void\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
3739
3740**错误码:**
3741
3742以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3743
3744| 错误码ID | 错误信息               |
3745| -------- | ---------------------- |
3746| 401      | Parameter error.       |
3747| 201      | Permission denied.     |
3748| 2300002  | System internal error. |
3749
3750**示例:**
3751
3752```ts
3753import { socket } from '@kit.NetworkKit';
3754import { BusinessError } from '@kit.BasicServicesKit';
3755
3756let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3757
3758tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3759  client.close((err: BusinessError) => {
3760    if (err) {
3761      console.error('close fail');
3762      return;
3763    }
3764    console.log('close success');
3765  });
3766});
3767```
3768
3769### close<sup>10+</sup>
3770
3771close(): Promise\<void\>
3772
3773关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。
3774
3775**需要权限**:ohos.permission.INTERNET
3776
3777**系统能力**:SystemCapability.Communication.NetStack
3778
3779**返回值:**
3780
3781| 类型            | 说明                                         |
3782|  -------------- |  ------------------------------------------- |
3783| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
3784
3785**错误码:**
3786
3787以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3788
3789| 错误码ID | 错误信息               |
3790| -------- | ---------------------- |
3791| 201      | Permission denied.     |
3792| 2300002  | System internal error. |
3793
3794**示例:**
3795
3796```ts
3797import { socket } from '@kit.NetworkKit';
3798import { BusinessError } from '@kit.BasicServicesKit';
3799
3800let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3801tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3802  client.close().then(() => {
3803  	console.log('close success');
3804  }).catch((err: BusinessError) => {
3805  	console.error('close fail');
3806  });
3807});
3808```
3809
3810### getRemoteAddress<sup>10+</sup>
3811
3812getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
3813
3814获取对端Socket地址。使用callback方式作为异步方法。
3815
3816> **说明:**
3817> 与客户端建立连接后,才可调用此方法。
3818
3819**需要权限**:ohos.permission.INTERNET
3820
3821**系统能力**:SystemCapability.Communication.NetStack
3822
3823**参数:**
3824
3825| 参数名   | 类型                                     | 必填 | 说明       |
3826| -------- | ---------------------------------------- | ---- | ---------- |
3827| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
3828
3829**错误码:**
3830
3831以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3832
3833| 错误码ID | 错误信息                        |
3834| -------- | ------------------------------- |
3835| 401      | Parameter error.                |
3836| 201      | Permission denied.              |
3837| 2300002  | System internal error.          |
3838| 2303188  | Socket operation on non-socket. |
3839
3840**示例:**
3841
3842```ts
3843import { socket } from '@kit.NetworkKit';
3844import { BusinessError } from '@kit.BasicServicesKit';
3845
3846let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3847tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3848  client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
3849    if (err) {
3850      console.error('getRemoteAddress fail');
3851      return;
3852    }
3853    console.log('getRemoteAddress success:' + JSON.stringify(data));
3854  });
3855});
3856```
3857
3858### getRemoteAddress<sup>10+</sup>
3859
3860getRemoteAddress(): Promise\<NetAddress\>
3861
3862获取对端Socket地址。使用Promise方式作为异步方法。
3863
3864> **说明:**
3865> 与客户端建立连接后,才可调用此方法。
3866
3867**需要权限**:ohos.permission.INTERNET
3868
3869**系统能力**:SystemCapability.Communication.NetStack
3870
3871**返回值:**
3872
3873| 类型                               | 说明                                        |
3874|  --------------------------------- |  ------------------------------------------ |
3875| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 |
3876
3877**错误码:**
3878
3879以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
3880
3881| 错误码ID | 错误信息                        |
3882| -------- | ------------------------------- |
3883| 201      | Permission denied.              |
3884| 2300002  | System internal error.          |
3885| 2303188  | Socket operation on non-socket. |
3886
3887**示例:**
3888
3889```ts
3890import { socket } from '@kit.NetworkKit';
3891import { BusinessError } from '@kit.BasicServicesKit';
3892
3893let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3894tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3895  client.getRemoteAddress().then(() => {
3896    console.log('getRemoteAddress success');
3897  }).catch((err: BusinessError) => {
3898    console.error('getRemoteAddress fail');
3899  });
3900});
3901```
3902
3903### getLocalAddress<sup>12+</sup>
3904
3905getLocalAddress(): Promise\<NetAddress\>
3906
3907获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。
3908
3909**系统能力**:SystemCapability.Communication.NetStack
3910
3911**返回值:**
3912
3913| 类型            | 说明                                                 |
3914|  -------------- |  --------------------------------------------------- |
3915| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
3916
3917**错误码:**
3918
3919以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
3920
3921| 错误码ID | 错误信息                                    |
3922| -------- | ------------------------------------------- |
3923| 2300002  | System internal error.                      |
3924| 2301009  | Bad file descriptor.                            |
3925| 2303188  | Socket operation on non-socket. |
3926
3927**示例:**
3928
3929```ts
3930import { socket } from '@kit.NetworkKit';
3931import { BusinessError } from '@kit.BasicServicesKit';
3932
3933let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3934let listenAddr: socket.NetAddress = {
3935  address: "192.168.xx.xx",
3936  port: 8080,
3937  family: 1
3938}
3939tcpServer.listen(listenAddr, (err: BusinessError) => {
3940  let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
3941  let netAddress: socket.NetAddress = {
3942    address: "192.168.xx.xx",
3943    port: 8080
3944  }
3945  let options: socket.TCPConnectOptions = {
3946    address: netAddress,
3947    timeout: 6000
3948  }
3949  tcp.connect(options, (err: BusinessError) => {
3950    if (err) {
3951      console.error('connect fail');
3952      return;
3953    }
3954    console.info('connect success!');
3955  })
3956  tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3957    client.getLocalAddress().then((localAddress: socket.NetAddress) => {
3958      console.info("Family IP Port: " + JSON.stringify(localAddress));
3959    }).catch((err: BusinessError) => {
3960      console.error('Error:' + JSON.stringify(err));
3961    });
3962  })
3963})
3964```
3965
3966### on('message')<sup>10+</sup>
3967
3968on(type: 'message', callback: Callback<SocketMessageInfo\>): void
3969
3970订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
3971
3972**系统能力**:SystemCapability.Communication.NetStack
3973
3974**参数:**
3975
3976| 参数名   | 类型                                                         | 必填 | 说明                                      |
3977| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
3978| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
3979| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。失败时返回错误码、错误信息。         |
3980
3981**错误码:**
3982
3983以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
3984
3985| 错误码ID | 错误信息         |
3986| -------- | ---------------- |
3987| 401      | Parameter error. |
3988
3989**示例:**
3990
3991```ts
3992import { socket } from '@kit.NetworkKit';
3993import { BusinessError } from '@kit.BasicServicesKit';
3994
3995let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3996
3997tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3998  client.on('message', (value: socket.SocketMessageInfo) => {
3999    let messageView = '';
4000    for (let i: number = 0; i < value.message.byteLength; i++) {
4001      let uint8Array = new Uint8Array(value.message)
4002      let messages = uint8Array[i]
4003      let message = String.fromCharCode(messages);
4004      messageView += message;
4005    }
4006    console.log('on message message: ' + JSON.stringify(messageView));
4007    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
4008  });
4009});
4010```
4011
4012### off('message')<sup>10+</sup>
4013
4014off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
4015
4016取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
4017
4018**系统能力**:SystemCapability.Communication.NetStack
4019
4020**参数:**
4021
4022| 参数名   | 类型                                                         | 必填 | 说明                                      |
4023| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
4024| type     | string                                                       | 是   | 取消订阅的事件类型。'message':接收消息事件。 |
4025| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。        |
4026
4027**错误码:**
4028
4029以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4030
4031| 错误码ID | 错误信息         |
4032| -------- | ---------------- |
4033| 401      | Parameter error. |
4034
4035**示例:**
4036
4037```ts
4038import { socket } from '@kit.NetworkKit';
4039import { BusinessError } from '@kit.BasicServicesKit';
4040
4041let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
4042let callback = (value: socket.SocketMessageInfo) => {
4043  let messageView = '';
4044  for (let i: number = 0; i < value.message.byteLength; i++) {
4045    let uint8Array = new Uint8Array(value.message)
4046    let messages = uint8Array[i]
4047    let message = String.fromCharCode(messages);
4048    messageView += message;
4049  }
4050  console.log('on message message: ' + JSON.stringify(messageView));
4051  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
4052}
4053tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
4054  client.on('message', callback);
4055  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4056  client.off('message', callback);
4057  client.off('message');
4058});
4059```
4060
4061### on('close')<sup>10+</sup>
4062
4063on(type: 'close', callback: Callback\<void\>): void
4064
4065订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
4066
4067**系统能力**:SystemCapability.Communication.NetStack
4068
4069**参数:**
4070
4071| 参数名   | 类型             | 必填 | 说明                                |
4072| -------- | ---------------- | ---- | ----------------------------------- |
4073| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
4074| callback | Callback\<void\> | 是   | 回调函数。失败时返回错误码、错误信息。        |
4075
4076**错误码:**
4077
4078以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4079
4080| 错误码ID | 错误信息         |
4081| -------- | ---------------- |
4082| 401      | Parameter error. |
4083
4084**示例:**
4085
4086```ts
4087import { socket } from '@kit.NetworkKit';
4088import { BusinessError } from '@kit.BasicServicesKit';
4089
4090let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
4091tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
4092  client.on('close', () => {
4093    console.log("on close success")
4094  });
4095});
4096```
4097
4098### off('close')<sup>10+</sup>
4099
4100off(type: 'close', callback?: Callback\<void\>): void
4101
4102取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
4103
4104**系统能力**:SystemCapability.Communication.NetStack
4105
4106**参数:**
4107
4108| 参数名   | 类型             | 必填 | 说明                                |
4109| -------- | ---------------- | ---- | ----------------------------------- |
4110| type     | string           | 是   | 取消订阅的事件类型。'close':关闭事件。 |
4111| callback | Callback\<void\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。    |
4112
4113**错误码:**
4114
4115以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4116
4117| 错误码ID | 错误信息         |
4118| -------- | ---------------- |
4119| 401      | Parameter error. |
4120
4121**示例:**
4122
4123```ts
4124import { socket } from '@kit.NetworkKit';
4125
4126let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
4127let callback = () => {
4128  console.log("on close success");
4129}
4130tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
4131  client.on('close', callback);
4132  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4133  client.off('close', callback);
4134  client.off('close');
4135});
4136```
4137
4138### on('error')<sup>10+</sup>
4139
4140on(type: 'error', callback: ErrorCallback): void
4141
4142订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
4143
4144**系统能力**:SystemCapability.Communication.NetStack
4145
4146**参数:**
4147
4148| 参数名   | 类型          | 必填 | 说明                                 |
4149| -------- | ------------- | ---- | ------------------------------------ |
4150| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
4151| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。    |
4152
4153**错误码:**
4154
4155以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4156
4157| 错误码ID | 错误信息         |
4158| -------- | ---------------- |
4159| 401      | Parameter error. |
4160
4161**示例:**
4162
4163```ts
4164import { socket } from '@kit.NetworkKit';
4165import { BusinessError } from '@kit.BasicServicesKit';
4166
4167let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
4168tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
4169  client.on('error', (err: BusinessError) => {
4170    console.error("on error, err:" + JSON.stringify(err))
4171  });
4172});
4173```
4174
4175### off('error')<sup>10+</sup>
4176
4177off(type: 'error', callback?: ErrorCallback): void
4178
4179取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
4180
4181**系统能力**:SystemCapability.Communication.NetStack
4182
4183**参数:**
4184
4185| 参数名   | 类型          | 必填 | 说明                                 |
4186| -------- | ------------- | ---- | ------------------------------------ |
4187| type     | string        | 是   | 取消订阅的事件类型。'error':error事件。 |
4188| callback | ErrorCallback | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。  |
4189
4190**错误码:**
4191
4192以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4193
4194| 错误码ID | 错误信息         |
4195| -------- | ---------------- |
4196| 401      | Parameter error. |
4197
4198**示例:**
4199
4200```ts
4201import { socket } from '@kit.NetworkKit';
4202import { BusinessError } from '@kit.BasicServicesKit';
4203
4204let callback = (err: BusinessError) => {
4205  console.error("on error, err:" + JSON.stringify(err));
4206}
4207let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
4208tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
4209  client.on('error', callback);
4210  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4211  client.off('error', callback);
4212  client.off('error');
4213});
4214```
4215
4216## TCP 错误码说明
4217
4218TCP 其余错误码映射形式为:2301000 + Linux内核错误码。
4219
4220错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)。
4221
4222## socket.constructLocalSocketInstance<sup>11+</sup>
4223
4224constructLocalSocketInstance(): LocalSocket
4225
4226创建一个LocalSocket对象。
4227
4228**系统能力**:SystemCapability.Communication.NetStack
4229
4230**返回值:**
4231
4232| 类型                               | 说明                    |
4233| :--------------------------------- | :---------------------- |
4234| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 |
4235
4236**示例:**
4237
4238```ts
4239import { socket } from '@kit.NetworkKit';
4240let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4241```
4242
4243## LocalSocket<sup>11+</sup>
4244
4245LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。
4246
4247### bind<sup>11+</sup>
4248
4249bind(address: LocalAddress): Promise\<void\>;
4250
4251绑定本地套接字文件的路径。使用promise方法作为异步方法。
4252
4253> **说明:**
4254> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。
4255> bind方法在本地套接字通信中非必须。
4256
4257**系统能力**:SystemCapability.Communication.NetStack
4258
4259**参数:**
4260
4261| 参数名   | 类型                               | 必填 | 说明                                                   |
4262| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
4263| address  | [LocalAddress](#localaddress11) | 是   | 目标地址信息,参考[LocalAddress](#localaddress11)。 |
4264
4265**返回值:**
4266
4267| 类型            | 说明                                       |
4268| :-------------- | :---------------------------------------- |
4269| Promise\<void\> | Promise对象。无返回结果的Promise对象。|
4270
4271**错误码:**
4272
4273以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
4274
4275| 错误码ID | 错误信息                    |
4276| ------- | -------------------------- |
4277| 401     | Parameter error.           |
4278| 2301013 | Insufficient permissions.  |
4279| 2301022 | Invalid argument.          |
4280| 2301098 | Address already in use.    |
4281
4282**示例:**
4283
4284>**说明:**
4285>
4286>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4287
4288<!--code_no_check-->
4289```ts
4290import { socket } from '@kit.NetworkKit';
4291import { common } from '@kit.AbilityKit';
4292
4293let client: socket.LocalSocket = socket.constructLocalSocketInstance()
4294let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4295let sandboxPath: string = context.filesDir + '/testSocket';
4296let address : socket.LocalAddress = {
4297  address: sandboxPath
4298}
4299client.bind(address).then(() => {
4300  console.log('bind success')
4301}).catch((err: Object) => {
4302  console.error('failed to bind: ' + JSON.stringify(err))
4303})
4304```
4305
4306### connect<sup>11+</sup>
4307
4308connect(options: LocalConnectOptions): Promise\<void\>
4309
4310连接到指定的套接字文件。使用promise方法作为异步方法。
4311
4312> **说明:**
4313> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。
4314
4315**系统能力**:SystemCapability.Communication.NetStack
4316
4317**参数:**
4318
4319| 参数名  | 类型                                     | 必填 | 说明                                                         |
4320| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
4321| options | [LocalConnectOptions](#localconnectoptions11) | 是   | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 |
4322
4323**返回值:**
4324
4325| 类型            | 说明                                       |
4326| :-------------- | :---------------------------------------- |
4327| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 |
4328
4329**错误码:**
4330
4331以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
4332
4333| 错误码ID | 错误信息                 |
4334| ------- | ----------------------- |
4335| 401     | Parameter error.                 |
4336| 2301013     | Insufficient permissions.        |
4337| 2301022     | Invalid argument.                |
4338| 2301111     | Connection refused.              |
4339| 2301099     | Cannot assign requested address. |
4340
4341**示例:**
4342
4343>**说明:**
4344>
4345>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4346
4347<!--code_no_check-->
4348```ts
4349import { socket } from '@kit.NetworkKit';
4350import { common } from '@kit.AbilityKit';
4351
4352let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4353let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4354let sandboxPath: string = context.filesDir + '/testSocket';
4355let localAddress : socket.LocalAddress = {
4356  address: sandboxPath
4357}
4358let connectOpt: socket.LocalConnectOptions = {
4359  address: localAddress,
4360  timeout: 6000
4361}
4362client.connect(connectOpt).then(() => {
4363  console.log('connect success')
4364}).catch((err: Object) => {
4365  console.error('connect fail: ' + JSON.stringify(err));
4366});
4367```
4368
4369### send<sup>11+</sup>
4370
4371send(options: LocalSendOptions): Promise\<void\>
4372
4373通过LocalSocket连接发送数据。使用Promise方式作为异步方法。
4374
4375> **说明:**
4376> connect方法调用成功后,才可调用此方法。
4377
4378**系统能力**:SystemCapability.Communication.NetStack
4379
4380**参数:**
4381
4382| 参数名  | 类型                                    | 必填 | 说明                                                         |
4383| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
4384| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 |
4385
4386**返回值:**
4387
4388| 类型            | 说明                                         |
4389| :-------------- | :------------------------------------------ |
4390| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
4391
4392**错误码:**
4393
4394以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
4395
4396| 错误码ID | 错误信息                 |
4397| ------- | ----------------------- |
4398| 401     | Parameter error.        |
4399| 2301011 | Operation would block.  |
4400
4401**示例:**
4402
4403>**说明:**
4404>
4405>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4406
4407<!--code_no_check-->
4408```ts
4409import { socket } from '@kit.NetworkKit';
4410import { common } from '@kit.AbilityKit';
4411
4412let client: socket.LocalSocket = socket.constructLocalSocketInstance()
4413let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4414let sandboxPath: string = context.filesDir + '/testSocket';
4415let localAddress : socket.LocalAddress = {
4416  address: sandboxPath
4417}
4418let connectOpt: socket.LocalConnectOptions = {
4419  address: localAddress,
4420  timeout: 6000
4421}
4422client.connect(connectOpt).then(() => {
4423  console.log('connect success')
4424}).catch((err: Object) => {
4425  console.error('connect failed: ' + JSON.stringify(err))
4426})
4427let sendOpt: socket.LocalSendOptions = {
4428  data: 'Hello world!'
4429}
4430client.send(sendOpt).then(() => {
4431  console.log('send success')
4432}).catch((err: Object) => {
4433  console.error('send fail: ' + JSON.stringify(err))
4434})
4435```
4436
4437### close<sup>11+</sup>
4438
4439close(): Promise\<void\>
4440
4441关闭LocalSocket连接。使用Promise方式作为异步方法。
4442
4443**系统能力**:SystemCapability.Communication.NetStack
4444
4445**返回值:**
4446
4447| 类型            | 说明                                       |
4448| :-------------- | :----------------------------------------- |
4449| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
4450
4451**错误码:**
4452
4453以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
4454
4455| 错误码ID | 错误信息                 |
4456| ------- | ----------------------- |
4457| 2301009 | Bad file descriptor.    |
4458
4459**示例:**
4460
4461```ts
4462import { socket } from '@kit.NetworkKit';
4463
4464let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4465
4466client.close().then(() => {
4467  console.log('close success');
4468}).catch((err: Object) => {
4469  console.error('close fail: ' + JSON.stringify(err));
4470});
4471```
4472
4473### getState<sup>11+</sup>
4474
4475getState(): Promise\<SocketStateBase\>
4476
4477获取LocalSocket状态。使用Promise方式作为异步方法。
4478
4479> **说明:**
4480> bind或connect方法调用成功后,才可调用此方法。
4481
4482**系统能力**:SystemCapability.Communication.NetStack
4483
4484**返回值:**
4485
4486| 类型                                          | 说明                                     |
4487| :------------------------------------------- | :--------------------------------------- |
4488| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 |
4489
4490**示例:**
4491
4492>**说明:**
4493>
4494>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4495
4496<!--code_no_check-->
4497```ts
4498import { socket } from '@kit.NetworkKit';
4499import { common } from '@kit.AbilityKit';
4500
4501let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4502let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4503let sandboxPath: string = context.filesDir + '/testSocket';
4504let localAddress : socket.LocalAddress = {
4505  address: sandboxPath
4506}
4507let connectOpt: socket.LocalConnectOptions = {
4508  address: localAddress,
4509  timeout: 6000
4510}
4511client.connect(connectOpt).then(() => {
4512  console.log('connect success');
4513  client.getState().then(() => {
4514    console.log('getState success');
4515  }).catch((err: Object) => {
4516    console.error('getState fail: ' + JSON.stringify(err))
4517  });
4518}).catch((err: Object) => {
4519  console.error('connect fail: ' + JSON.stringify(err));
4520});
4521```
4522
4523### getSocketFd<sup>11+</sup>
4524
4525getSocketFd(): Promise\<number\>
4526
4527获取LocalSocket的文件描述符。使用Promise方式作为异步方法。
4528
4529> **说明:**
4530> bind或connect方法调用成功后,才可调用此方法。
4531> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。
4532
4533**系统能力**:SystemCapability.Communication.NetStack
4534
4535**返回值:**
4536
4537| 类型               | 说明                              |
4538| :---------------- | :-------------------------------- |
4539| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
4540
4541**示例:**
4542
4543>**说明:**
4544>
4545>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4546
4547<!--code_no_check-->
4548```ts
4549import { socket } from '@kit.NetworkKit';
4550import { common } from '@kit.AbilityKit';
4551
4552let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4553let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4554let sandboxPath: string = context.filesDir + '/testSocket';
4555let localAddress : socket.LocalAddress = {
4556  address: sandboxPath
4557}
4558let connectOpt: socket.LocalConnectOptions = {
4559  address: localAddress,
4560  timeout: 6000
4561}
4562client.connect(connectOpt).then(() => {
4563  console.log('connect ok')
4564}).catch((err: Object) => {
4565  console.error('connect fail: ' + JSON.stringify(err))
4566})
4567client.getSocketFd().then((data: number) => {
4568  console.info("fd: " + data);
4569}).catch((err: Object) => {
4570  console.error("getSocketFd faile: " + JSON.stringify(err));
4571})
4572```
4573
4574### setExtraOptions<sup>11+</sup>
4575
4576setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
4577
4578设置LocalSocket的套接字属性。使用Promise方式作为异步方法。
4579
4580> **说明:**
4581> bind或connect方法调用成功后,才可调用此方法。
4582
4583**系统能力**:SystemCapability.Communication.NetStack
4584
4585**参数:**
4586
4587| 参数名  | 类型                                      | 必填 | 说明                                                         |
4588| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
4589| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 |
4590
4591**返回值:**
4592
4593| 类型            | 说明                                           |
4594| :-------------- | :-------------------------------------------- |
4595| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 |
4596
4597**错误码:**
4598
4599以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
4600
4601| 错误码ID | 错误信息                 |
4602| ------- | ----------------------- |
4603| 401     | Parameter error.        |
4604| 2301009 | Bad file descriptor.    |
4605
4606**示例:**
4607
4608>**说明:**
4609>
4610>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4611
4612<!--code_no_check-->
4613```ts
4614import { socket } from '@kit.NetworkKit';
4615import { common } from '@kit.AbilityKit';
4616
4617let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4618let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4619let sandboxPath: string = context.filesDir + '/testSocket';
4620let localAddress : socket.LocalAddress = {
4621  address: sandboxPath
4622}
4623let connectOpt: socket.LocalConnectOptions = {
4624  address: localAddress,
4625  timeout: 6000
4626}
4627client.connect(connectOpt).then(() => {
4628  console.log('connect success');
4629  let options: socket.ExtraOptionsBase = {
4630    receiveBufferSize: 8192,
4631    sendBufferSize: 8192,
4632    socketTimeout: 3000
4633  }
4634  client.setExtraOptions(options).then(() => {
4635    console.log('setExtraOptions success');
4636  }).catch((err: Object) => {
4637    console.error('setExtraOptions fail: ' + JSON.stringify(err));
4638  });
4639}).catch((err: Object) => {
4640  console.error('connect fail: ' + JSON.stringify(err));
4641});
4642```
4643
4644### getExtraOptions<sup>11+</sup>
4645
4646getExtraOptions(): Promise\<ExtraOptionsBase\>;
4647
4648获取LocalSocket的套接字属性。使用Promise方式作为异步方法。
4649
4650> **说明:**
4651> bind或connect方法调用成功后,才可调用此方法。
4652
4653**系统能力**:SystemCapability.Communication.NetStack
4654
4655**返回值:**
4656
4657| 类型                         | 说明                                      |
4658| :-------------------------- | :---------------------------------------- |
4659| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 |
4660
4661**错误码:**
4662
4663以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
4664
4665| 错误码ID | 错误信息                 |
4666| ------- | ----------------------- |
4667| 2301009 | Bad file descriptor.    |
4668
4669**示例:**
4670
4671>**说明:**
4672>
4673>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4674
4675<!--code_no_check-->
4676```ts
4677import { socket } from '@kit.NetworkKit';
4678import { common } from '@kit.AbilityKit';
4679
4680let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4681let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4682let sandboxPath: string = context.filesDir + '/testSocket';
4683let localAddress : socket.LocalAddress = {
4684  address: sandboxPath
4685}
4686let connectOpt: socket.LocalConnectOptions = {
4687  address: localAddress,
4688  timeout: 6000
4689}
4690client.connect(connectOpt).then(() => {
4691  console.log('connect success');
4692  client.getExtraOptions().then((options : socket.ExtraOptionsBase) => {
4693    console.log('options: ' + JSON.stringify(options));
4694  }).catch((err: Object) => {
4695    console.error('setExtraOptions fail: ' + JSON.stringify(err));
4696  });
4697}).catch((err: Object) => {
4698  console.error('connect fail: ' + JSON.stringify(err));
4699});
4700```
4701
4702### getLocalAddress<sup>12+</sup>
4703
4704getLocalAddress(): Promise\<string\>
4705
4706获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。
4707
4708> **说明:**
4709> bind方法调用成功后,才可调用此方法。
4710
4711**系统能力**:SystemCapability.Communication.NetStack
4712
4713**返回值:**
4714
4715| 类型            | 说明                                                 |
4716|  -------------- |  --------------------------------------------------- |
4717| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
4718
4719**错误码:**
4720
4721以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
4722
4723| 错误码ID | 错误信息                                    |
4724| -------- | ------------------------------------------- |
4725| 2300002  | System internal error.                      |
4726| 2301009  | Bad file descriptor.                            |
4727| 2303188  | Socket operation on non-socket. |
4728
4729**示例:**
4730
4731>**说明:**
4732>
4733>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
4734
4735<!--code_no_check-->
4736```ts
4737import { common } from '@kit.AbilityKit';
4738import { socket } from '@kit.NetworkKit';
4739import { BusinessError } from '@kit.BasicServicesKit';
4740
4741let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4742let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4743let sandboxPath: string = context.filesDir + '/testSocket';
4744let address : socket.LocalAddress = {
4745  address: sandboxPath
4746}
4747client.bind(address).then(() => {
4748  console.error('bind success');
4749  client.getLocalAddress().then((localPath: string) => {
4750    console.info("SUCCESS " + JSON.stringify(localPath));
4751  }).catch((err: BusinessError) => {
4752    console.error("FAIL " + JSON.stringify(err));
4753  })
4754}).catch((err: Object) => {
4755  console.error('failed to bind: ' + JSON.stringify(err));
4756})
4757```
4758
4759### on('message')<sup>11+</sup>
4760
4761on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void
4762
4763订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4764
4765**系统能力**:SystemCapability.Communication.NetStack
4766
4767**参数:**
4768
4769| 参数名   | 类型                                              | 必填 | 说明                                      |
4770| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
4771| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。 |
4772| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收的消息。|
4773
4774**错误码:**
4775
4776以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4777
4778| 错误码ID | 错误信息                 |
4779| ------- | ----------------------- |
4780| 401     | Parameter error.        |
4781
4782**示例:**
4783
4784```ts
4785import { socket } from '@kit.NetworkKit';
4786
4787let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4788client.on('message', (value: socket.LocalSocketMessageInfo) => {
4789  const uintArray = new Uint8Array(value.message)
4790  let messageView = '';
4791  for (let i = 0; i < uintArray.length; i++) {
4792    messageView += String.fromCharCode(uintArray[i]);
4793  }
4794  console.log('total: ' + JSON.stringify(value));
4795  console.log('message infomation: ' + messageView);
4796});
4797```
4798
4799### off('message')<sup>11+</sup>
4800
4801off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
4802
4803取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4804
4805**系统能力**:SystemCapability.Communication.NetStack
4806
4807**参数:**
4808
4809| 参数名   | 类型                                               | 必填 | 说明                                 |
4810| -------- | ------------------------------------------------ | ---- | ----------------------------------- |
4811| type     | string                                           | 是   | 取消订阅的事件类型。'message':接收消息事件。 |
4812| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。|
4813
4814**错误码:**
4815
4816以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4817
4818| 错误码ID | 错误信息                 |
4819| ------- | ----------------------- |
4820| 401     | Parameter error.        |
4821
4822**示例:**
4823
4824```ts
4825import { socket } from '@kit.NetworkKit';
4826
4827let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4828let messageView = '';
4829let callback = (value: socket.LocalSocketMessageInfo) => {
4830  const uintArray = new Uint8Array(value.message)
4831  let messageView = '';
4832  for (let i = 0; i < uintArray.length; i++) {
4833    messageView += String.fromCharCode(uintArray[i]);
4834  }
4835  console.log('total: ' + JSON.stringify(value));
4836  console.log('message infomation: ' + messageView);
4837}
4838client.on('message', callback);
4839client.off('message');
4840```
4841
4842### on('connect')<sup>11+</sup>
4843
4844on(type: 'connect', callback: Callback\<void\>): void
4845
4846订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4847
4848**系统能力**:SystemCapability.Communication.NetStack
4849
4850**参数:**
4851
4852| 参数名   | 类型             | 必填 | 说明                                                         |
4853| -------- | ---------------- | ---- | --------------------------------------------------------- |
4854| type     | string           | 是   | 订阅的事件类型。                                             |
4855| callback | Callback\<void\> | 是   | 以callback的形式异步返回与服务端连接的结果。                     |
4856
4857**错误码:**
4858
4859以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4860
4861| 错误码ID | 错误信息                 |
4862| ------- | ----------------------- |
4863| 401     | Parameter error.        |
4864
4865**示例:**
4866
4867```ts
4868import { socket } from '@kit.NetworkKit';
4869
4870let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4871client.on('connect', () => {
4872  console.log("on connect success")
4873});
4874```
4875
4876### off('connect')<sup>11+</sup>
4877
4878off(type: 'connect', callback?: Callback\<void\>): void
4879
4880取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4881
4882**系统能力**:SystemCapability.Communication.NetStack
4883
4884**参数:**
4885
4886| 参数名   | 类型             | 必填 | 说明                                                         |
4887| -------- | ---------------- | ---- | --------------------------------------------------------- |
4888| type     | string           | 是   | 取消订阅的事件类型。'connect':LocalSocket的connect事件。        |
4889| callback | Callback\<void\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。                           |
4890
4891**错误码:**
4892
4893以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4894
4895| 错误码ID | 错误信息                 |
4896| ------- | ----------------------- |
4897| 401     | Parameter error.        |
4898
4899**示例:**
4900
4901```ts
4902import { socket } from '@kit.NetworkKit';
4903
4904let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4905let callback = () => {
4906  console.log("on connect success");
4907}
4908client.on('connect', callback);
4909// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4910client.off('connect', callback);
4911client.off('connect');
4912```
4913
4914### on('close')<sup>11+</sup>
4915
4916on(type: 'close', callback: Callback\<void\>): void
4917
4918订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4919
4920**系统能力**:SystemCapability.Communication.NetStack
4921
4922**参数:**
4923
4924| 参数名   | 类型             | 必填 | 说明                        |
4925| -------- | ---------------- | ---- | ------------------------ |
4926| type     | string           | 是   | 订阅LocalSocket的关闭事件。 |
4927| callback | Callback\<void\> | 是   | 以callback的形式异步返回关闭localsocket的结果。|
4928
4929**错误码:**
4930
4931以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4932
4933| 错误码ID | 错误信息                 |
4934| ------- | ----------------------- |
4935| 401     | Parameter error.        |
4936
4937**示例:**
4938
4939```ts
4940import { socket } from '@kit.NetworkKit';
4941
4942let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4943let callback = () => {
4944  console.log("on close success");
4945}
4946client.on('close', callback);
4947```
4948
4949### off('close')<sup>11+</sup>
4950
4951off(type: 'close', callback?: Callback\<void\>): void
4952
4953订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4954
4955**系统能力**:SystemCapability.Communication.NetStack
4956
4957**参数:**
4958
4959| 参数名   | 类型             | 必填 | 说明                        |
4960| -------- | ---------------- | ---- | ------------------------ |
4961| type     | string           | 是   | 取消订阅的事件类型。'close':LocalSocket的关闭事件。 |
4962| callback | Callback\<void\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。|
4963
4964**错误码:**
4965
4966以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
4967
4968| 错误码ID | 错误信息                 |
4969| ------- | ----------------------- |
4970| 401     | Parameter error.        |
4971
4972**示例:**
4973
4974```ts
4975import { socket } from '@kit.NetworkKit';
4976
4977let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4978let callback = () => {
4979  console.log("on close success");
4980}
4981client.on('close', callback);
4982// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4983client.off('close', callback);
4984client.off('close');
4985```
4986
4987### on('error')<sup>11+</sup>
4988
4989on(type: 'error', callback: ErrorCallback): void
4990
4991订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
4992
4993**系统能力**:SystemCapability.Communication.NetStack
4994
4995**参数:**
4996
4997| 参数名   | 类型          | 必填 | 说明                            |
4998| -------- | ------------- | ---- | ---------------------------- |
4999| type     | string        | 是   | 订阅LocalSocket的error事件。   |
5000| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
5001
5002**错误码:**
5003
5004以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5005
5006| 错误码ID | 错误信息                 |
5007| ------- | ----------------------- |
5008| 401     | Parameter error.        |
5009
5010**示例:**
5011
5012```ts
5013import { socket } from '@kit.NetworkKit';
5014
5015let client: socket.LocalSocket = socket.constructLocalSocketInstance();
5016client.on('error', (err: Object) => {
5017  console.error("on error, err:" + JSON.stringify(err))
5018});
5019```
5020
5021### off('error')<sup>11+</sup>
5022
5023off(type: 'error', callback?: ErrorCallback): void
5024
5025取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
5026
5027**系统能力**:SystemCapability.Communication.NetStack
5028
5029**参数:**
5030
5031| 参数名   | 类型          | 必填 | 说明                             |
5032| -------- | ------------- | ---- | ----------------------------- |
5033| type     | string        | 是   | 取消订阅的事件类型。'error':LocalSocket的error事件。 |
5034| callback | ErrorCallback | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。|
5035
5036**错误码:**
5037
5038以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5039
5040| 错误码ID | 错误信息                 |
5041| ------- | ----------------------- |
5042| 401     | Parameter error.        |
5043
5044**示例:**
5045
5046```ts
5047import { socket } from '@kit.NetworkKit';
5048
5049let client: socket.LocalSocket = socket.constructLocalSocketInstance();
5050let callback = (err: Object) => {
5051  console.error("on error, err:" + JSON.stringify(err));
5052}
5053client.on('error', callback);
5054// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5055client.off('error', callback);
5056client.off('error');
5057```
5058
5059## LocalSocketMessageInfo<sup>11+</sup>
5060
5061LocalSocket客户端与服务端通信时接收的数据。
5062
5063**系统能力**:SystemCapability.Communication.NetStack
5064
5065| 名称     | 类型            | 必填 | 说明               |
5066| ------- | --------------- | --- | ------------------ |
5067| message | ArrayBuffer     | 是   | 收到的消息数据。     |
5068| address | string          | 是   | 使用的本地套接字路径。|
5069| size    | number          | 是   | 数据长度。          |
5070
5071## LocalAddress<sup>11+</sup>
5072
5073LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。
5074
5075**系统能力**:SystemCapability.Communication.NetStack
5076
5077| 名称     | 类型       | 必填 | 说明               |
5078| ------- | ---------- | --- | ------------------ |
5079| address | string     | 是   | 本地套接字路径。     |
5080
5081## LocalConnectOptions<sup>11+</sup>
5082
5083LocalSocket客户端在连接服务端时传入的参数信息。
5084
5085**系统能力**:SystemCapability.Communication.NetStack
5086
5087| 名称     | 类型       | 必填 | 说明                            |
5088| ------- | ---------- | --- | ------------------------------ |
5089| address | [LocalAddress](#localaddress11)    | 是   | 指定的本地套接字路径。            |
5090| timeout | number     | 否   | 连接服务端的超时时间,单位为毫秒。默认值为0。需要应用手动设置一下,建议设置为5000。  |
5091
5092## LocalSendOptions<sup>11+</sup>
5093
5094LocalSocket发送请求的参数。
5095
5096**系统能力**:SystemCapability.Communication.NetStack
5097
5098| 名称     | 类型       | 必填 | 说明                 |
5099| ------- | ---------- | --- | ------------------- |
5100| data    | string \| ArrayBuffer | 是   | 需要发送的数据。 |
5101| encoding | string   | 否   | 字符编码。  |
5102
5103## ExtraOptionsBase<sup>7+</sup>
5104
5105Socket套接字的基础属性。
5106
5107**系统能力**:SystemCapability.Communication.NetStack
5108
5109| 名称            | 类型    | 必填 | 说明                              |
5110| ----------------- | ------- | ---- | ----------------------------- |
5111| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte),取值范围0~262144,不设置或设置的值超过取值范围则会默认为8192。     |
5112| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte),取值范围0~262144,不设置或设置的值超过取值范围则会默认为8192。     |
5113| reuseAddress      | boolean | 否   | 是否重用地址。true:重用地址;false:不重用地址。                   |
5114| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。    |
5115
5116## socket.constructLocalSocketServerInstance<sup>11+</sup>
5117
5118constructLocalSocketServerInstance(): LocalSocketServer
5119
5120创建一个LocalSocketServer对象。
5121
5122**系统能力**:SystemCapability.Communication.NetStack
5123
5124**返回值:**
5125
5126| 类型                                | 说明                          |
5127| :---------------------------------- | :---------------------------- |
5128| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 |
5129
5130**示例:**
5131
5132```ts
5133import { socket } from '@kit.NetworkKit';
5134let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5135```
5136
5137## LocalSocketServer<sup>11+</sup>
5138
5139LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。
5140
5141### listen<sup>11+</sup>
5142
5143listen(address: LocalAddress): Promise\<void\>
5144
5145绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
5146
5147> **说明:**
5148> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。
5149
5150**系统能力**:SystemCapability.Communication.NetStack
5151
5152**参数:**
5153
5154| 参数名  | 类型                      | 必填 | 说明                                          |
5155| ------- | ------------------------- | ---- | --------------------------------------------- |
5156| address | [LocalAddress](#localaddress11) | 是   | 目标地址信息。 |
5157
5158**返回值:**
5159
5160| 类型            | 说明                                                   |
5161| :-------------- | :---------------------------------------------------- |
5162| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。|
5163
5164**错误码:**
5165
5166以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
5167
5168| 错误码ID | 错误信息                      |
5169| -------- | --------------------------- |
5170| 401      | Parameter error.            |
5171| 2303109  | Bad file number.            |
5172| 2301013  | Insufficient permissions.   |
5173| 2301022  | Invalid argument.           |
5174| 2301098  | Address already in use.     |
5175
5176**示例:**
5177
5178>**说明:**
5179>
5180>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5181
5182<!--code_no_check-->
5183```ts
5184import { socket } from '@kit.NetworkKit';
5185import { common } from '@kit.AbilityKit';
5186
5187let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5188let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5189let sandboxPath: string = context.filesDir + '/testSocket';
5190let addr: socket.LocalAddress = {
5191  address: sandboxPath
5192}
5193server.listen(addr).then(() => {
5194  console.log('listen success');
5195}).catch((err: Object) => {
5196  console.error('listen fail: ' + JSON.stringify(err));
5197});
5198```
5199
5200### getState<sup>11+</sup>
5201
5202getState(): Promise\<SocketStateBase\>
5203
5204获取LocalSocketServer状态。使用Promise方式作为异步方法。
5205
5206> **说明:**
5207> listen方法调用成功后,才可调用此方法。
5208
5209**系统能力**:SystemCapability.Communication.NetStack
5210
5211**返回值:**
5212
5213| 类型                                         | 说明                                            |
5214| :------------------------------------------- | :--------------------------------------------- |
5215| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 |
5216
5217**示例:**
5218
5219>**说明:**
5220>
5221>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5222
5223<!--code_no_check-->
5224```ts
5225import { socket } from '@kit.NetworkKit';
5226import { common } from '@kit.AbilityKit';
5227
5228
5229let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5230let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5231let sandboxPath: string = context.filesDir + '/testSocket';
5232let listenAddr: socket.LocalAddress = {
5233  address: sandboxPath
5234}
5235server.listen(listenAddr).then(() => {
5236  console.log("listen success");
5237}).catch((err: Object) => {
5238  console.error("listen fail: " + JSON.stringify(err));
5239})
5240server.getState().then((data: socket.SocketStateBase) => {
5241  console.log('getState success: ' + JSON.stringify(data));
5242}).catch((err: Object) => {
5243  console.error('getState fail: ' + JSON.stringify(err));
5244});
5245```
5246
5247### setExtraOptions<sup>11+</sup>
5248
5249setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
5250
5251设置LocalSocketServer连接的套接字属性。使用Promise方式作为异步方法。
5252
5253> **说明:**
5254> listen方法调用成功后,才可调用此方法。
5255
5256**系统能力**:SystemCapability.Communication.NetStack
5257
5258**参数:**
5259
5260| 参数名  | 类型                                      | 必填 | 说明                            |
5261| ------- | --------------------------------------- | ---- | ------------------------------ |
5262| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocketServer连接的其他属性。 |
5263
5264**返回值:**
5265
5266| 类型            | 说明                                             |
5267| :-------------- | :---------------------------------------------- |
5268| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
5269
5270**错误码:**
5271
5272以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
5273
5274| 错误码ID | 错误信息                        |
5275| -------- | ------------------------------- |
5276| 401      | Parameter error.                |
5277| 2301009  | Bad file descriptor.            |
5278
5279**示例:**
5280
5281>**说明:**
5282>
5283>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5284
5285<!--code_no_check-->
5286```ts
5287import { socket } from '@kit.NetworkKit';
5288import { common } from '@kit.AbilityKit';
5289
5290let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5291let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5292let sandboxPath: string = context.filesDir + '/testSocket';
5293let listenAddr: socket.NetAddress = {
5294  address: sandboxPath
5295}
5296server.listen(listenAddr).then(() => {
5297  console.log("listen success");
5298}).catch((err: Object) => {
5299  console.error("listen fail: " + JSON.stringify(err));
5300})
5301
5302let options: socket.ExtraOptionsBase = {
5303  receiveBufferSize: 8192,
5304  sendBufferSize: 8192,
5305  socketTimeout: 3000
5306}
5307server.setExtraOptions(options).then(() => {
5308  console.log('setExtraOptions success');
5309}).catch((err: Object) => {
5310  console.error('setExtraOptions fail: ' + JSON.stringify(err));
5311});
5312```
5313
5314### getExtraOptions<sup>11+</sup>
5315
5316getExtraOptions(): Promise\<ExtraOptionsBase\>;
5317
5318获取LocalSocketServer中连接的套接字的属性。使用Promise方式作为异步方法。
5319
5320> **说明:**
5321> listen方法调用成功后,才可调用此方法。
5322
5323**系统能力**:SystemCapability.Communication.NetStack
5324
5325**返回值:**
5326
5327| 类型                         | 说明                        |
5328| :-------------------------- | :-------------------------- |
5329| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 |
5330
5331**错误码:**
5332
5333以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5334
5335| 错误码ID | 错误信息               |
5336| -------- | -------------------- |
5337| 401     | Parameter error. |
5338
5339**示例:**
5340
5341>**说明:**
5342>
5343>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5344
5345<!--code_no_check-->
5346```ts
5347import { socket } from '@kit.NetworkKit';
5348import { common } from '@kit.AbilityKit';
5349
5350let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5351let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5352let sandboxPath: string = context.filesDir + '/testSocket';
5353let listenAddr: socket.LocalAddress = {
5354  address: sandboxPath
5355}
5356server.listen(listenAddr).then(() => {
5357  console.log("listen success");
5358}).catch((err: Object) => {
5359  console.error("listen fail: " + JSON.stringify(err));
5360})
5361server.getExtraOptions().then((options: socket.ExtraOptionsBase) => {
5362  console.log('options: ' + JSON.stringify(options));
5363}).catch((err: Object) => {
5364  console.error('getExtraOptions fail: ' + JSON.stringify(err));
5365});
5366```
5367
5368### getLocalAddress<sup>12+</sup>
5369
5370getLocalAddress(): Promise\<string\>
5371
5372获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。
5373
5374> **说明:**
5375> listen方法调用成功后,才可调用此方法。
5376
5377**系统能力**:SystemCapability.Communication.NetStack
5378
5379**返回值:**
5380
5381| 类型            | 说明                                                 |
5382|  -------------- |  --------------------------------------------------- |
5383| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
5384
5385**错误码:**
5386
5387以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
5388
5389| 错误码ID | 错误信息                                    |
5390| -------- | ------------------------------------------- |
5391| 2300002  | System internal error.                      |
5392| 2301009  | Bad file descriptor.                            |
5393| 2303188  | Socket operation on non-socket. |
5394
5395**示例:**
5396
5397>**说明:**
5398>
5399>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5400
5401<!--code_no_check-->
5402```ts
5403import { common } from '@kit.AbilityKit';
5404import { socket } from '@kit.NetworkKit';
5405import { BusinessError } from '@kit.BasicServicesKit';
5406
5407let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5408let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5409let sandboxPath: string = context.filesDir + '/testSocket';
5410let listenAddr: socket.LocalAddress = {
5411  address: sandboxPath
5412}
5413server.listen(listenAddr).then(() => {
5414  console.info("listen success");
5415  server.getLocalAddress().then((localPath: string) => {
5416    console.info("SUCCESS " + JSON.stringify(localPath));
5417  }).catch((err: BusinessError) => {
5418    console.error("FAIL " + JSON.stringify(err));
5419  })
5420}).catch((err: Object) => {
5421  console.error("listen fail: " + JSON.stringify(err));
5422})
5423
5424```
5425
5426### on('connect')<sup>11+</sup>
5427
5428on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void
5429
5430订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
5431
5432> **说明:**
5433> listen方法调用成功后,才可调用此方法。
5434
5435**系统能力**:SystemCapability.Communication.NetStack
5436
5437**参数:**
5438
5439| 参数名   | 类型                            | 必填 | 说明                                  |
5440| -------- | ------------------------------- | ---- | ------------------------------------- |
5441| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
5442| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是   | 以callback的形式异步返回接收到客户端连接的结果。|
5443
5444**错误码:**
5445
5446以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5447
5448| 错误码ID | 错误信息         |
5449| -------- | ---------------- |
5450| 401      | Parameter error. |
5451
5452**示例:**
5453
5454```ts
5455import { socket } from '@kit.NetworkKit';
5456
5457let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5458server.on('connect', (connection: socket.LocalSocketConnection) => {
5459  if (connection) {
5460    console.log('accept a client')
5461  }
5462});
5463```
5464
5465### off('connect')<sup>11+</sup>
5466
5467off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void
5468
5469取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
5470
5471**系统能力**:SystemCapability.Communication.NetStack
5472
5473**参数:**
5474
5475| 参数名   | 类型                            | 必填 | 说明                                  |
5476| -------- | ------------------------------- | ---- | ------------------------------------- |
5477| type     | string                          | 是   | 取消订阅的事件类型。'connect':LocalSocketServer的连接事件。 |
5478| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。|
5479
5480**错误码:**
5481
5482以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5483
5484| 错误码ID | 错误信息         |
5485| -------- | ---------------- |
5486| 401      | Parameter error. |
5487
5488**示例:**
5489
5490```ts
5491import { socket } from '@kit.NetworkKit';
5492
5493let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5494let callback = (connection: socket.LocalSocketConnection) => {
5495  if (connection) {
5496    console.log('accept a client')
5497  }
5498}
5499server.on('connect', callback);
5500// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5501server.off('connect', callback);
5502server.off('connect');
5503```
5504
5505### on('error')<sup>11+</sup>
5506
5507on(type: 'error', callback: ErrorCallback): void
5508
5509订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
5510
5511> **说明:**
5512> listen方法调用成功后,才可调用此方法。
5513
5514**系统能力**:SystemCapability.Communication.NetStack
5515
5516**参数:**
5517
5518| 参数名   | 类型          | 必填 | 说明                                 |
5519| -------- | ------------- | ---- | ------------------------------------ |
5520| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5521| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
5522
5523**错误码:**
5524
5525以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5526
5527| 错误码ID | 错误信息         |
5528| -------- | ---------------- |
5529| 401      | Parameter error. |
5530
5531**示例:**
5532
5533```ts
5534import { socket } from '@kit.NetworkKit';
5535
5536let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5537server.on('error', (err: Object) => {
5538  console.error("on error, err:" + JSON.stringify(err))
5539});
5540```
5541
5542### off('error')<sup>11+</sup>
5543
5544off(type: 'error', callback?: ErrorCallback): void
5545
5546取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
5547
5548**系统能力**:SystemCapability.Communication.NetStack
5549
5550**参数:**
5551
5552| 参数名   | 类型          | 必填 | 说明                                 |
5553| -------- | ------------- | ---- | ------------------------------------ |
5554| type     | string        | 是   | 取消订阅的事件类型。'error':error事件。 |
5555| callback | ErrorCallback | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。   |
5556
5557**错误码:**
5558
5559以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5560
5561| 错误码ID | 错误信息         |
5562| -------- | ---------------- |
5563| 401      | Parameter error. |
5564
5565**示例:**
5566
5567```ts
5568import { socket } from '@kit.NetworkKit';
5569
5570let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5571let callback = (err: Object) => {
5572  console.error("on error, err:" + JSON.stringify(err));
5573}
5574server.on('error', callback);
5575// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5576server.off('error', callback);
5577server.off('error');
5578```
5579
5580### close<sup>20+</sup>
5581
5582close(): Promise\<void\>
5583
5584LocalSocketServer停止监听并释放通过[listen](#listen11)方法绑定的监听端口。使用Promise异步回调。
5585
5586> **说明:**
5587> 该方法不会关闭已有连接。如需关闭,请调用[LocalSocketConnection](#localsocketconnection11)的[close](#close11-1)方法。
5588
5589**系统能力**:SystemCapability.Communication.NetStack
5590
5591**返回值:**
5592
5593| 类型            | 说明                                                       |
5594|  -------------- |  --------------------------------------------------------- |
5595| Promise\<void\> | Promise对象,无返回结果。 |
5596
5597**错误码:**
5598
5599以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
5600
5601| 错误码ID | 错误信息                                    |
5602| -------- | ------------------------------------------- |
5603| 2300002  | System internal error.                      |
5604
5605**示例:**
5606
5607>**说明:**
5608>
5609>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5610
5611<!--code_no_check-->
5612```ts
5613import { socket } from '@kit.NetworkKit';
5614import { common } from '@kit.AbilityKit';
5615import { BusinessError } from '@kit.BasicServicesKit';
5616
5617let localserver: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5618let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5619let sandboxPath: string = context.filesDir + '/testSocket';
5620let addr: socket.LocalAddress = {
5621  address: sandboxPath
5622}
5623localserver.on('connect', (connection: socket.LocalSocketConnection) => {
5624  console.info("connection clientId: " + connection.clientId);
5625  // 逻辑处理
5626  localserver.close(); // 停止监听
5627  connection.close(); // 关闭当前连接
5628});
5629localserver.listen(addr).then(() => {
5630  console.info('listen success');
5631}).catch((err: BusinessError) => {
5632  console.error('listen fail: ' + err.code);
5633});
5634```
5635
5636## LocalSocketConnection<sup>11+</sup>
5637
5638LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。
5639
5640> **说明:**
5641> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。
5642
5643**系统能力**:SystemCapability.Communication.NetStack
5644
5645### 属性
5646
5647| 名称     | 类型   | 必填 | 说明                            |
5648| -------- | ------ | ---- | ---------------------------- |
5649| clientId | number | 是   | 客户端与服务端建立的会话连接的id。 |
5650
5651### send<sup>11+</sup>
5652
5653send(options: LocalSendOptions): Promise\<void\>
5654
5655通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。
5656
5657> **说明:**
5658> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。
5659
5660**系统能力**:SystemCapability.Communication.NetStack
5661
5662**参数:**
5663
5664| 参数名  | 类型                              | 必填 | 说明                                                         |
5665| ------- | --------------------------------- | ---- | -------------------------------------- |
5666| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocketConnection发送请求的参数。 |
5667
5668**返回值:**
5669
5670| 类型            | 说明                                             |
5671| :-------------- | :---------------------------------------------- |
5672| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
5673
5674**错误码:**
5675
5676以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
5677
5678| 错误码ID | 错误信息               |
5679| -------- | ---------------------- |
5680| 401      | Parameter error.       |
5681| 2301011  | Operation would block. |
5682
5683**示例:**
5684
5685```ts
5686import { socket } from '@kit.NetworkKit';
5687
5688let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5689
5690server.on('connect', (connection: socket.LocalSocketConnection) => {
5691  let sendOptions: socket.LocalSendOptions = {
5692    data: 'Hello, client!'
5693  }
5694  connection.send(sendOptions).then(() => {
5695    console.log('send success');
5696  }).catch((err: Object) => {
5697    console.error('send fail: ' + JSON.stringify(err));
5698  });
5699});
5700```
5701
5702### close<sup>11+</sup>
5703
5704close(): Promise\<void\>
5705
5706关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。
5707
5708**系统能力**:SystemCapability.Communication.NetStack
5709
5710**返回值:**
5711
5712| 类型            | 说明                                         |
5713| :-------------- | :------------------------------------------- |
5714| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
5715
5716**错误码:**
5717
5718以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
5719
5720| 错误码ID | 错误信息               |
5721| -------- | -------------------- |
5722| 2301009  | Bad file descriptor. |
5723
5724**示例:**
5725
5726```ts
5727import { socket } from '@kit.NetworkKit';
5728
5729let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5730server.on('connect', (connection: socket.LocalSocketConnection) => {
5731  connection.close().then(() => {
5732    console.log('close success');
5733  }).catch((err: Object) => {
5734    console.error('close fail: ' + JSON.stringify(err));
5735  });
5736});
5737```
5738
5739### getLocalAddress<sup>12+</sup>
5740
5741getLocalAddress(): Promise\<string\>
5742
5743获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。
5744
5745**系统能力**:SystemCapability.Communication.NetStack
5746
5747**返回值:**
5748
5749| 类型            | 说明                                                 |
5750|  -------------- |  --------------------------------------------------- |
5751| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
5752
5753**错误码:**
5754
5755以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
5756
5757| 错误码ID | 错误信息                                    |
5758| -------- | ------------------------------------------- |
5759| 2300002  | System internal error.                      |
5760| 2301009  | Bad file descriptor.                            |
5761| 2303188  | Socket operation on non-socket. |
5762
5763**示例:**
5764
5765>**说明:**
5766>
5767>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5768
5769<!--code_no_check-->
5770```ts
5771import { common } from '@kit.AbilityKit';
5772import { socket } from '@kit.NetworkKit';
5773import { BusinessError } from '@kit.BasicServicesKit';
5774
5775let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5776let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5777let sandboxPath: string = context.filesDir + '/testSocket';
5778let localAddr: socket.LocalAddress = {
5779  address: sandboxPath
5780}
5781server.listen(localAddr).then(() => {
5782  console.info('listen success');
5783  let client: socket.LocalSocket = socket.constructLocalSocketInstance();
5784  let connectOpt: socket.LocalConnectOptions = {
5785    address: localAddr,
5786    timeout: 6000
5787  }
5788  client.connect(connectOpt).then(() => {
5789    server.getLocalAddress().then((localPath: string) => {
5790      console.info("success, localPath is" + JSON.stringify(localPath));
5791    }).catch((err: BusinessError) => {
5792      console.error("FAIL " + JSON.stringify(err));
5793    })
5794  }).catch((err: Object) => {
5795    console.error('connect fail: ' + JSON.stringify(err));
5796  });
5797});
5798```
5799
5800### on('message')<sup>11+</sup>
5801
5802on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void
5803
5804订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
5805
5806**系统能力**:SystemCapability.Communication.NetStack
5807
5808**参数:**
5809
5810| 参数名   | 类型                                              | 必填 | 说明                                     |
5811| -------- | ----------------------------------------------- | ---- | --------------------------------------- |
5812| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。     |
5813| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收到的来自客户端的消息。 |
5814
5815**错误码:**
5816
5817以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5818
5819| 错误码ID | 错误信息         |
5820| -------- | ---------------- |
5821| 401      | Parameter error. |
5822
5823**示例:**
5824
5825>**说明:**
5826>
5827>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
5828
5829<!--code_no_check-->
5830```ts
5831import { socket } from '@kit.NetworkKit';
5832import { common } from '@kit.AbilityKit';
5833
5834let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5835let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5836let sandboxPath: string = context.filesDir + '/testSocket';
5837let listenAddr: socket.LocalAddress = {
5838  address: sandboxPath
5839}
5840server.listen(listenAddr).then(() => {
5841  console.log("listen success");
5842}).catch((err: Object) => {
5843  console.error("listen fail: " + JSON.stringify(err));
5844});
5845server.on('connect', (connection: socket.LocalSocketConnection) => {
5846  connection.on('message', (value: socket.LocalSocketMessageInfo) => {
5847    const uintArray = new Uint8Array(value.message);
5848    let messageView = '';
5849    for (let i = 0; i < uintArray.length; i++) {
5850      messageView += String.fromCharCode(uintArray[i]);
5851    }
5852    console.log('total: ' + JSON.stringify(value));
5853    console.log('message infomation: ' + messageView);
5854  });
5855});
5856```
5857
5858### off('message')<sup>11+</sup>
5859
5860off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
5861
5862取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
5863
5864**系统能力**:SystemCapability.Communication.NetStack
5865
5866**参数:**
5867
5868| 参数名   | 类型                                              | 必填 | 说明                                 |
5869| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
5870| type     | string                                          | 是   | 取消订阅的事件类型。'message':接收消息事件。 |
5871| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 |
5872
5873**错误码:**
5874
5875以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5876
5877| 错误码ID | 错误信息         |
5878| -------- | ---------------- |
5879| 401      | Parameter error. |
5880
5881**示例:**
5882
5883```ts
5884import { socket } from '@kit.NetworkKit';
5885
5886let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5887let callback = (value: socket.LocalSocketMessageInfo) => {
5888  const uintArray = new Uint8Array(value.message)
5889  let messageView = '';
5890  for (let i = 0; i < uintArray.length; i++) {
5891    messageView += String.fromCharCode(uintArray[i]);
5892  }
5893  console.log('total: ' + JSON.stringify(value));
5894  console.log('message infomation: ' + messageView);
5895}
5896server.on('connect', (connection: socket.LocalSocketConnection) => {
5897  connection.on('message', callback);
5898  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5899  connection.off('message', callback);
5900  connection.off('message');
5901});
5902```
5903
5904### on('close')<sup>11+</sup>
5905
5906on(type: 'close', callback: Callback\<void\>): void
5907
5908订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
5909
5910**系统能力**:SystemCapability.Communication.NetStack
5911
5912**参数:**
5913
5914| 参数名   | 类型             | 必填 | 说明                                |
5915| -------- | ---------------- | ---- | ----------------------------------- |
5916| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
5917| callback | Callback\<void\> | 是   | 以callback的形式异步返回会话关闭的结果。 |
5918
5919**错误码:**
5920
5921以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5922
5923| 错误码ID | 错误信息         |
5924| -------- | ---------------- |
5925| 401      | Parameter error. |
5926
5927**示例:**
5928
5929```ts
5930import { socket } from '@kit.NetworkKit';
5931
5932let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5933server.on('connect', (connection: socket.LocalSocketConnection) => {
5934  connection.on('close', () => {
5935    console.log("on close success")
5936  });
5937});
5938```
5939
5940### off('close')<sup>11+</sup>
5941
5942off(type: 'close', callback?: Callback\<void\>): void
5943
5944取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
5945
5946**系统能力**:SystemCapability.Communication.NetStack
5947
5948**参数:**
5949
5950| 参数名   | 类型             | 必填 | 说明                                |
5951| -------- | ---------------- | ---- | ----------------------------------- |
5952| type     | string           | 是   | 取消订阅的事件类型。'close':关闭事件。 |
5953| callback | Callback\<void\> | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 |
5954
5955**错误码:**
5956
5957以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5958
5959| 错误码ID | 错误信息         |
5960| -------- | ---------------- |
5961| 401      | Parameter error. |
5962
5963**示例:**
5964
5965```ts
5966import { socket } from '@kit.NetworkKit';
5967
5968let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5969let callback = () => {
5970  console.log("on close success");
5971}
5972server.on('connect', (connection: socket.LocalSocketConnection) => {
5973  connection.on('close', callback);
5974  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5975  connection.off('close', callback);
5976  connection.off('close');
5977});
5978```
5979
5980### on('error')<sup>11+</sup>
5981
5982on(type: 'error', callback: ErrorCallback): void
5983
5984订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
5985
5986**系统能力**:SystemCapability.Communication.NetStack
5987
5988**参数:**
5989
5990| 参数名   | 类型          | 必填 | 说明                                 |
5991| -------- | ------------- | ---- | ------------------------------------ |
5992| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5993| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
5994
5995**错误码:**
5996
5997以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
5998
5999| 错误码ID | 错误信息         |
6000| -------- | ---------------- |
6001| 401      | Parameter error. |
6002
6003**示例:**
6004
6005```ts
6006import { socket } from '@kit.NetworkKit';
6007
6008let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
6009server.on('connect', (connection: socket.LocalSocketConnection) => {
6010  connection.on('error', (err: Object) => {
6011    console.error("on error, err:" + JSON.stringify(err))
6012  });
6013});
6014```
6015
6016### off('error')<sup>11+</sup>
6017
6018off(type: 'error', callback?: ErrorCallback): void
6019
6020取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
6021
6022**系统能力**:SystemCapability.Communication.NetStack
6023
6024**参数:**
6025
6026| 参数名   | 类型          | 必填 | 说明                                 |
6027| -------- | ------------- | ---- | ------------------------------------ |
6028| type     | string        | 是   | 取消订阅的事件类型。'error':error事件。 |
6029| callback | ErrorCallback | 否   | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。   |
6030
6031**错误码:**
6032
6033以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
6034
6035| 错误码ID | 错误信息         |
6036| -------- | ---------------- |
6037| 401      | Parameter error. |
6038
6039**示例:**
6040
6041```ts
6042import { socket } from '@kit.NetworkKit';
6043
6044let callback = (err: Object) => {
6045  console.error("on error, err: " + JSON.stringify(err));
6046}
6047let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
6048server.on('connect', (connection: socket.LocalSocketConnection) => {
6049  connection.on('error', callback);
6050  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6051  connection.off('error', callback);
6052  connection.off('error');
6053});
6054```
6055
6056## LocalSocket 错误码说明
6057
6058LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。
6059
6060错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)。
6061
6062## socket.constructTLSSocketInstance<sup>9+</sup>
6063
6064constructTLSSocketInstance(): TLSSocket
6065
6066创建并返回一个TLSSocket对象。
6067
6068**系统能力**:SystemCapability.Communication.NetStack
6069
6070**返回值:**
6071
6072| 类型                               | 说明                    |
6073|  --------------------------------- |  ---------------------- |
6074| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
6075
6076**示例:**
6077
6078```ts
6079import { socket } from '@kit.NetworkKit';
6080
6081let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6082```
6083
6084## socket.constructTLSSocketInstance<sup>12+</sup>
6085
6086constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket
6087
6088将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。
6089
6090> **说明:**
6091> 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。
6092
6093**系统能力**:SystemCapability.Communication.NetStack
6094
6095**参数:**
6096
6097| 参数名       | 类型 | 必填 | 说明                     |
6098|-----------|----| ---- |------------------------|
6099| tcpSocket | [TCPSocket](#tcpsocket)   | 是   | 需要进行升级的TCPSocket对象。 |
6100
6101**返回值:**
6102
6103| 类型                               | 说明                    |
6104|  --------------------------------- |  ---------------------- |
6105| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
6106
6107**错误码:**
6108
6109以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
6110
6111| 错误码ID   | 错误信息                             |
6112|---------|----------------------------------|
6113| 401     | Parameter error.  |
6114| 2300002 | System internal error.  |
6115| 2303601 | Invalid socket FD.     |
6116| 2303602 | Socket is not connected.  |
6117
6118**示例:**
6119
6120```ts
6121import { socket } from '@kit.NetworkKit';
6122import { BusinessError } from '@kit.BasicServicesKit';
6123
6124let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
6125let netAddress: socket.NetAddress = {
6126  address: '192.168.xx.xxx',
6127  port: 8080
6128}
6129let tcpconnectoptions: socket.TCPConnectOptions = {
6130  address: netAddress,
6131  timeout: 6000
6132}
6133
6134tcp.connect(tcpconnectoptions, (err: BusinessError) => {
6135  if (err) {
6136    console.error('connect fail');
6137    return;
6138  }
6139  console.log('connect success');
6140
6141  // 确保TCPSocket已连接后,再升级TLSSocket
6142  let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp);
6143})
6144```
6145
6146## TLSSocket<sup>9+</sup>
6147
6148TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。
6149
6150### bind<sup>9+</sup>
6151
6152bind(address: NetAddress, callback: AsyncCallback\<void\>): void
6153
6154绑定IP地址和端口。使用callback方法作为异步方法。
6155
6156> **说明:**
6157> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。
6158
6159**需要权限**:ohos.permission.INTERNET
6160
6161**系统能力**:SystemCapability.Communication.NetStack
6162
6163**参数:**
6164
6165| 参数名   | 类型                               | 必填 | 说明                                                   |
6166| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
6167| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
6168| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。|
6169
6170**错误码:**
6171
6172以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
6173
6174| 错误码ID | 错误信息                 |
6175| ------- | ----------------------- |
6176| 401     | Parameter error.        |
6177| 201     | Permission denied.      |
6178| 2303198 | Address already in use. |
6179| 2300002 | System internal error.  |
6180
6181**示例:**
6182
6183```ts
6184import { socket } from '@kit.NetworkKit';
6185import { BusinessError } from '@kit.BasicServicesKit';
6186
6187let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6188let bindAddr: socket.NetAddress = {
6189  address: '192.168.xx.xxx',
6190  port: 8080
6191}
6192tls.bind(bindAddr, (err: BusinessError) => {
6193  if (err) {
6194    console.error('bind fail');
6195    return;
6196  }
6197  console.log('bind success');
6198});
6199```
6200
6201### bind<sup>9+</sup>
6202
6203bind(address: NetAddress): Promise\<void\>
6204
6205绑定IP地址和端口。使用Promise方法作为异步方法。
6206
6207> **说明:**
6208> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。
6209
6210**需要权限**:ohos.permission.INTERNET
6211
6212**系统能力**:SystemCapability.Communication.NetStack
6213
6214**参数:**
6215
6216| 参数名  | 类型                               | 必填 | 说明                                                   |
6217| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
6218| address | [NetAddress](#netaddress)          | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
6219
6220**返回值:**
6221
6222| 类型            | 说明                                                     |
6223|  -------------- |  ------------------------------------------------------- |
6224| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 |
6225
6226**错误码:**
6227
6228以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
6229
6230| 错误码ID | 错误信息                 |
6231| ------- | ----------------------- |
6232| 401     | Parameter error.        |
6233| 201     | Permission denied.      |
6234| 2303198 | Address already in use. |
6235| 2300002 | System internal error.  |
6236
6237**示例:**
6238
6239```ts
6240import { socket } from '@kit.NetworkKit';
6241import { BusinessError } from '@kit.BasicServicesKit';
6242
6243let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6244let bindAddr: socket.NetAddress = {
6245  address: '192.168.xx.xxx',
6246  port: 8080
6247}
6248tls.bind(bindAddr).then(() => {
6249  console.log('bind success');
6250}).catch((err: BusinessError) => {
6251  console.error('bind fail');
6252});
6253```
6254
6255### getState<sup>9+</sup>
6256
6257getState(callback: AsyncCallback\<SocketStateBase\>): void
6258
6259在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。
6260
6261**系统能力**:SystemCapability.Communication.NetStack
6262
6263**参数:**
6264
6265| 参数名   | 类型                                                   | 必填 | 说明       |
6266| -------- | ------------------------------------------------------ | ---- | ---------- |
6267| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 |
6268
6269**错误码:**
6270
6271以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
6272
6273| 错误码ID | 错误信息                        |
6274| ------- | ------------------------------ |
6275| 2303188 | Socket operation on non-socket.|
6276| 2300002 | System internal error.         |
6277
6278**示例:**
6279
6280```ts
6281import { socket } from '@kit.NetworkKit';
6282import { BusinessError } from '@kit.BasicServicesKit';
6283
6284let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6285let bindAddr: socket.NetAddress = {
6286  address: '192.168.xx.xxx',
6287  port: 8080
6288}
6289tls.bind(bindAddr, (err: BusinessError) => {
6290  if (err) {
6291    console.error('bind fail');
6292    return;
6293  }
6294  console.log('bind success');
6295});
6296tls.getState((err: BusinessError, data: socket.SocketStateBase) => {
6297  if (err) {
6298    console.error('getState fail');
6299    return;
6300  }
6301  console.log('getState success:' + JSON.stringify(data));
6302});
6303```
6304
6305### getState<sup>9+</sup>
6306
6307getState(): Promise\<SocketStateBase\>
6308
6309在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。
6310
6311**系统能力**:SystemCapability.Communication.NetStack
6312
6313**返回值:**
6314
6315| 类型                                             | 说明                                       |
6316|  ----------------------------------------------- |  ----------------------------------------- |
6317| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。|
6318
6319**错误码:**
6320
6321以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。
6322
6323| 错误码ID | 错误信息                        |
6324| ------- | ------------------------------ |
6325| 2303188 | Socket operation on non-socket.|
6326| 2300002 | System internal error.         |
6327
6328**示例:**
6329
6330```ts
6331import { socket } from '@kit.NetworkKit';
6332import { BusinessError } from '@kit.BasicServicesKit';
6333
6334let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6335let bindAddr: socket.NetAddress = {
6336  address: '192.168.xx.xxx',
6337  port: 8080
6338}
6339tls.bind(bindAddr, (err: BusinessError) => {
6340  if (err) {
6341    console.error('bind fail');
6342    return;
6343  }
6344  console.log('bind success');
6345});
6346tls.getState().then(() => {
6347  console.log('getState success');
6348}).catch((err: BusinessError) => {
6349  console.error('getState fail');
6350});
6351```
6352
6353### setExtraOptions<sup>9+</sup>
6354
6355setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
6356
6357在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
6358
6359**系统能力**:SystemCapability.Communication.NetStack
6360
6361**参数:**
6362
6363| 参数名   | 类型                                      | 必填 | 说明                                                         |
6364| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
6365| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
6366| callback | AsyncCallback\<void\>                     | 是   | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。|
6367
6368**错误码:**
6369
6370以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
6371
6372| 错误码ID | 错误信息                        |
6373| ------- | -----------------------------  |
6374| 401     | Parameter error.               |
6375| 2303188 | Socket operation on non-socket.|
6376| 2300002 | System internal error.         |
6377
6378**示例:**
6379
6380```ts
6381import { socket } from '@kit.NetworkKit';
6382import { BusinessError } from '@kit.BasicServicesKit';
6383
6384let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6385let bindAddr: socket.NetAddress = {
6386  address: '192.168.xx.xxx',
6387  port: 8080
6388}
6389tls.bind(bindAddr, (err: BusinessError) => {
6390  if (err) {
6391    console.error('bind fail');
6392    return;
6393  }
6394  console.log('bind success');
6395});
6396
6397interface SocketLinger {
6398  on: boolean;
6399  linger: number;
6400}
6401
6402let tcpExtraOptions: socket.TCPExtraOptions = {
6403  keepAlive: true,
6404  OOBInline: true,
6405  TCPNoDelay: true,
6406  socketLinger: { on: true, linger: 10 } as SocketLinger,
6407  receiveBufferSize: 8192,
6408  sendBufferSize: 8192,
6409  reuseAddress: true,
6410  socketTimeout: 3000
6411}
6412tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
6413  if (err) {
6414    console.error('setExtraOptions fail');
6415    return;
6416  }
6417  console.log('setExtraOptions success');
6418});
6419```
6420
6421### setExtraOptions<sup>9+</sup>
6422
6423setExtraOptions(options: TCPExtraOptions): Promise\<void\>
6424
6425在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用Promise方式作为异步方法。
6426
6427**系统能力**:SystemCapability.Communication.NetStack
6428
6429**参数:**
6430
6431| 参数名  | 类型                                      | 必填 | 说明                                                         |
6432| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
6433| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
6434
6435**返回值:**
6436
6437| 类型            | 说明                                                 |
6438|  -------------- |  --------------------------------------------------- |
6439| Promise\<void\> | Promise对象。无返回结果的Promise对象。 |
6440
6441**错误码:**
6442
6443以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
6444
6445| 错误码ID | 错误信息                        |
6446| ------- | ------------------------------ |
6447| 401     | Parameter error.               |
6448| 2303188 | Socket operation on non-socket.|
6449| 2300002 | System internal error.         |
6450
6451**示例:**
6452
6453```ts
6454import { socket } from '@kit.NetworkKit';
6455import { BusinessError } from '@kit.BasicServicesKit';
6456
6457let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6458let bindAddr: socket.NetAddress = {
6459  address: '192.168.xx.xxx',
6460  port: 8080
6461}
6462tls.bind(bindAddr, (err: BusinessError) => {
6463  if (err) {
6464    console.error('bind fail');
6465    return;
6466  }
6467  console.log('bind success');
6468});
6469
6470interface SocketLinger {
6471  on: boolean;
6472  linger: number;
6473}
6474
6475let tcpExtraOptions: socket.TCPExtraOptions = {
6476  keepAlive: true,
6477  OOBInline: true,
6478  TCPNoDelay: true,
6479  socketLinger: { on: true, linger: 10 } as SocketLinger,
6480  receiveBufferSize: 8192,
6481  sendBufferSize: 8192,
6482  reuseAddress: true,
6483  socketTimeout: 3000
6484}
6485tls.setExtraOptions(tcpExtraOptions).then(() => {
6486  console.log('setExtraOptions success');
6487}).catch((err: BusinessError) => {
6488  console.error('setExtraOptions fail');
6489});
6490```
6491
6492### on('message')<sup>9+</sup>
6493
6494on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
6495
6496订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
6497
6498> **说明:**
6499>
6500> bind方法调用成功后,才可调用此方法。
6501
6502**系统能力**:SystemCapability.Communication.NetStack
6503
6504**参数:**
6505
6506| 参数名   | 类型                                                         | 必填 | 说明                                      |
6507| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
6508| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
6509| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 |
6510
6511**错误码:**
6512
6513以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。
6514
6515| 错误码ID | 错误信息                        |
6516| ------- | ------------------------------ |
6517| 401     | Parameter error.               |
6518
6519**示例:**
6520
6521```ts
6522import { socket } from '@kit.NetworkKit';
6523import { BusinessError } from '@kit.BasicServicesKit';
6524
6525let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6526let messageView = '';
6527let bindAddr: socket.NetAddress = {
6528  address: '192.168.xx.xxx',
6529  port: 8080
6530}
6531tls.bind(bindAddr, (err: BusinessError) => {
6532  if (err) {
6533    console.log('bind fail');
6534    return;
6535  }
6536  console.log('bind success');
6537  tls.on('message', (value: socket.SocketMessageInfo) => {
6538    for (let i: number = 0; i < value.message.byteLength; i++) {
6539      let uint8Array = new Uint8Array(value.message)
6540      let messages = uint8Array[i]
6541      let message = String.fromCharCode(messages);
6542      messageView += message;
6543    }
6544    console.log('on message message: ' + JSON.stringify(messageView));
6545    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
6546  });
6547});
6548```
6549
6550### off('message')<sup>9+</sup>
6551
6552off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
6553
6554取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
6555
6556**系统能力**:SystemCapability.Communication.NetStack
6557
6558**参数:**
6559
6560| 参数名   | 类型                                                         | 必填 | 说明                                      |
6561| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
6562| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
6563| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 |
6564
6565**错误码:**
6566
6567| 错误码ID | 错误信息                        |
6568| ------- | ------------------------------ |
6569| 401     | Parameter error.               |
6570
6571**示例:**
6572
6573```ts
6574import { socket } from '@kit.NetworkKit';
6575import { BusinessError } from '@kit.BasicServicesKit';
6576
6577let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6578let messageView = '';
6579let callback = (value: socket.SocketMessageInfo) => {
6580  for (let i: number = 0; i < value.message.byteLength; i++) {
6581    let uint8Array = new Uint8Array(value.message)
6582    let messages = uint8Array[i]
6583    let message = String.fromCharCode(messages);
6584    messageView += message;
6585  }
6586  console.log('on message message: ' + JSON.stringify(messageView));
6587  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
6588}
6589tls.on('message', callback);
6590// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6591tls.off('message', callback);
6592```
6593### on('connect' | 'close')<sup>9+</sup>
6594
6595on(type: 'connect' | 'close', callback: Callback\<void\>): void
6596
6597订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
6598
6599> **说明:**
6600>
6601> bind方法调用成功后,才可调用此方法。
6602
6603**系统能力**:SystemCapability.Communication.NetStack
6604
6605**参数:**
6606
6607| 参数名   | 类型             | 必填 | 说明                                                         |
6608| -------- | ---------------- | ---- | ------------------------------------------------------------ |
6609| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
6610| callback | Callback\<void\> | 是   | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。                                                   |
6611
6612**错误码:**
6613
6614| 错误码ID | 错误信息                        |
6615| ------- | ------------------------------ |
6616| 401     | Parameter error.               |
6617
6618**示例:**
6619
6620```ts
6621import { socket } from '@kit.NetworkKit';
6622import { BusinessError } from '@kit.BasicServicesKit';
6623
6624let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6625let bindAddr: socket.NetAddress = {
6626  address: '192.168.xx.xxx',
6627  port: 8080
6628}
6629tls.bind(bindAddr, (err: BusinessError) => {
6630  if (err) {
6631    console.log('bind fail');
6632    return;
6633  }
6634  console.log('bind success');
6635  tls.on('connect', () => {
6636    console.log("on connect success")
6637  });
6638  tls.on('close', () => {
6639    console.log("on close success")
6640  });
6641});
6642```
6643
6644### off('connect' | 'close')<sup>9+</sup>
6645
6646off(type: 'connect' | 'close', callback?: Callback\<void\>): void
6647
6648取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
6649
6650**系统能力**:SystemCapability.Communication.NetStack
6651
6652**参数:**
6653
6654| 参数名   | 类型             | 必填 | 说明                                                         |
6655| -------- | ---------------- | ---- | ------------------------------------------------------------ |
6656| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
6657| callback | Callback\<void\> | 否   | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。          |
6658
6659**错误码:**
6660
6661| 错误码ID | 错误信息                        |
6662| ------- | ------------------------------ |
6663| 401     | Parameter error.               |
6664
6665**示例:**
6666
6667```ts
6668import { socket } from '@kit.NetworkKit';
6669import { BusinessError } from '@kit.BasicServicesKit';
6670
6671let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6672let callback1 = () => {
6673  console.log("on connect success");
6674}
6675tls.on('connect', callback1);
6676// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6677tls.off('connect', callback1);
6678tls.off('connect');
6679let callback2 = () => {
6680  console.log("on close success");
6681}
6682tls.on('close', callback2);
6683// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6684tls.off('close', callback2);
6685```
6686
6687### on('error')<sup>9+</sup>
6688
6689on(type: 'error', callback: ErrorCallback): void
6690
6691订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
6692
6693> **说明:**
6694>
6695> bind方法调用成功后,才可调用此方法。
6696
6697**系统能力**:SystemCapability.Communication.NetStack
6698
6699**参数:**
6700
6701| 参数名   | 类型          | 必填 | 说明                                 |
6702| -------- | ------------- | ---- | ------------------------------------ |
6703| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
6704| callback | ErrorCallback | 是   | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。        |
6705
6706**错误码:**
6707
6708| 错误码ID | 错误信息                        |
6709| ------- | ------------------------------ |
6710| 401     | Parameter error.               |
6711
6712**示例:**
6713
6714```ts
6715import { socket } from '@kit.NetworkKit';
6716import { BusinessError } from '@kit.BasicServicesKit';
6717
6718let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6719let bindAddr: socket.NetAddress = {
6720  address: '192.168.xx.xxx',
6721  port: 8080
6722}
6723tls.bind(bindAddr, (err: BusinessError) => {
6724  if (err) {
6725    console.log('bind fail');
6726    return;
6727  }
6728  console.log('bind success');
6729  tls.on('error', (err: BusinessError) => {
6730    console.error("on error, err:" + JSON.stringify(err))
6731  });
6732});
6733```
6734
6735### off('error')<sup>9+</sup>
6736
6737off(type: 'error', callback?: ErrorCallback): void
6738
6739取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
6740
6741**系统能力**:SystemCapability.Communication.NetStack
6742
6743**参数:**
6744
6745| 参数名   | 类型          | 必填 | 说明                                 |
6746| -------- | ------------- | ---- | ------------------------------------ |
6747| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
6748| callback | ErrorCallback | 否   | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。                           |
6749
6750**错误码:**
6751
6752| 错误码ID | 错误信息                        |
6753| ------- | ------------------------------ |
6754| 401     | Parameter error.               |
6755
6756**示例:**
6757
6758```ts
6759import { socket } from '@kit.NetworkKit';
6760import { BusinessError } from '@kit.BasicServicesKit';
6761
6762let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6763let callback = (err: BusinessError) => {
6764  console.error("on error, err:" + JSON.stringify(err));
6765}
6766tls.on('error', callback);
6767// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6768tls.off('error', callback);
6769```
6770
6771### connect<sup>9+</sup>
6772
6773connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
6774
6775在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。
6776
6777**系统能力**:SystemCapability.Communication.NetStack
6778
6779**参数:**
6780
6781| 参数名   | 类型                                   | 必填 | 说明 |
6782| -------- | ---------------------------------------| ----| --------------- |
6783| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocket连接所需要的参数。|
6784| callback | AsyncCallback\<void\>                  | 是   | 回调函数,成功无返回,失败返回错误码、错误信息。|
6785
6786**错误码:**
6787
6788| 错误码ID | 错误信息                                      |
6789| ------- | -------------------------------------------- |
6790| 401     | Parameter error.                             |
6791| 2303104 | Interrupted system call.                     |
6792| 2303109 | Bad file number.                             |
6793| 2303111 | Resource temporarily unavailable. Try again. |
6794| 2303188 | Socket operation on non-socket.              |
6795| 2303191 | Incorrect socket protocol type.              |
6796| 2303198 | Address already in use.                      |
6797| 2303199 | Cannot assign requested address.             |
6798| 2303210 | Connection timed out.                        |
6799| 2303501 | SSL is null.                                 |
6800| 2303502 | An error occurred when reading data on the TLS socket.|
6801| 2303503 | An error occurred when writing data on the TLS socket.|
6802| 2303505 | An error occurred in the TLS system call.    |
6803| 2303506 | Failed to close the TLS connection.          |
6804| 2300002 | System internal error.                       |
6805| 2301206 | Socks5 failed to connect to the proxy server.  |
6806| 2301207 | Socks5 username or password is invalid.        |
6807| 2301208 | Socks5 failed to connect to the remote server. |
6808| 2301209 | Socks5 failed to negotiate the authentication method. |
6809| 2301210 | Socks5 failed to send the message.             |
6810| 2301211 | Socks5 failed to receive the message.          |
6811| 2301212 | Socks5 serialization error.                    |
6812| 2301213 | Socks5 deserialization error.                  |
6813
6814**示例:**
6815
6816```ts
6817import { socket } from '@kit.NetworkKit';
6818import { BusinessError } from '@kit.BasicServicesKit';
6819
6820let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
6821let bindAddr: socket.NetAddress = {
6822  address: '0.0.0.0',
6823}
6824tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6825  if (err) {
6826    console.error('bind fail');
6827    return;
6828  }
6829  console.log('bind success');
6830});
6831let twoWayNetAddr: socket.NetAddress = {
6832  address: '192.168.xx.xxx',
6833  port: 8080
6834}
6835let twoWaySecureOptions: socket.TLSSecureOptions = {
6836  key: "xxxx",
6837  cert: "xxxx",
6838  ca: ["xxxx"],
6839  password: "xxxx",
6840  protocols: socket.Protocol.TLSv12,
6841  useRemoteCipherPrefer: true,
6842  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6843  cipherSuite: "AES256-SHA256"
6844}
6845let tlsConnectOptions: socket.TLSConnectOptions = {
6846  address: twoWayNetAddr,
6847  secureOptions: twoWaySecureOptions,
6848  ALPNProtocols: ["spdy/1", "http/1.1"]
6849}
6850
6851tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => {
6852  console.error("connect callback error" + err);
6853});
6854
6855let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
6856tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6857  if (err) {
6858    console.error('bind fail');
6859    return;
6860  }
6861  console.log('bind success');
6862});
6863let oneWayNetAddr: socket.NetAddress = {
6864  address: '192.168.xx.xxx',
6865  port: 8080
6866}
6867let oneWaySecureOptions: socket.TLSSecureOptions = {
6868  ca: ["xxxx", "xxxx"],
6869  cipherSuite: "AES256-SHA256"
6870}
6871let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6872  address: oneWayNetAddr,
6873  secureOptions: oneWaySecureOptions
6874}
6875tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => {
6876  console.error("connect callback error" + err);
6877});
6878```
6879
6880**示例(设置socket代理):**
6881
6882```ts
6883import { socket } from '@kit.NetworkKit';
6884import { BusinessError } from '@kit.BasicServicesKit';
6885
6886let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // 双向认证
6887let bindAddr: socket.NetAddress = {
6888  address: '0.0.0.0',
6889}
6890tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6891  if (err) {
6892    console.error('bind fail');
6893    return;
6894  }
6895  console.log('bind success');
6896});
6897let twoWayNetAddr: socket.NetAddress = {
6898  address: '192.168.xx.xxx',
6899  port: 8080
6900}
6901let socks5Server: socket.NetAddress = {
6902  address: '192.168.xx.xxx',
6903  port: 8080
6904}
6905let twoWaySecureOptions: socket.TLSSecureOptions = {
6906  key: "xxxx",
6907  cert: "xxxx",
6908  ca: ["xxxx"],
6909  password: "xxxx",
6910  protocols: socket.Protocol.TLSv12,
6911  useRemoteCipherPrefer: true,
6912  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6913  cipherSuite: "AES256-SHA256"
6914}
6915let proxyOptions: socket.ProxyOptions = {
6916  type : 1,
6917  address: socks5Server,
6918  username: "xxx",
6919  password: "xxx"
6920}
6921let tlsConnectOptions: socket.TLSConnectOptions = {
6922  address: twoWayNetAddr,
6923  secureOptions: twoWaySecureOptions,
6924  ALPNProtocols: ["spdy/1", "http/1.1"],
6925  proxy: proxyOptions,
6926}
6927
6928tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => {
6929  console.error("connect callback error" + err);
6930});
6931
6932let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证
6933tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6934  if (err) {
6935    console.error('bind fail');
6936    return;
6937  }
6938  console.log('bind success');
6939});
6940let oneWayNetAddr: socket.NetAddress = {
6941  address: '192.168.xx.xxx',
6942  port: 8080
6943}
6944let oneWaySecureOptions: socket.TLSSecureOptions = {
6945  ca: ["xxxx", "xxxx"],
6946  cipherSuite: "AES256-SHA256"
6947}
6948let proxyOptions: socket.ProxyOptions = {
6949  type : 1,
6950  address: socks5Server,
6951  username: "xxx",
6952  password: "xxx"
6953}
6954let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6955  address: oneWayNetAddr,
6956  secureOptions: oneWaySecureOptions,
6957  proxy: proxyOptions,
6958}
6959tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => {
6960  console.error("connect callback error" + err);
6961});
6962```
6963
6964### connect<sup>9+</sup>
6965
6966connect(options: TLSConnectOptions): Promise\<void\>
6967
6968在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。
6969
6970**系统能力**:SystemCapability.Communication.NetStack
6971
6972**参数:**
6973
6974| 参数名   | 类型                                   | 必填 | 说明 |
6975| -------- | --------------------------------------| ----| --------------- |
6976| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。|
6977
6978**返回值:**
6979
6980| 类型                                        | 说明                          |
6981| ------------------------------------------- | ----------------------------- |
6982| Promise\<void\>                              | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。|
6983
6984**错误码:**
6985
6986| 错误码ID | 错误信息                                      |
6987| ------- | -------------------------------------------- |
6988| 401     | Parameter error.                             |
6989| 2303104 | Interrupted system call.                     |
6990| 2303109 | Bad file number.                             |
6991| 2303111 | Resource temporarily unavailable. Try again. |
6992| 2303188 | Socket operation on non-socket.              |
6993| 2303191 | Incorrect socket protocol type.              |
6994| 2303198 | Address already in use.                      |
6995| 2303199 | Cannot assign requested address.             |
6996| 2303210 | Connection timed out.                        |
6997| 2303501 | SSL is null.                                 |
6998| 2303502 | An error occurred when reading data on the TLS socket.|
6999| 2303503 | An error occurred when writing data on the TLS socket.|
7000| 2303505 | An error occurred in the TLS system call.    |
7001| 2303506 | Failed to close the TLS connection.          |
7002| 2300002 | System internal error.                       |
7003| 2301206 | Socks5 failed to connect to the proxy server.  |
7004| 2301207 | Socks5 username or password is invalid.        |
7005| 2301208 | Socks5 failed to connect to the remote server. |
7006| 2301209 | Socks5 failed to negotiate the authentication method. |
7007| 2301210 | Socks5 failed to send the message.             |
7008| 2301211 | Socks5 failed to receive the message.          |
7009| 2301212 | Socks5 serialization error.                    |
7010| 2301213 | Socks5 deserialization error.                  |
7011
7012**示例:**
7013
7014```ts
7015import { socket } from '@kit.NetworkKit';
7016import { BusinessError } from '@kit.BasicServicesKit';
7017
7018let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
7019let bindAddr: socket.NetAddress = {
7020  address: '0.0.0.0',
7021}
7022tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
7023  if (err) {
7024    console.error('bind fail');
7025    return;
7026  }
7027  console.log('bind success');
7028});
7029let twoWayNetAddr: socket.NetAddress = {
7030  address: '192.168.xx.xxx',
7031  port: 8080
7032}
7033let twoWaySecureOptions: socket.TLSSecureOptions = {
7034  key: "xxxx",
7035  cert: "xxxx",
7036  ca: ["xxxx"],
7037  password: "xxxx",
7038  protocols: socket.Protocol.TLSv12,
7039  useRemoteCipherPrefer: true,
7040  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7041  cipherSuite: "AES256-SHA256"
7042}
7043let tlsConnectOptions: socket.TLSConnectOptions = {
7044  address: twoWayNetAddr,
7045  secureOptions: twoWaySecureOptions,
7046  ALPNProtocols: ["spdy/1", "http/1.1"]
7047}
7048
7049tlsTwoWay.connect(tlsConnectOptions).then(() => {
7050  console.log("connect successfully");
7051}).catch((err: BusinessError) => {
7052  console.error("connect failed " + JSON.stringify(err));
7053});
7054
7055let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
7056tlsOneWay.bind(bindAddr, (err: BusinessError) => {
7057  if (err) {
7058    console.error('bind fail');
7059    return;
7060  }
7061  console.log('bind success');
7062});
7063let oneWayNetAddr: socket.NetAddress = {
7064  address: '192.168.xx.xxx',
7065  port: 8080
7066}
7067let oneWaySecureOptions: socket.TLSSecureOptions = {
7068  ca: ["xxxx", "xxxx"],
7069  cipherSuite: "AES256-SHA256"
7070}
7071let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
7072  address: oneWayNetAddr,
7073  secureOptions: oneWaySecureOptions
7074}
7075tlsOneWay.connect(tlsOneWayConnectOptions).then(() => {
7076  console.log("connect successfully");
7077}).catch((err: BusinessError) => {
7078  console.error("connect failed " + JSON.stringify(err));
7079});
7080```
7081
7082**示例(设置socket代理):**
7083
7084```ts
7085import { socket } from '@kit.NetworkKit';
7086import { BusinessError } from '@kit.BasicServicesKit';
7087
7088let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // 双向认证
7089let bindAddr: socket.NetAddress = {
7090  address: '0.0.0.0',
7091}
7092tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
7093  if (err) {
7094    console.error('bind fail');
7095    return;
7096  }
7097  console.log('bind success');
7098});
7099let twoWayNetAddr: socket.NetAddress = {
7100  address: '192.168.xx.xxx',
7101  port: 8080
7102}
7103let socks5Server: socket.NetAddress = {
7104  address: '192.168.xx.xxx',
7105  port: 8080
7106}
7107let twoWaySecureOptions: socket.TLSSecureOptions = {
7108  key: "xxxx",
7109  cert: "xxxx",
7110  ca: ["xxxx"],
7111  password: "xxxx",
7112  protocols: socket.Protocol.TLSv12,
7113  useRemoteCipherPrefer: true,
7114  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7115  cipherSuite: "AES256-SHA256"
7116}
7117let proxyOptions: socket.ProxyOptions = {
7118  type : 1,
7119  address: socks5Server,
7120  username: "xxx",
7121  password: "xxx"
7122}
7123let tlsConnectOptions: socket.TLSConnectOptions = {
7124  address: twoWayNetAddr,
7125  secureOptions: twoWaySecureOptions,
7126  ALPNProtocols: ["spdy/1", "http/1.1"],
7127  proxy: proxyOptions,
7128}
7129
7130tlsTwoWay.connect(tlsConnectOptions).then(() => {
7131  console.log("connect successfully");
7132}).catch((err: BusinessError) => {
7133  console.error("connect failed " + JSON.stringify(err));
7134});
7135
7136let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证
7137tlsOneWay.bind(bindAddr, (err: BusinessError) => {
7138  if (err) {
7139    console.error('bind fail');
7140    return;
7141  }
7142  console.log('bind success');
7143});
7144let oneWayNetAddr: socket.NetAddress = {
7145  address: '192.168.xx.xxx',
7146  port: 8080
7147}
7148let oneWaySecureOptions: socket.TLSSecureOptions = {
7149  ca: ["xxxx", "xxxx"],
7150  cipherSuite: "AES256-SHA256"
7151}
7152let proxyOptions: socket.ProxyOptions = {
7153  type : 1,
7154  address: socks5Server,
7155  username: "xxx",
7156  password: "xxx"
7157}
7158let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
7159  address: oneWayNetAddr,
7160  secureOptions: oneWaySecureOptions,
7161  proxy: proxyOptions,
7162}
7163tlsOneWay.connect(tlsOneWayConnectOptions).then(() => {
7164  console.log("connect successfully");
7165}).catch((err: BusinessError) => {
7166  console.error("connect failed " + JSON.stringify(err));
7167});
7168```
7169
7170### getRemoteAddress<sup>9+</sup>
7171
7172getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
7173
7174在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
7175
7176**系统能力**:SystemCapability.Communication.NetStack
7177
7178**参数:**
7179
7180| 参数名   | 类型                                              | 必填 | 说明       |
7181| -------- | ------------------------------------------------- | ---- | ---------- |
7182| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 |
7183
7184**错误码:**
7185
7186| 错误码ID | 错误信息                        |
7187| ------- | -----------------------------  |
7188| 2303188 | Socket operation on non-socket.|
7189| 2300002 | System internal error.         |
7190
7191**示例:**
7192
7193```ts
7194import { socket } from '@kit.NetworkKit';
7195import { BusinessError } from '@kit.BasicServicesKit';
7196
7197let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7198tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
7199  if (err) {
7200    console.error('getRemoteAddress fail');
7201    return;
7202  }
7203  console.log('getRemoteAddress success:' + JSON.stringify(data));
7204});
7205```
7206
7207### getRemoteAddress<sup>9+</sup>
7208
7209getRemoteAddress(): Promise\<NetAddress\>
7210
7211在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
7212
7213**系统能力**:SystemCapability.Communication.NetStack
7214
7215**返回值:**
7216
7217| 类型                                        | 说明                                        |
7218|  ------------------------------------------ |  ------------------------------------------ |
7219| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
7220
7221**错误码:**
7222
7223| 错误码ID | 错误信息                        |
7224| ------- | ------------------------------ |
7225| 2303188 | Socket operation on non-socket.|
7226| 2300002 | System internal error.         |
7227
7228**示例:**
7229
7230```ts
7231import { socket } from '@kit.NetworkKit';
7232import { BusinessError } from '@kit.BasicServicesKit';
7233
7234let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7235tls.getRemoteAddress().then(() => {
7236  console.log('getRemoteAddress success');
7237}).catch((err: BusinessError) => {
7238  console.error('getRemoteAddress fail');
7239});
7240```
7241
7242### getCertificate<sup>9+</sup>
7243
7244getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
7245
7246在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。
7247
7248**系统能力**:SystemCapability.Communication.NetStack
7249
7250**参数:**
7251
7252| 参数名   | 类型                                   | 必填 | 说明 |
7253| -------- | ----------------------------------------| ---- | ---------------|
7254| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>    | 是   | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。|
7255
7256**错误码:**
7257
7258| 错误码ID | 错误信息                        |
7259| ------- | ------------------------------ |
7260| 2303501 | SSL is null.                   |
7261| 2303504 | An error occurred when verifying the X.509 certificate.|
7262| 2300002 | System internal error.         |
7263
7264**示例:**
7265
7266```ts
7267import { socket } from '@kit.NetworkKit';
7268import { BusinessError } from '@kit.BasicServicesKit';
7269
7270let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7271tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
7272  if (err) {
7273    console.error("getCertificate callback error = " + err);
7274  } else {
7275    console.log("getCertificate callback = " + data);
7276  }
7277});
7278```
7279
7280### getCertificate<sup>9+</sup>
7281
7282getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
7283
7284在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。
7285
7286**系统能力**:SystemCapability.Communication.NetStack
7287
7288**返回值:**
7289
7290| 类型            | 说明                  |
7291| -------------- | -------------------- |
7292| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
7293
7294**错误码:**
7295
7296| 错误码ID | 错误信息                        |
7297| ------- | ------------------------------ |
7298| 2303501 | SSL is null.                   |
7299| 2303504 | An error occurred when verifying the X.509 certificate.|
7300| 2300002 | System internal error.         |
7301
7302**示例:**
7303
7304```ts
7305import { socket } from '@kit.NetworkKit';
7306import { BusinessError } from '@kit.BasicServicesKit';
7307import { util } from '@kit.ArkTS';
7308
7309let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7310tls.getCertificate().then((data: socket.X509CertRawData) => {
7311  const decoder = util.TextDecoder.create();
7312  const str = decoder.decodeToString(data.data);
7313  console.log("getCertificate: " + str);
7314}).catch((err: BusinessError) => {
7315  console.error("failed" + err);
7316});
7317```
7318
7319### getRemoteCertificate<sup>9+</sup>
7320
7321getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
7322
7323在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。
7324
7325**系统能力**:SystemCapability.Communication.NetStack
7326
7327**参数:**
7328
7329| 参数名    | 类型                                    | 必填  | 说明           |
7330| -------- | ----------------------------------------| ---- | ---------------|
7331| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>  | 是   | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 |
7332
7333**错误码:**
7334
7335| 错误码ID | 错误信息                        |
7336| ------- | ------------------------------ |
7337| 2303501 | SSL is null.                   |
7338| 2300002 | System internal error.         |
7339
7340**示例:**
7341
7342```ts
7343import { socket } from '@kit.NetworkKit';
7344import { BusinessError } from '@kit.BasicServicesKit';
7345import { util } from '@kit.ArkTS';
7346
7347let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7348tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
7349  if (err) {
7350    console.error("getRemoteCertificate callback error = " + err);
7351  } else {
7352    const decoder = util.TextDecoder.create();
7353    const str = decoder.decodeToString(data.data);
7354    console.log("getRemoteCertificate callback = " + str);
7355  }
7356});
7357```
7358
7359### getRemoteCertificate<sup>9+</sup>
7360
7361getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
7362
7363在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。
7364
7365**系统能力**:SystemCapability.Communication.NetStack
7366
7367**返回值:**
7368
7369| 类型            | 说明                  |
7370| -------------- | -------------------- |
7371| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 |
7372
7373**错误码:**
7374
7375| 错误码ID | 错误信息                        |
7376| ------- | ------------------------------ |
7377| 2303501 | SSL is null.                   |
7378| 2300002 | System internal error.         |
7379
7380**示例:**
7381
7382```ts
7383import { socket } from '@kit.NetworkKit';
7384import { BusinessError } from '@kit.BasicServicesKit';
7385import { util } from '@kit.ArkTS';
7386
7387let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7388tls.getRemoteCertificate().then((data: socket.X509CertRawData) => {
7389  const decoder = util.TextDecoder.create();
7390  const str = decoder.decodeToString(data.data);
7391  console.log("getRemoteCertificate:" + str);
7392}).catch((err: BusinessError) => {
7393  console.error("failed" + err);
7394});
7395```
7396
7397### getProtocol<sup>9+</sup>
7398
7399getProtocol(callback: AsyncCallback\<string\>): void
7400
7401在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
7402
7403**系统能力**:SystemCapability.Communication.NetStack
7404
7405**参数:**
7406
7407| 参数名   | 类型                                       | 必填 | 说明           |
7408| -------- | ----------------------------------------| ---- | ---------------|
7409| callback | AsyncCallback\<string\>                  | 是   | 回调函数,返回通信的协议。失败返回错误码、错误信息。|
7410
7411**错误码:**
7412
7413| 错误码ID | 错误信息                        |
7414| ------- | -----------------------------  |
7415| 2303501 | SSL is null.                   |
7416| 2303505 | An error occurred in the TLS system call. |
7417| 2300002 | System internal error.         |
7418
7419**示例:**
7420
7421```ts
7422import { socket } from '@kit.NetworkKit';
7423import { BusinessError } from '@kit.BasicServicesKit';
7424
7425let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7426tls.getProtocol((err: BusinessError, data: string) => {
7427  if (err) {
7428    console.error("getProtocol callback error = " + err);
7429  } else {
7430    console.log("getProtocol callback = " + data);
7431  }
7432});
7433```
7434
7435### getProtocol<sup>9+</sup>
7436
7437getProtocol():Promise\<string\>
7438
7439在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
7440
7441**系统能力**:SystemCapability.Communication.NetStack
7442
7443**返回值:**
7444
7445| 类型            | 说明                  |
7446| -------------- | -------------------- |
7447| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
7448
7449**错误码:**
7450
7451| 错误码ID | 错误信息                        |
7452| ------- | ------------------------------ |
7453| 2303501 | SSL is null.                   |
7454| 2303505 | An error occurred in the TLS system call. |
7455| 2300002 | System internal error.         |
7456
7457**示例:**
7458
7459```ts
7460import { socket } from '@kit.NetworkKit';
7461import { BusinessError } from '@kit.BasicServicesKit';
7462
7463let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7464tls.getProtocol().then((data: string) => {
7465  console.log(data);
7466}).catch((err: BusinessError) => {
7467  console.error("failed" + err);
7468});
7469```
7470
7471### getCipherSuite<sup>9+</sup>
7472
7473getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
7474
7475在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
7476
7477**系统能力**:SystemCapability.Communication.NetStack
7478
7479**参数:**
7480
7481| 参数名   | 类型                                     | 必填 | 说明 |
7482| -------- | ----------------------------------------| ---- | ---------------|
7483| callback | AsyncCallback\<Array\<string\>\>          | 是   | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 |
7484
7485**错误码:**
7486
7487| 错误码ID | 错误信息                        |
7488| ------- | ------------------------------ |
7489| 2303501 | SSL is null.                   |
7490| 2303502 | An error occurred when reading data on the TLS socket.|
7491| 2303505 | An error occurred in the TLS system call. |
7492| 2300002 | System internal error.         |
7493
7494**示例:**
7495
7496```ts
7497import { socket } from '@kit.NetworkKit';
7498import { BusinessError } from '@kit.BasicServicesKit';
7499
7500let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7501tls.getCipherSuite((err: BusinessError, data: Array<string>) => {
7502  if (err) {
7503    console.error("getCipherSuite callback error = " + err);
7504  } else {
7505    console.log("getCipherSuite callback = " + data);
7506  }
7507});
7508```
7509
7510### getCipherSuite<sup>9+</sup>
7511
7512getCipherSuite(): Promise\<Array\<string\>\>
7513
7514在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
7515
7516**系统能力**:SystemCapability.Communication.NetStack
7517
7518**返回值:**
7519
7520| 类型                    | 说明                  |
7521| ---------------------- | --------------------- |
7522| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
7523
7524**错误码:**
7525
7526| 错误码ID | 错误信息                        |
7527| ------- | ------------------------------ |
7528| 2303501 | SSL is null.                   |
7529| 2303502 | An error occurred when reading data on the TLS socket.|
7530| 2303505 | An error occurred in the TLS system call. |
7531| 2300002 | System internal error.         |
7532
7533**示例:**
7534
7535```ts
7536import { socket } from '@kit.NetworkKit';
7537import { BusinessError } from '@kit.BasicServicesKit';
7538
7539let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7540tls.getCipherSuite().then((data: Array<string>) => {
7541  console.log('getCipherSuite success:' + JSON.stringify(data));
7542}).catch((err: BusinessError) => {
7543  console.error("failed" + err);
7544});
7545```
7546
7547### getSignatureAlgorithms<sup>9+</sup>
7548
7549getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
7550
7551在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。
7552
7553**系统能力**:SystemCapability.Communication.NetStack
7554
7555**参数:**
7556
7557| 参数名   | 类型                                   | 必填 | 说明            |
7558| -------- | -------------------------------------| ---- | ---------------|
7559| callback | AsyncCallback\<Array\<string\>\>         | 是   | 回调函数,返回双方支持的签名算法。  |
7560
7561**错误码:**
7562
7563| 错误码ID | 错误信息                        |
7564| ------- | ------------------------------ |
7565| 2303501 | SSL is null.                   |
7566| 2300002 | System internal error.         |
7567
7568**示例:**
7569
7570```ts
7571import { socket } from '@kit.NetworkKit';
7572import { BusinessError } from '@kit.BasicServicesKit';
7573
7574let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7575tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
7576  if (err) {
7577    console.error("getSignatureAlgorithms callback error = " + err);
7578  } else {
7579    console.log("getSignatureAlgorithms callback = " + data);
7580  }
7581});
7582```
7583
7584### getSignatureAlgorithms<sup>9+</sup>
7585
7586getSignatureAlgorithms(): Promise\<Array\<string\>\>
7587
7588在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。
7589
7590**系统能力**:SystemCapability.Communication.NetStack
7591
7592**返回值:**
7593
7594| 类型                    | 说明                  |
7595| ---------------------- | -------------------- |
7596| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
7597
7598**错误码:**
7599
7600| 错误码ID | 错误信息                        |
7601| ------- | ------------------------------ |
7602| 2303501 | SSL is null.                   |
7603| 2300002 | System internal error.         |
7604
7605**示例:**
7606
7607```ts
7608import { socket } from '@kit.NetworkKit';
7609import { BusinessError } from '@kit.BasicServicesKit';
7610
7611let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7612tls.getSignatureAlgorithms().then((data: Array<string>) => {
7613  console.log("getSignatureAlgorithms success" + data);
7614}).catch((err: BusinessError) => {
7615  console.error("failed" + err);
7616});
7617```
7618
7619### getLocalAddress<sup>12+</sup>
7620
7621getLocalAddress(): Promise\<NetAddress\>
7622
7623获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。
7624
7625> **说明:**
7626> 在TLSSocketServer通信连接成功之后,才可调用此方法。
7627
7628**系统能力**:SystemCapability.Communication.NetStack
7629
7630**返回值:**
7631
7632| 类型            | 说明                                                 |
7633|  -------------- |  --------------------------------------------------- |
7634| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
7635
7636**错误码:**
7637
7638| 错误码ID | 错误信息                                    |
7639| -------- | ------------------------------------------- |
7640| 2300002  | System internal error.                      |
7641| 2301009  | Bad file descriptor.                            |
7642| 2303188  | Socket operation on non-socket. |
7643
7644**示例:**
7645
7646```ts
7647import { socket } from '@kit.NetworkKit';
7648import { BusinessError } from '@kit.BasicServicesKit';
7649
7650let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7651tls.getLocalAddress().then((localAddress: socket.NetAddress) => {
7652  console.info("Get success: " + JSON.stringify(localAddress));
7653}).catch((err: BusinessError) => {
7654  console.error("Get failed, error: " + JSON.stringify(err));
7655})
7656```
7657
7658### getSocketFd<sup>16+</sup>
7659
7660getSocketFd(): Promise\<number\>
7661
7662获取TLSSocket的文件描述符。使用Promise异步回调。
7663
7664> **说明:**
7665>
7666> bind方法调用成功后,才可调用此方法。
7667
7668**系统能力**:SystemCapability.Communication.NetStack
7669
7670**返回值:**
7671
7672| 类型                                             | 说明                                       |
7673| ----------------------------------------------- | ----------------------------------------- |
7674| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
7675
7676**示例:**
7677
7678```ts
7679import { socket } from '@kit.NetworkKit';
7680import { BusinessError } from '@kit.BasicServicesKit';
7681let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7682let bindAddr: socket.NetAddress = {
7683  address: '192.168.xx.xxx',
7684  port: 8080
7685}
7686tls.bind(bindAddr, (err: BusinessError) => {
7687  if (err) {
7688    console.error('bind fail');
7689    return;
7690  }
7691  console.log('bind success');
7692});
7693tls.getSocketFd().then((data: number) => {
7694  console.info("tls socket fd: " + data);
7695})
7696```
7697
7698### send<sup>9+</sup>
7699
7700send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void
7701
7702在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。
7703
7704**系统能力**:SystemCapability.Communication.NetStack
7705
7706**参数:**
7707
7708| 参数名    | 类型                          | 必填 | 说明            |
7709| -------- | -----------------------------| ---- | ---------------|
7710|   data   | string \| ArrayBuffer                      | 是   | 发送的数据内容。   |
7711| callback | AsyncCallback\<void\>         | 是   | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 |
7712
7713**错误码:**
7714
7715| 错误码ID | 错误信息                                      |
7716| ------- | -------------------------------------------- |
7717| 401     | Parameter error.                             |
7718| 2303501 | SSL is null.                                 |
7719| 2303503 | An error occurred when writing data on the TLS socket.|
7720| 2303505 | An error occurred in the TLS system call.    |
7721| 2303506 | Failed to close the TLS connection.          |
7722| 2300002 | System internal error.                       |
7723
7724**示例:**
7725
7726```ts
7727import { socket } from '@kit.NetworkKit';
7728import { BusinessError } from '@kit.BasicServicesKit';
7729
7730let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7731tls.send("xxxx", (err: BusinessError) => {
7732  if (err) {
7733    console.error("send callback error = " + err);
7734  } else {
7735    console.log("send success");
7736  }
7737});
7738```
7739
7740### send<sup>9+</sup>
7741
7742send(data: string \| ArrayBuffer): Promise\<void\>
7743
7744在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
7745
7746**系统能力**:SystemCapability.Communication.NetStack
7747
7748**参数:**
7749
7750| 参数名    | 类型                          | 必填 | 说明            |
7751| -------- | -----------------------------| ---- | ---------------|
7752|   data   | string \| ArrayBuffer                       | 是   | 发送的数据内容。   |
7753
7754**错误码:**
7755
7756| 错误码ID | 错误信息                                      |
7757| ------- | -------------------------------------------- |
7758| 401     | Parameter error.                             |
7759| 2303501 | SSL is null.                                 |
7760| 2303503 | An error occurred when writing data on the TLS socket.|
7761| 2303505 | An error occurred in the TLS system call.    |
7762| 2303506 | Failed to close the TLS connection.          |
7763| 2300002 | System internal error.                       |
7764
7765**返回值:**
7766
7767| 类型           | 说明                  |
7768| -------------- | -------------------- |
7769| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
7770
7771**示例:**
7772
7773```ts
7774import { socket } from '@kit.NetworkKit';
7775import { BusinessError } from '@kit.BasicServicesKit';
7776
7777let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7778tls.send("xxxx").then(() => {
7779  console.log("send success");
7780}).catch((err: BusinessError) => {
7781  console.error("failed" + err);
7782});
7783```
7784
7785### close<sup>9+</sup>
7786
7787close(callback: AsyncCallback\<void\>): void
7788
7789在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。
7790
7791**系统能力**:SystemCapability.Communication.NetStack
7792
7793**参数:**
7794
7795| 参数名    | 类型                          | 必填 | 说明            |
7796| -------- | -----------------------------| ---- | ---------------|
7797| callback | AsyncCallback\<void\>         | 是   | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 |
7798
7799**错误码:**
7800
7801| 错误码ID | 错误信息                                      |
7802| ------- | -------------------------------------------- |
7803| 401 | Parameter error.                                 |
7804| 2303501 | SSL is null.                                 |
7805| 2303505 | An error occurred in the TLS system call.    |
7806| 2303506 | Failed to close the TLS connection.          |
7807| 2300002 | System internal error.                       |
7808
7809**示例:**
7810
7811```ts
7812import { socket } from '@kit.NetworkKit';
7813import { BusinessError } from '@kit.BasicServicesKit';
7814
7815let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7816tls.close((err: BusinessError) => {
7817  if (err) {
7818    console.error("close callback error = " + err);
7819  } else {
7820    console.log("close success");
7821  }
7822});
7823```
7824
7825### close<sup>9+</sup>
7826
7827close(): Promise\<void\>
7828
7829在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。
7830
7831**系统能力**:SystemCapability.Communication.NetStack
7832
7833**返回值:**
7834
7835| 类型           | 说明                  |
7836| -------------- | -------------------- |
7837| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 |
7838
7839**错误码:**
7840
7841| 错误码ID | 错误信息                                      |
7842| ------- | -------------------------------------------- |
7843| 401 | Parameter error.                                 |
7844| 2303501 | SSL is null.                                 |
7845| 2303505 | An error occurred in the TLS system call.    |
7846| 2303506 | Failed to close the TLS connection.          |
7847| 2300002 | System internal error.                       |
7848
7849**示例:**
7850
7851```ts
7852import { socket } from '@kit.NetworkKit';
7853import { BusinessError } from '@kit.BasicServicesKit';
7854
7855let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7856tls.close().then(() => {
7857  console.log("close success");
7858}).catch((err: BusinessError) => {
7859  console.error("failed" + err);
7860});
7861```
7862
7863## TLSConnectOptions<sup>9+</sup>
7864
7865TLS连接的操作。
7866
7867**系统能力**:SystemCapability.Communication.NetStack
7868
7869| 名称          | 类型                                     | 必填 | 说明            |
7870| -------------- | ------------------------------------- | ---  |-------------- |
7871| address        | [NetAddress](#netaddress)             | 是  |  网关地址。       |
7872| secureOptions  | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。|
7873| ALPNProtocols  | Array\<string\>                         | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。      |
7874| skipRemoteValidation<sup>12+</sup>  | boolean                         | 否 | 是否跳过对服务端进行证书认证,默认为false。true:跳过对服务端进行证书认证;false:不跳过对服务端进行证书认证。      |
7875| proxy<sup>18+</sup>   | [ProxyOptions](#proxyoptions18) | 否   | 使用的代理信息,默认不使用代理。 |
7876
7877## TLSSecureOptions<sup>9+</sup>
7878
7879TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。
7880
7881**系统能力**:SystemCapability.Communication.NetStack
7882
7883| 名称                 | 类型                                                    | 必填 | 说明                                |
7884| --------------------- | ------------------------------------------------------ | --- |----------------------------------- |
7885| ca                    | string \| Array\<string\> | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书<sup>12+</sup>。 |
7886| cert                  | string                                                  | 否 | 本地客户端的数字证书。                 |
7887| key                   | string                                                  | 否 | 本地数字证书的私钥。                   |
7888| password                | string                                                  | 否 | 读取私钥的密码。                      |
7889| protocols             | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。                  |
7890| useRemoteCipherPrefer | boolean                                                 | 否 | 优先使用对等方的密码套件。true:优先使用对等方的密码套件;false:不优先使用对等方的密码套件。        |
7891| signatureAlgorithms   | string                                                 | 否 | 通信过程中的签名算法,默认为"" 。              |
7892| cipherSuite           | string                                                 | 否 | 通信过程中的加密套件,默认为"" 。              |
7893| isBidirectionalAuthentication<sup>12+</sup>           | boolean                                                 | 否 | 用于设置双向认证,默认为false。true:设置双向认证;false:不设置双向认证。              |
7894
7895## Protocol<sup>9+</sup>
7896
7897TLS通信的协议版本。
7898
7899**系统能力**:SystemCapability.Communication.NetStack
7900
7901| 名称      |    值    | 说明                |
7902| --------- | --------- |------------------ |
7903| TLSv12    | "TLSv1.2" | 使用TLSv1.2协议通信。 |
7904| TLSv13    | "TLSv1.3" | 使用TLSv1.3协议通信。 |
7905
7906## X509CertRawData<sup>9+</sup>
7907
7908type X509CertRawData = cert.EncodingBlob
7909
7910存储证书的数据。
7911
7912**系统能力**:SystemCapability.Communication.NetStack
7913
7914|       类型       |            说明             |
7915| ---------------- | --------------------------- |
7916| cert.EncodingBlob | 提供证书编码blob类型。     |
7917
7918## socket.constructTLSSocketServerInstance<sup>10+</sup>
7919
7920constructTLSSocketServerInstance(): TLSSocketServer
7921
7922创建并返回一个TLSSocketServer对象。
7923
7924**系统能力**:SystemCapability.Communication.NetStack
7925
7926**返回值:**
7927
7928| 类型                                  | 说明                          |
7929|  ------------------------------------ |  ---------------------------- |
7930| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 |
7931
7932**示例:**
7933
7934```ts
7935import { socket } from '@kit.NetworkKit';
7936import { BusinessError } from '@kit.BasicServicesKit';
7937
7938let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7939```
7940
7941## TLSSocketServer<sup>10+</sup>
7942
7943TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。
7944
7945### listen<sup>10+</sup>
7946
7947listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
7948
7949绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。
7950
7951**注意:**IP地址设置为0.0.0.0时,可以监听本机所有地址。
7952
7953**需要权限**:ohos.permission.INTERNET
7954
7955**系统能力**:SystemCapability.Communication.NetStack
7956
7957**参数:**
7958
7959| 参数名   | 类型                                     | 必填 | 说明                                             |
7960| -------- | ---------------------------------------- | ---- | ------------------------------------------------ |
7961| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocketServer连接所需要的参数。                |
7962| callback | AsyncCallback\<void\>                     | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
7963
7964**错误码:**
7965
7966| 错误码ID | 错误信息                                    |
7967| -------- | ------------------------------------------- |
7968| 401      | Parameter error.                            |
7969| 201      | Permission denied.                          |
7970| 2300002  | System internal error.                      |
7971| 2303109  | Bad file number.                            |
7972| 2303111  | Resource temporarily unavailable. Try again.|
7973| 2303198  | Address already in use.                     |
7974| 2303199  | Cannot assign requested address.            |
7975| 2303501  | SSL is null.                                |
7976| 2303502  | An error occurred when reading data on the TLS socket.|
7977| 2303503  | An error occurred when writing data on the TLS socket.|
7978| 2303505  | An error occurred in the TLS system call.   |
7979| 2303506  | Failed to close the TLS connection.         |
7980
7981**示例:**
7982
7983```ts
7984import { socket } from '@kit.NetworkKit';
7985import { BusinessError } from '@kit.BasicServicesKit';
7986
7987let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7988let netAddress: socket.NetAddress = {
7989  address: '192.168.xx.xxx',
7990  port: 8080
7991}
7992let tlsSecureOptions: socket.TLSSecureOptions = {
7993  key: "xxxx",
7994  cert: "xxxx",
7995  ca: ["xxxx"],
7996  password: "xxxx",
7997  protocols: socket.Protocol.TLSv12,
7998  useRemoteCipherPrefer: true,
7999  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8000  cipherSuite: "AES256-SHA256"
8001}
8002let tlsConnectOptions: socket.TLSConnectOptions = {
8003  address: netAddress,
8004  secureOptions: tlsSecureOptions,
8005  ALPNProtocols: ["spdy/1", "http/1.1"],
8006  skipRemoteValidation: false
8007}
8008tlsServer.listen(tlsConnectOptions, (err: BusinessError) => {
8009  console.error("listen callback error" + err);
8010});
8011```
8012
8013### listen<sup>10+</sup>
8014
8015listen(options: TLSConnectOptions): Promise\<void\>
8016
8017绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。
8018
8019**需要权限**:ohos.permission.INTERNET
8020
8021**系统能力**:SystemCapability.Communication.NetStack
8022
8023**参数:**
8024
8025| 参数名  | 类型                                     | 必填 | 说明               |
8026| ------- | ---------------------------------------- | ---- | ------------------ |
8027| options | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。 |
8028
8029**返回值:**
8030
8031| 类型            | 说明                                                      |
8032| --------------- | --------------------------------------------------------- |
8033| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
8034
8035**错误码:**
8036
8037| 错误码ID | 错误信息                                    |
8038| -------- | ------------------------------------------- |
8039| 401      | Parameter error.                            |
8040| 201      | Permission denied.                          |
8041| 2300002  | System internal error.                      |
8042| 2303109  | Bad file number.                            |
8043| 2303111  | Resource temporarily unavailable. Try again.|
8044| 2303198  | Address already in use.                     |
8045| 2303199  | Cannot assign requested address.            |
8046| 2303501  | SSL is null.                                |
8047| 2303502  | An error occurred when reading data on the TLS socket.|
8048| 2303503  | An error occurred when writing data on the TLS socket.|
8049| 2303505  | An error occurred in the TLS system call.   |
8050| 2303506  | Failed to close the TLS connection.         |
8051
8052**示例:**
8053
8054```ts
8055import { socket } from '@kit.NetworkKit';
8056import { BusinessError } from '@kit.BasicServicesKit';
8057
8058let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8059let netAddress: socket.NetAddress = {
8060  address: '192.168.xx.xxx',
8061  port: 8080
8062}
8063let tlsSecureOptions: socket.TLSSecureOptions = {
8064  key: "xxxx",
8065  cert: "xxxx",
8066  ca: ["xxxx"],
8067  password: "xxxx",
8068  protocols: socket.Protocol.TLSv12,
8069  useRemoteCipherPrefer: true,
8070  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8071  cipherSuite: "AES256-SHA256"
8072}
8073let tlsConnectOptions: socket.TLSConnectOptions = {
8074  address: netAddress,
8075  secureOptions: tlsSecureOptions,
8076  ALPNProtocols: ["spdy/1", "http/1.1"],
8077  skipRemoteValidation: false
8078}
8079tlsServer.listen(tlsConnectOptions).then(() => {
8080  console.log("listen callback success");
8081}).catch((err: BusinessError) => {
8082  console.error("failed: " + JSON.stringify(err));
8083});
8084```
8085
8086### getState<sup>10+</sup>
8087
8088getState(callback: AsyncCallback\<SocketStateBase\>): void
8089
8090在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。
8091
8092> **说明:**
8093> listen方法调用成功后,才可调用此方法。
8094
8095**系统能力**:SystemCapability.Communication.NetStack
8096
8097**参数:**
8098
8099| 参数名   | 类型                                                 | 必填 | 说明                                                         |
8100| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
8101| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 |
8102
8103**错误码:**
8104
8105| 错误码ID | 错误信息                        |
8106| -------- | ------------------------------- |
8107| 401      | Parameter error.                |
8108| 2303188  | Socket operation on non-socket. |
8109| 2300002  | System internal error.          |
8110
8111**示例:**
8112
8113```ts
8114import { socket } from '@kit.NetworkKit';
8115import { BusinessError } from '@kit.BasicServicesKit';
8116
8117let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8118let netAddress: socket.NetAddress = {
8119  address: '192.168.xx.xxx',
8120  port: 8080
8121}
8122let tlsSecureOptions: socket.TLSSecureOptions = {
8123  key: "xxxx",
8124  cert: "xxxx",
8125  ca: ["xxxx"],
8126  password: "xxxx",
8127  protocols: socket.Protocol.TLSv12,
8128  useRemoteCipherPrefer: true,
8129  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8130  cipherSuite: "AES256-SHA256"
8131}
8132let tlsConnectOptions: socket.TLSConnectOptions = {
8133  address: netAddress,
8134  secureOptions: tlsSecureOptions,
8135  ALPNProtocols: ["spdy/1", "http/1.1"]
8136}
8137tlsServer.listen(tlsConnectOptions).then(() => {
8138  console.log("listen callback success");
8139}).catch((err: BusinessError) => {
8140  console.error("failed: " + JSON.stringify(err));
8141});
8142tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
8143  if (err) {
8144    console.error('getState fail');
8145    return;
8146  }
8147  console.log('getState success:' + JSON.stringify(data));
8148});
8149```
8150
8151### getState<sup>10+</sup>
8152
8153getState(): Promise\<SocketStateBase\>
8154
8155在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。
8156
8157> **说明:**
8158> listen方法调用成功后,才可调用此方法。
8159
8160**系统能力**:SystemCapability.Communication.NetStack
8161
8162**返回值:**
8163
8164| 类型                                           | 说明                                                         |
8165|  --------------------------------------------- |  ----------------------------------------------------------- |
8166| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 |
8167
8168**错误码:**
8169
8170| 错误码ID | 错误信息                        |
8171| -------- | ------------------------------- |
8172| 2303188  | Socket operation on non-socket. |
8173| 2300002  | System internal error.          |
8174
8175**示例:**
8176
8177```ts
8178import { socket } from '@kit.NetworkKit';
8179import { BusinessError } from '@kit.BasicServicesKit';
8180
8181let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8182let netAddress: socket.NetAddress = {
8183  address: '192.168.xx.xxx',
8184  port: 8080
8185}
8186let tlsSecureOptions: socket.TLSSecureOptions = {
8187  key: "xxxx",
8188  cert: "xxxx",
8189  ca: ["xxxx"],
8190  password: "xxxx",
8191  protocols: socket.Protocol.TLSv12,
8192  useRemoteCipherPrefer: true,
8193  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8194  cipherSuite: "AES256-SHA256"
8195}
8196let tlsConnectOptions: socket.TLSConnectOptions = {
8197  address: netAddress,
8198  secureOptions: tlsSecureOptions,
8199  ALPNProtocols: ["spdy/1", "http/1.1"]
8200}
8201tlsServer.listen(tlsConnectOptions).then(() => {
8202  console.log("listen callback success");
8203}).catch((err: BusinessError) => {
8204  console.error("failed: " + JSON.stringify(err));
8205});
8206tlsServer.getState().then(() => {
8207  console.log('getState success');
8208}).catch((err: BusinessError) => {
8209  console.error('getState fail');
8210});
8211```
8212
8213### setExtraOptions<sup>10+</sup>
8214
8215setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
8216
8217在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。
8218
8219> **说明:**
8220> listen方法调用成功后,才可调用此方法。
8221
8222**系统能力**:SystemCapability.Communication.NetStack
8223
8224**参数:**
8225
8226| 参数名   | 类型                                 | 必填 | 说明                                             |
8227| -------- | ------------------------------------ | ---- | ------------------------------------------------ |
8228| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。                  |
8229| callback | AsyncCallback\<void\>                | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。 |
8230
8231**错误码:**
8232
8233| 错误码ID | 错误信息                        |
8234| -------- | ------------------------------- |
8235| 401      | Parameter error.                |
8236| 2303188  | Socket operation on non-socket. |
8237| 2300002  | System internal error.          |
8238
8239**示例:**
8240
8241```ts
8242import { socket } from '@kit.NetworkKit';
8243import { BusinessError } from '@kit.BasicServicesKit';
8244
8245let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8246let netAddress: socket.NetAddress = {
8247  address: '192.168.xx.xxx',
8248  port: 8080
8249}
8250let tlsSecureOptions: socket.TLSSecureOptions = {
8251  key: "xxxx",
8252  cert: "xxxx",
8253  ca: ["xxxx"],
8254  password: "xxxx",
8255  protocols: socket.Protocol.TLSv12,
8256  useRemoteCipherPrefer: true,
8257  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8258  cipherSuite: "AES256-SHA256"
8259}
8260let tlsConnectOptions: socket.TLSConnectOptions = {
8261  address: netAddress,
8262  secureOptions: tlsSecureOptions,
8263  ALPNProtocols: ["spdy/1", "http/1.1"]
8264}
8265tlsServer.listen(tlsConnectOptions).then(() => {
8266  console.log("listen callback success");
8267}).catch((err: BusinessError) => {
8268  console.error("failed: " + JSON.stringify(err));
8269});
8270
8271interface SocketLinger {
8272  on: boolean;
8273  linger: number;
8274}
8275
8276let tcpExtraOptions: socket.TCPExtraOptions = {
8277  keepAlive: true,
8278  OOBInline: true,
8279  TCPNoDelay: true,
8280  socketLinger: { on: true, linger: 10 } as SocketLinger,
8281  receiveBufferSize: 8192,
8282  sendBufferSize: 8192,
8283  reuseAddress: true,
8284  socketTimeout: 3000
8285}
8286tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
8287  if (err) {
8288    console.error('setExtraOptions fail');
8289    return;
8290  }
8291  console.log('setExtraOptions success');
8292});
8293```
8294
8295### setExtraOptions<sup>10+</sup>
8296
8297setExtraOptions(options: TCPExtraOptions): Promise\<void\>
8298
8299在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。
8300
8301> **说明:**
8302> listen方法调用成功后,才可调用此方法。
8303
8304**系统能力**:SystemCapability.Communication.NetStack
8305
8306**参数:**
8307
8308| 参数名  | 类型                                 | 必填 | 说明                            |
8309| ------- | ------------------------------------ | ---- | ------------------------------- |
8310| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。 |
8311
8312**返回值:**
8313
8314| 类型            | 说明                                                      |
8315|  -------------- |  -------------------------------------------------------- |
8316| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
8317
8318**错误码:**
8319
8320| 错误码ID | 错误信息                        |
8321| -------- | ------------------------------- |
8322| 401      | Parameter error.                |
8323| 2303188  | Socket operation on non-socket. |
8324| 2300002  | System internal error.          |
8325
8326**示例:**
8327
8328```ts
8329import { socket } from '@kit.NetworkKit';
8330import { BusinessError } from '@kit.BasicServicesKit';
8331
8332let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8333let netAddress: socket.NetAddress = {
8334  address: '192.168.xx.xxx',
8335  port: 8080
8336}
8337let tlsSecureOptions: socket.TLSSecureOptions = {
8338  key: "xxxx",
8339  cert: "xxxx",
8340  ca: ["xxxx"],
8341  password: "xxxx",
8342  protocols: socket.Protocol.TLSv12,
8343  useRemoteCipherPrefer: true,
8344  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8345  cipherSuite: "AES256-SHA256"
8346}
8347let tlsConnectOptions: socket.TLSConnectOptions = {
8348  address: netAddress,
8349  secureOptions: tlsSecureOptions,
8350  ALPNProtocols: ["spdy/1", "http/1.1"]
8351}
8352tlsServer.listen(tlsConnectOptions).then(() => {
8353  console.log("listen callback success");
8354}).catch((err: BusinessError) => {
8355  console.error("failed: " + JSON.stringify(err));
8356});
8357
8358interface SocketLinger {
8359  on: boolean;
8360  linger: number;
8361}
8362
8363let tcpExtraOptions: socket.TCPExtraOptions = {
8364  keepAlive: true,
8365  OOBInline: true,
8366  TCPNoDelay: true,
8367  socketLinger: { on: true, linger: 10 } as SocketLinger,
8368  receiveBufferSize: 8192,
8369  sendBufferSize: 8192,
8370  reuseAddress: true,
8371  socketTimeout: 3000
8372}
8373tlsServer.setExtraOptions(tcpExtraOptions).then(() => {
8374  console.log('setExtraOptions success');
8375}).catch((err: BusinessError) => {
8376  console.error('setExtraOptions fail');
8377});
8378```
8379
8380### getCertificate<sup>10+</sup>
8381
8382getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
8383
8384在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。
8385
8386> **说明:**
8387> listen方法调用成功后,才可调用此方法。
8388
8389**系统能力**:SystemCapability.Communication.NetStack
8390
8391**参数:**
8392
8393| 参数名   | 类型                                                  | 必填 | 说明                                                     |
8394| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- |
8395| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 |
8396
8397**错误码:**
8398
8399| 错误码ID | 错误信息               |
8400| -------- | ---------------------- |
8401| 401      | Parameter error.       |
8402| 2303501  | SSL is null.           |
8403| 2303504  | An error occurred when verifying the X.509 certificate. |
8404| 2300002  | System internal error. |
8405
8406**示例:**
8407
8408```ts
8409import { socket } from '@kit.NetworkKit';
8410import { BusinessError } from '@kit.BasicServicesKit';
8411import { util } from '@kit.ArkTS';
8412
8413let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8414let netAddress: socket.NetAddress = {
8415  address: '192.168.xx.xxx',
8416  port: 8080
8417}
8418let tlsSecureOptions: socket.TLSSecureOptions = {
8419  key: "xxxx",
8420  cert: "xxxx",
8421  ca: ["xxxx"],
8422  password: "xxxx",
8423  protocols: socket.Protocol.TLSv12,
8424  useRemoteCipherPrefer: true,
8425  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8426  cipherSuite: "AES256-SHA256"
8427}
8428let tlsConnectOptions: socket.TLSConnectOptions = {
8429  address: netAddress,
8430  secureOptions: tlsSecureOptions,
8431  ALPNProtocols: ["spdy/1", "http/1.1"]
8432}
8433tlsServer.listen(tlsConnectOptions).then(() => {
8434  console.log("listen callback success");
8435}).catch((err: BusinessError) => {
8436  console.error("failed: " + JSON.stringify(err));
8437});
8438tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
8439  if (err) {
8440    console.error("getCertificate callback error = " + err);
8441  } else {
8442    const decoder = util.TextDecoder.create();
8443    const str = decoder.decodeToString(data.data);
8444    console.log("getCertificate callback: " + str);
8445  }
8446});
8447```
8448
8449### getCertificate<sup>10+</sup>
8450
8451getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
8452
8453在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。
8454
8455> **说明:**
8456> listen方法调用成功后,才可调用此方法。
8457
8458**系统能力**:SystemCapability.Communication.NetStack
8459
8460**返回值:**
8461
8462| 类型                                            | 说明                                                         |
8463| ----------------------------------------------- | ------------------------------------------------------------ |
8464| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
8465
8466**错误码:**
8467
8468| 错误码ID | 错误信息               |
8469| -------- | ---------------------- |
8470| 2303501  | SSL is null.           |
8471| 2303504  | An error occurred when verifying the X.509 certificate. |
8472| 2300002  | System internal error. |
8473
8474**示例:**
8475
8476```ts
8477import { socket } from '@kit.NetworkKit';
8478import { BusinessError } from '@kit.BasicServicesKit';
8479import { util } from '@kit.ArkTS';
8480
8481let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8482let netAddress: socket.NetAddress = {
8483  address: '192.168.xx.xxx',
8484  port: 8080
8485}
8486let tlsSecureOptions: socket.TLSSecureOptions = {
8487  key: "xxxx",
8488  cert: "xxxx",
8489  ca: ["xxxx"],
8490  password: "xxxx",
8491  protocols: socket.Protocol.TLSv12,
8492  useRemoteCipherPrefer: true,
8493  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8494  cipherSuite: "AES256-SHA256"
8495}
8496let tlsConnectOptions: socket.TLSConnectOptions = {
8497  address: netAddress,
8498  secureOptions: tlsSecureOptions,
8499  ALPNProtocols: ["spdy/1", "http/1.1"]
8500}
8501tlsServer.listen(tlsConnectOptions).then(() => {
8502  console.log("listen callback success");
8503}).catch((err: BusinessError) => {
8504  console.error("failed: " + JSON.stringify(err));
8505});
8506tlsServer.getCertificate().then((data: socket.X509CertRawData) => {
8507  const decoder = util.TextDecoder.create();
8508  const str = decoder.decodeToString(data.data);
8509  console.log("getCertificate: " + str);
8510}).catch((err: BusinessError) => {
8511  console.error("failed" + err);
8512});
8513```
8514
8515### getProtocol<sup>10+</sup>
8516
8517getProtocol(callback: AsyncCallback\<string\>): void
8518
8519在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
8520
8521> **说明:**
8522> listen方法调用成功后,才可调用此方法。
8523
8524**系统能力**:SystemCapability.Communication.NetStack
8525
8526**参数:**
8527
8528| 参数名   | 类型                    | 必填 | 说明                                                 |
8529| -------- | ----------------------- | ---- | ---------------------------------------------------- |
8530| callback | AsyncCallback\<string\> | 是   | 回调函数,返回通信的协议。失败返回错误码、错误信息。 |
8531
8532**错误码:**
8533
8534| 错误码ID | 错误信息                               |
8535| -------- | -------------------------------------- |
8536| 401      | Parameter error.                       |
8537| 2303501  | SSL is null.                           |
8538| 2303505  | An error occurred in the TLS system call. |
8539| 2300002  | System internal error.                 |
8540
8541**示例:**
8542
8543```ts
8544import { socket } from '@kit.NetworkKit';
8545import { BusinessError } from '@kit.BasicServicesKit';
8546
8547let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8548let netAddress: socket.NetAddress = {
8549  address: '192.168.xx.xxx',
8550  port: 8080
8551}
8552let tlsSecureOptions: socket.TLSSecureOptions = {
8553  key: "xxxx",
8554  cert: "xxxx",
8555  ca: ["xxxx"],
8556  password: "xxxx",
8557  protocols: socket.Protocol.TLSv12,
8558  useRemoteCipherPrefer: true,
8559  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8560  cipherSuite: "AES256-SHA256"
8561}
8562let tlsConnectOptions: socket.TLSConnectOptions = {
8563  address: netAddress,
8564  secureOptions: tlsSecureOptions,
8565  ALPNProtocols: ["spdy/1", "http/1.1"]
8566}
8567tlsServer.listen(tlsConnectOptions).then(() => {
8568  console.log("listen callback success");
8569}).catch((err: BusinessError) => {
8570  console.error("failed: " + JSON.stringify(err));
8571});
8572tlsServer.getProtocol((err: BusinessError, data: string) => {
8573  if (err) {
8574    console.error("getProtocol callback error = " + err);
8575  } else {
8576    console.log("getProtocol callback = " + data);
8577  }
8578});
8579```
8580
8581### getProtocol<sup>10+</sup>
8582
8583getProtocol():Promise\<string\>
8584
8585在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
8586
8587> **说明:**
8588> listen方法调用成功后,才可调用此方法。
8589
8590**系统能力**:SystemCapability.Communication.NetStack
8591
8592**返回值:**
8593
8594| 类型              | 说明                                                    |
8595| ----------------- | ------------------------------------------------------- |
8596| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
8597
8598**错误码:**
8599
8600| 错误码ID | 错误信息                               |
8601| -------- | -------------------------------------- |
8602| 2303501  | SSL is null.                           |
8603| 2303505  | An error occurred in the TLS system call. |
8604| 2300002  | System internal error.                 |
8605
8606**示例:**
8607
8608```ts
8609import { socket } from '@kit.NetworkKit';
8610import { BusinessError } from '@kit.BasicServicesKit';
8611
8612let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8613let netAddress: socket.NetAddress = {
8614  address: '192.168.xx.xxx',
8615  port: 8080
8616}
8617let tlsSecureOptions: socket.TLSSecureOptions = {
8618  key: "xxxx",
8619  cert: "xxxx",
8620  ca: ["xxxx"],
8621  password: "xxxx",
8622  protocols: socket.Protocol.TLSv12,
8623  useRemoteCipherPrefer: true,
8624  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8625  cipherSuite: "AES256-SHA256"
8626}
8627let tlsConnectOptions: socket.TLSConnectOptions = {
8628  address: netAddress,
8629  secureOptions: tlsSecureOptions,
8630  ALPNProtocols: ["spdy/1", "http/1.1"]
8631}
8632tlsServer.listen(tlsConnectOptions).then(() => {
8633  console.log("listen callback success");
8634}).catch((err: BusinessError) => {
8635  console.error("failed: " + JSON.stringify(err));
8636});
8637tlsServer.getProtocol().then((data: string) => {
8638  console.log(data);
8639}).catch((err: BusinessError) => {
8640  console.error("failed" + err);
8641});
8642```
8643
8644### getLocalAddress<sup>12+</sup>
8645
8646getLocalAddress(): Promise\<NetAddress\>
8647
8648获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。
8649
8650> **说明:**
8651> 在TLSSocketServer通信连接成功之后,才可调用此方法。
8652
8653**系统能力**:SystemCapability.Communication.NetStack
8654
8655**返回值:**
8656
8657| 类型            | 说明                                                 |
8658|  -------------- |  --------------------------------------------------- |
8659| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
8660
8661**错误码:**
8662
8663| 错误码ID | 错误信息                                    |
8664| -------- | ------------------------------------------- |
8665| 2300002  | System internal error.                      |
8666| 2301009  | Bad file descriptor.                            |
8667| 2303188  | Socket operation on non-socket. |
8668
8669**示例:**
8670
8671```ts
8672import { socket } from '@kit.NetworkKit';
8673import { BusinessError } from '@kit.BasicServicesKit';
8674
8675let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8676tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
8677  console.info("Get success: " + JSON.stringify(localAddress));
8678}).catch((err: BusinessError) => {
8679  console.error("Get failed, error: " + JSON.stringify(err));
8680})
8681```
8682
8683### on('connect')<sup>10+</sup>
8684
8685on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void
8686
8687订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
8688
8689> **说明:**
8690> listen方法调用成功后,才可调用此方法。
8691
8692**系统能力**:SystemCapability.Communication.NetStack
8693
8694**参数:**
8695
8696| 参数名   | 类型                                                    | 必填 | 说明                                  |
8697| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
8698| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
8699| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是   | 回调函数。失败时返回错误码、错误信息。    |
8700
8701**错误码:**
8702
8703| 错误码ID | 错误信息         |
8704| -------- | ---------------- |
8705| 401      | Parameter error. |
8706
8707**示例:**
8708
8709```ts
8710import { socket } from '@kit.NetworkKit';
8711import { BusinessError } from '@kit.BasicServicesKit';
8712
8713let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8714let netAddress: socket.NetAddress = {
8715  address: '192.168.xx.xxx',
8716  port: 8080
8717}
8718let tlsSecureOptions: socket.TLSSecureOptions = {
8719  key: "xxxx",
8720  cert: "xxxx",
8721  ca: ["xxxx"],
8722  password: "xxxx",
8723  protocols: socket.Protocol.TLSv12,
8724  useRemoteCipherPrefer: true,
8725  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8726  cipherSuite: "AES256-SHA256"
8727}
8728let tlsConnectOptions: socket.TLSConnectOptions = {
8729  address: netAddress,
8730  secureOptions: tlsSecureOptions,
8731  ALPNProtocols: ["spdy/1", "http/1.1"]
8732}
8733tlsServer.listen(tlsConnectOptions).then(() => {
8734  console.log("listen callback success");
8735}).catch((err: BusinessError) => {
8736  console.error("failed: " + JSON.stringify(err));
8737});
8738tlsServer.on('connect', (data: socket.TLSSocketConnection) => {
8739  console.log(JSON.stringify(data))
8740});
8741```
8742
8743### off('connect')<sup>10+</sup>
8744
8745off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void
8746
8747取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
8748
8749> **说明:**
8750> listen方法调用成功后,才可调用此方法。
8751> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8752
8753**系统能力**:SystemCapability.Communication.NetStack
8754
8755**参数:**
8756
8757| 参数名   | 类型                                                    | 必填 | 说明                                  |
8758| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
8759| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
8760| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否   | 回调函数。失败时返回错误码、错误信息。      |
8761
8762**错误码:**
8763
8764| 错误码ID | 错误信息         |
8765| -------- | ---------------- |
8766| 401      | Parameter error. |
8767
8768**示例:**
8769
8770```ts
8771import { socket } from '@kit.NetworkKit';
8772import { BusinessError } from '@kit.BasicServicesKit';
8773
8774let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8775let netAddress: socket.NetAddress = {
8776  address: '192.168.xx.xxx',
8777  port: 8080
8778}
8779let tlsSecureOptions: socket.TLSSecureOptions = {
8780  key: "xxxx",
8781  cert: "xxxx",
8782  ca: ["xxxx"],
8783  password: "xxxx",
8784  protocols: socket.Protocol.TLSv12,
8785  useRemoteCipherPrefer: true,
8786  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8787  cipherSuite: "AES256-SHA256"
8788}
8789let tlsConnectOptions: socket.TLSConnectOptions = {
8790  address: netAddress,
8791  secureOptions: tlsSecureOptions,
8792  ALPNProtocols: ["spdy/1", "http/1.1"]
8793}
8794tlsServer.listen(tlsConnectOptions).then(() => {
8795  console.log("listen callback success");
8796}).catch((err: BusinessError) => {
8797  console.error("failed: " + JSON.stringify(err));
8798});
8799
8800let callback = (data: socket.TLSSocketConnection) => {
8801  console.log('on connect message: ' + JSON.stringify(data));
8802}
8803tlsServer.on('connect', callback);
8804// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8805tlsServer.off('connect', callback);
8806tlsServer.off('connect');
8807```
8808
8809### on('error')<sup>10+</sup>
8810
8811on(type: 'error', callback: ErrorCallback): void
8812
8813订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
8814
8815> **说明:**
8816> listen方法调用成功后,才可调用此方法。
8817
8818**系统能力**:SystemCapability.Communication.NetStack
8819
8820**参数:**
8821
8822| 参数名   | 类型          | 必填 | 说明                                 |
8823| -------- | ------------- | ---- | ------------------------------------ |
8824| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
8825| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。     |
8826
8827**错误码:**
8828
8829| 错误码ID | 错误信息         |
8830| -------- | ---------------- |
8831| 401      | Parameter error. |
8832
8833**示例:**
8834
8835```ts
8836import { socket } from '@kit.NetworkKit';
8837import { BusinessError } from '@kit.BasicServicesKit';
8838
8839let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8840let netAddress: socket.NetAddress = {
8841  address: '192.168.xx.xxx',
8842  port: 8080
8843}
8844let tlsSecureOptions: socket.TLSSecureOptions = {
8845  key: "xxxx",
8846  cert: "xxxx",
8847  ca: ["xxxx"],
8848  password: "xxxx",
8849  protocols: socket.Protocol.TLSv12,
8850  useRemoteCipherPrefer: true,
8851  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8852  cipherSuite: "AES256-SHA256"
8853}
8854let tlsConnectOptions: socket.TLSConnectOptions = {
8855  address: netAddress,
8856  secureOptions: tlsSecureOptions,
8857  ALPNProtocols: ["spdy/1", "http/1.1"]
8858}
8859tlsServer.listen(tlsConnectOptions).then(() => {
8860  console.log("listen callback success");
8861}).catch((err: BusinessError) => {
8862  console.error("failed: " + JSON.stringify(err));
8863});
8864tlsServer.on('error', (err: BusinessError) => {
8865  console.error("on error, err:" + JSON.stringify(err))
8866});
8867```
8868
8869### off('error')<sup>10+</sup>
8870
8871off(type: 'error', callback?: ErrorCallback): void
8872
8873取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
8874
8875> **说明:**
8876> listen方法调用成功后,才可调用此方法。
8877> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8878
8879**系统能力**:SystemCapability.Communication.NetStack
8880
8881**参数:**
8882
8883| 参数名   | 类型          | 必填 | 说明                                 |
8884| -------- | ------------- | ---- | ------------------------------------ |
8885| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
8886| callback | ErrorCallback | 否   | 回调函数。失败时返回错误码、错误信息。     |
8887
8888**错误码:**
8889
8890| 错误码ID | 错误信息         |
8891| -------- | ---------------- |
8892| 401      | Parameter error. |
8893
8894**示例:**
8895
8896```ts
8897import { socket } from '@kit.NetworkKit';
8898import { BusinessError } from '@kit.BasicServicesKit';
8899
8900let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8901let netAddress: socket.NetAddress = {
8902  address: '192.168.xx.xxx',
8903  port: 8080
8904}
8905let tlsSecureOptions: socket.TLSSecureOptions = {
8906  key: "xxxx",
8907  cert: "xxxx",
8908  ca: ["xxxx"],
8909  password: "xxxx",
8910  protocols: socket.Protocol.TLSv12,
8911  useRemoteCipherPrefer: true,
8912  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8913  cipherSuite: "AES256-SHA256"
8914}
8915let tlsConnectOptions: socket.TLSConnectOptions = {
8916  address: netAddress,
8917  secureOptions: tlsSecureOptions,
8918  ALPNProtocols: ["spdy/1", "http/1.1"]
8919}
8920tlsServer.listen(tlsConnectOptions).then(() => {
8921  console.log("listen callback success");
8922}).catch((err: BusinessError) => {
8923  console.error("failed: " + JSON.stringify(err));
8924});
8925
8926let callback = (err: BusinessError) => {
8927  console.error("on error, err:" + JSON.stringify(err));
8928}
8929tlsServer.on('error', callback);
8930// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8931tlsServer.off('error', callback);
8932tlsServer.off('error');
8933```
8934
8935### close<sup>20+</sup>
8936
8937close(): Promise\<void\>
8938
8939TLSSocketServer停止监听并释放通过[listen](#listen10-2)方法绑定的端口。使用Promise异步回调。
8940
8941> **说明:**
8942> 该方法不会关闭已有连接。如需关闭,请调用[TLSSocketConnection](#tlssocketconnection10)的[close](#close10-2)方法。
8943
8944**需要权限**:ohos.permission.INTERNET
8945
8946**系统能力**:SystemCapability.Communication.NetStack
8947
8948**返回值:**
8949
8950| 类型            | 说明                                                       |
8951|  -------------- |  --------------------------------------------------------- |
8952| Promise\<void\> | Promise对象,无返回结果。 |
8953
8954**错误码:**
8955
8956以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。
8957
8958| 错误码ID | 错误信息                                    |
8959| -------- | ------------------------------------------- |
8960| 201      | Permission denied.                          |
8961| 2300002  | System internal error.                      |
8962
8963**示例:**
8964
8965```ts
8966import { socket } from '@kit.NetworkKit';
8967import { BusinessError } from '@kit.BasicServicesKit';
8968
8969let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8970let netAddress: socket.NetAddress = {
8971  address: '192.168.xx.xxx',
8972  port: 8080
8973}
8974let tlsSecureOptions: socket.TLSSecureOptions = {
8975  key: "xxxx",
8976  cert: "xxxx",
8977  ca: ["xxxx"],
8978  password: "xxxx",
8979  protocols: socket.Protocol.TLSv12,
8980  useRemoteCipherPrefer: true,
8981  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8982  cipherSuite: "AES256-SHA256"
8983}
8984let tlsConnectOptions: socket.TLSConnectOptions = {
8985  address: netAddress,
8986  secureOptions: tlsSecureOptions,
8987  ALPNProtocols: ["spdy/1", "http/1.1"]
8988}
8989tlsServer.on('connect', (connection: socket.TLSSocketConnection) => {
8990  console.info("connection clientId: " + connection.clientId);
8991  // 逻辑处理
8992  tlsServer.close(); // 停止监听
8993  connection.close(); // 关闭当前连接
8994});
8995tlsServer.listen(tlsConnectOptions).then(() => {
8996  console.info("listen callback success");
8997}).catch((err: BusinessError) => {
8998  console.error("listen failed: " + err.code);
8999});
9000```
9001
9002## TLSSocketConnection<sup>10+</sup>
9003
9004TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。
9005
9006> **说明:**
9007> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。
9008
9009**系统能力**:SystemCapability.Communication.NetStack
9010
9011### 属性
9012
9013| 名称     | 类型   | 必填 | 说明                                  |
9014| -------- | ------ | ---- | ------------------------------------- |
9015| clientId | number | 是   | 客户端与TLSSocketServer建立连接的id。 |
9016
9017### send<sup>10+</sup>
9018
9019send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void
9020
9021在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。
9022
9023**系统能力**:SystemCapability.Communication.NetStack
9024
9025**参数:**
9026
9027| 参数名   | 类型                  | 必填 | 说明                                             |
9028| -------- | --------------------- | ---- | ------------------------------------------------ |
9029| data     | string \| ArrayBuffer                | 是   | TLSSocketServer发送数据所需要的参数。            |
9030| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
9031
9032**错误码:**
9033
9034| 错误码ID | 错误信息                               |
9035| -------- | -------------------------------------- |
9036| 401      | Parameter error.                       |
9037| 2303501  | SSL is null.                           |
9038| 2303503  | An error occurred when writing data on the TLS socket.|
9039| 2303505  | An error occurred in the TLS system call.|
9040| 2303506  | Failed to close the TLS connection.    |
9041| 2300002  | System internal error.                 |
9042
9043**示例:**
9044
9045```ts
9046import { socket } from '@kit.NetworkKit';
9047import { BusinessError } from '@kit.BasicServicesKit';
9048
9049let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9050let netAddress: socket.NetAddress = {
9051  address: '192.168.xx.xxx',
9052  port: 8080
9053}
9054let tlsSecureOptions: socket.TLSSecureOptions = {
9055  key: "xxxx",
9056  cert: "xxxx",
9057  ca: ["xxxx"],
9058  password: "xxxx",
9059  protocols: socket.Protocol.TLSv12,
9060  useRemoteCipherPrefer: true,
9061  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9062  cipherSuite: "AES256-SHA256"
9063}
9064let tlsConnectOptions: socket.TLSConnectOptions = {
9065  address: netAddress,
9066  secureOptions: tlsSecureOptions,
9067  ALPNProtocols: ["spdy/1", "http/1.1"]
9068}
9069tlsServer.listen(tlsConnectOptions).then(() => {
9070  console.log("listen callback success");
9071}).catch((err: BusinessError) => {
9072  console.error("failed" + err);
9073});
9074
9075tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9076  client.send('Hello, client!', (err: BusinessError) => {
9077    if (err) {
9078      console.error('send fail');
9079      return;
9080    }
9081    console.log('send success');
9082  });
9083});
9084```
9085
9086### send<sup>10+</sup>
9087
9088send(data: string \| ArrayBuffer): Promise\<void\>
9089
9090在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
9091
9092**系统能力**:SystemCapability.Communication.NetStack
9093
9094**参数:**
9095
9096| 参数名 | 类型   | 必填 | 说明                                  |
9097| ------ | ------ | ---- | ------------------------------------- |
9098| data   | string \| ArrayBuffer | 是   | TLSSocketServer发送数据所需要的参数。 |
9099
9100**返回值:**
9101
9102| 类型            | 说明                                                      |
9103| --------------- | --------------------------------------------------------- |
9104| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
9105
9106**错误码:**
9107
9108| 错误码ID | 错误信息                               |
9109| -------- | -------------------------------------- |
9110| 401      | Parameter error.                       |
9111| 2303501  | SSL is null.                           |
9112| 2303503  | An error occurred when writing data on the TLS socket.|
9113| 2303505  | An error occurred in the TLS system call.|
9114| 2303506  | Failed to close the TLS connection.    |
9115| 2300002  | System internal error.                 |
9116
9117**示例:**
9118
9119```ts
9120import { socket } from '@kit.NetworkKit';
9121import { BusinessError } from '@kit.BasicServicesKit';
9122
9123let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9124let netAddress: socket.NetAddress = {
9125  address: '192.168.xx.xxx',
9126  port: 8080
9127}
9128let tlsSecureOptions: socket.TLSSecureOptions = {
9129  key: "xxxx",
9130  cert: "xxxx",
9131  ca: ["xxxx"],
9132  password: "xxxx",
9133  protocols: socket.Protocol.TLSv12,
9134  useRemoteCipherPrefer: true,
9135  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9136  cipherSuite: "AES256-SHA256"
9137}
9138let tlsConnectOptions: socket.TLSConnectOptions = {
9139  address: netAddress,
9140  secureOptions: tlsSecureOptions,
9141  ALPNProtocols: ["spdy/1", "http/1.1"]
9142}
9143tlsServer.listen(tlsConnectOptions).then(() => {
9144  console.log("listen callback success");
9145}).catch((err: BusinessError) => {
9146  console.error("failed" + err);
9147});
9148
9149tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9150  client.send('Hello, client!').then(() => {
9151    console.log('send success');
9152  }).catch((err: BusinessError) => {
9153    console.error('send fail');
9154  });
9155});
9156```
9157
9158### close<sup>10+</sup>
9159
9160close(callback: AsyncCallback\<void\>): void
9161
9162在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。
9163
9164**系统能力**:SystemCapability.Communication.NetStack
9165
9166**参数:**
9167
9168| 参数名   | 类型                  | 必填 | 说明                                             |
9169| -------- | --------------------- | ---- | ------------------------------------------------ |
9170| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
9171
9172**错误码:**
9173
9174| 错误码ID | 错误信息                               |
9175| -------- | -------------------------------------- |
9176| 401      | Parameter error.                       |
9177| 2303501  | SSL is null.                           |
9178| 2303505  | An error occurred in the TLS system call. |
9179| 2303506  | Failed to close the TLS connection.    |
9180| 2300002  | System internal error.                 |
9181
9182**示例:**
9183
9184```ts
9185import { socket } from '@kit.NetworkKit';
9186import { BusinessError } from '@kit.BasicServicesKit';
9187
9188let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9189let netAddress: socket.NetAddress = {
9190  address: '192.168.xx.xxx',
9191  port: 8080
9192}
9193let tlsSecureOptions: socket.TLSSecureOptions = {
9194  key: "xxxx",
9195  cert: "xxxx",
9196  ca: ["xxxx"],
9197  password: "xxxx",
9198  protocols: socket.Protocol.TLSv12,
9199  useRemoteCipherPrefer: true,
9200  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9201  cipherSuite: "AES256-SHA256"
9202}
9203let tlsConnectOptions: socket.TLSConnectOptions = {
9204  address: netAddress,
9205  secureOptions: tlsSecureOptions,
9206  ALPNProtocols: ["spdy/1", "http/1.1"]
9207}
9208tlsServer.listen(tlsConnectOptions).then(() => {
9209  console.log("listen callback success");
9210}).catch((err: BusinessError) => {
9211  console.error("failed" + err);
9212});
9213
9214tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9215  client.close((err: BusinessError) => {
9216    if (err) {
9217      console.error('close fail');
9218      return;
9219    }
9220    console.log('close success');
9221  });
9222});
9223```
9224
9225### close<sup>10+</sup>
9226
9227close(): Promise\<void\>
9228
9229在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。
9230
9231**系统能力**:SystemCapability.Communication.NetStack
9232
9233**返回值:**
9234
9235| 类型            | 说明                                                      |
9236| --------------- | --------------------------------------------------------- |
9237| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 |
9238
9239**错误码:**
9240
9241| 错误码ID | 错误信息                               |
9242| -------- | -------------------------------------- |
9243| 2303501  | SSL is null.                           |
9244| 2303505  | An error occurred in the TLS system call. |
9245| 2303506  | Failed to close the TLS connection.    |
9246| 2300002  | System internal error.                 |
9247
9248**示例:**
9249
9250```ts
9251import { socket } from '@kit.NetworkKit';
9252import { BusinessError } from '@kit.BasicServicesKit';
9253
9254let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9255let netAddress: socket.NetAddress = {
9256  address: '192.168.xx.xxx',
9257  port: 8080
9258}
9259let tlsSecureOptions: socket.TLSSecureOptions = {
9260  key: "xxxx",
9261  cert: "xxxx",
9262  ca: ["xxxx"],
9263  password: "xxxx",
9264  protocols: socket.Protocol.TLSv12,
9265  useRemoteCipherPrefer: true,
9266  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9267  cipherSuite: "AES256-SHA256"
9268}
9269let tlsConnectOptions: socket.TLSConnectOptions = {
9270  address: netAddress,
9271  secureOptions: tlsSecureOptions,
9272  ALPNProtocols: ["spdy/1", "http/1.1"]
9273}
9274tlsServer.listen(tlsConnectOptions).then(() => {
9275  console.log("listen callback success");
9276}).catch((err: BusinessError) => {
9277  console.error("failed" + err);
9278});
9279tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9280  client.close().then(() => {
9281    console.log('close success');
9282  }).catch((err: BusinessError) => {
9283    console.error('close fail');
9284  });
9285});
9286```
9287
9288### getRemoteAddress<sup>10+</sup>
9289
9290getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
9291
9292在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
9293
9294**系统能力**:SystemCapability.Communication.NetStack
9295
9296**参数:**
9297
9298| 参数名   | 类型                                        | 必填 | 说明                                                         |
9299| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ |
9300| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 |
9301
9302**错误码:**
9303
9304| 错误码ID | 错误信息                        |
9305| -------- | ------------------------------- |
9306| 401      | Parameter error.                |
9307| 2303188  | Socket operation on non-socket. |
9308| 2300002  | System internal error.          |
9309
9310**示例:**
9311
9312```ts
9313import { socket } from '@kit.NetworkKit';
9314import { BusinessError } from '@kit.BasicServicesKit';
9315
9316let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9317let netAddress: socket.NetAddress = {
9318  address: '192.168.xx.xxx',
9319  port: 8080
9320}
9321let tlsSecureOptions: socket.TLSSecureOptions = {
9322  key: "xxxx",
9323  cert: "xxxx",
9324  ca: ["xxxx"],
9325  password: "xxxx",
9326  protocols: socket.Protocol.TLSv12,
9327  useRemoteCipherPrefer: true,
9328  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9329  cipherSuite: "AES256-SHA256"
9330}
9331let tlsConnectOptions: socket.TLSConnectOptions = {
9332  address: netAddress,
9333  secureOptions: tlsSecureOptions,
9334  ALPNProtocols: ["spdy/1", "http/1.1"]
9335}
9336tlsServer.listen(tlsConnectOptions).then(() => {
9337  console.log("listen callback success");
9338}).catch((err: BusinessError) => {
9339  console.error("failed" + err);
9340});
9341tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9342  client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
9343    if (err) {
9344      console.error('getRemoteAddress fail');
9345      return;
9346    }
9347    console.log('getRemoteAddress success:' + JSON.stringify(data));
9348  });
9349});
9350```
9351
9352### getRemoteAddress<sup>10+</sup>
9353
9354getRemoteAddress(): Promise\<NetAddress\>
9355
9356在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
9357
9358**系统能力**:SystemCapability.Communication.NetStack
9359
9360**返回值:**
9361
9362| 类型                                 | 说明                                                         |
9363|  ----------------------------------- |  ----------------------------------------------------------- |
9364| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
9365
9366**错误码:**
9367
9368| 错误码ID | 错误信息                        |
9369| -------- | ------------------------------- |
9370| 2303188  | Socket operation on non-socket. |
9371| 2300002  | System internal error.          |
9372
9373**示例:**
9374
9375```ts
9376import { socket } from '@kit.NetworkKit';
9377import { BusinessError } from '@kit.BasicServicesKit';
9378
9379let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9380let netAddress: socket.NetAddress = {
9381  address: '192.168.xx.xxx',
9382  port: 8080
9383}
9384let tlsSecureOptions: socket.TLSSecureOptions = {
9385  key: "xxxx",
9386  cert: "xxxx",
9387  ca: ["xxxx"],
9388  password: "xxxx",
9389  protocols: socket.Protocol.TLSv12,
9390  useRemoteCipherPrefer: true,
9391  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9392  cipherSuite: "AES256-SHA256"
9393}
9394let tlsConnectOptions: socket.TLSConnectOptions = {
9395  address: netAddress,
9396  secureOptions: tlsSecureOptions,
9397  ALPNProtocols: ["spdy/1", "http/1.1"]
9398}
9399tlsServer.listen(tlsConnectOptions).then(() => {
9400  console.log("listen callback success");
9401}).catch((err: BusinessError) => {
9402  console.error("failed" + err);
9403});
9404tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9405  client.getRemoteAddress().then((data: socket.NetAddress) => {
9406    console.log('getRemoteAddress success:' + JSON.stringify(data));
9407  }).catch((err: BusinessError) => {
9408    console.error("failed" + err);
9409  });
9410});
9411```
9412
9413### getRemoteCertificate<sup>10+</sup>
9414
9415getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
9416
9417在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。
9418
9419**系统能力**:SystemCapability.Communication.NetStack
9420
9421**参数:**
9422
9423| 参数名   | 类型                                                  | 必填 | 说明                                                 |
9424| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- |
9425| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,返回对端的证书。失败返回错误码、错误信息。 |
9426
9427**错误码:**
9428
9429| 错误码ID | 错误信息               |
9430| -------- | ---------------------- |
9431| 401      | Parameter error.       |
9432| 2303501  | SSL is null.           |
9433| 2300002  | System internal error. |
9434
9435**示例:**
9436
9437```ts
9438import { socket } from '@kit.NetworkKit';
9439import { BusinessError } from '@kit.BasicServicesKit';
9440import { util } from '@kit.ArkTS';
9441
9442let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9443let netAddress: socket.NetAddress = {
9444  address: '192.168.xx.xxx',
9445  port: 8080
9446}
9447let tlsSecureOptions: socket.TLSSecureOptions = {
9448  key: "xxxx",
9449  cert: "xxxx",
9450  ca: ["xxxx"],
9451  password: "xxxx",
9452  protocols: socket.Protocol.TLSv12,
9453  useRemoteCipherPrefer: true,
9454  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9455  cipherSuite: "AES256-SHA256"
9456}
9457let tlsConnectOptions: socket.TLSConnectOptions = {
9458  address: netAddress,
9459  secureOptions: tlsSecureOptions,
9460  ALPNProtocols: ["spdy/1", "http/1.1"]
9461}
9462tlsServer.listen(tlsConnectOptions).then(() => {
9463  console.log("listen callback success");
9464}).catch((err: BusinessError) => {
9465  console.error("failed" + err);
9466});
9467tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9468  client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
9469    if (err) {
9470      console.error("getRemoteCertificate callback error: " + err);
9471    } else {
9472      const decoder = util.TextDecoder.create();
9473      const str = decoder.decodeToString(data.data);
9474      console.log("getRemoteCertificate callback: " + str);
9475    }
9476  });
9477});
9478```
9479
9480### getRemoteCertificate<sup>10+</sup>
9481
9482getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
9483
9484在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。
9485
9486**系统能力**:SystemCapability.Communication.NetStack
9487
9488**返回值:**
9489
9490| 类型                                            | 说明                                                         |
9491| ----------------------------------------------- | ------------------------------------------------------------ |
9492| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 |
9493
9494**错误码:**
9495
9496| 错误码ID | 错误信息               |
9497| -------- | ---------------------- |
9498| 2303501  | SSL is null.           |
9499| 2300002  | System internal error. |
9500
9501**示例:**
9502
9503```ts
9504import { socket } from '@kit.NetworkKit';
9505import { BusinessError } from '@kit.BasicServicesKit';
9506import { util } from '@kit.ArkTS';
9507
9508let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9509let netAddress: socket.NetAddress = {
9510  address: '192.168.xx.xxx',
9511  port: 8080
9512}
9513let tlsSecureOptions: socket.TLSSecureOptions = {
9514  key: "xxxx",
9515  cert: "xxxx",
9516  ca: ["xxxx"],
9517  password: "xxxx",
9518  protocols: socket.Protocol.TLSv12,
9519  useRemoteCipherPrefer: true,
9520  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9521  cipherSuite: "AES256-SHA256"
9522}
9523let tlsConnectOptions: socket.TLSConnectOptions = {
9524  address: netAddress,
9525  secureOptions: tlsSecureOptions,
9526  ALPNProtocols: ["spdy/1", "http/1.1"]
9527}
9528tlsServer.listen(tlsConnectOptions).then(() => {
9529  console.log("listen callback success");
9530}).catch((err: BusinessError) => {
9531  console.error("failed" + err);
9532});
9533tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9534  client.getRemoteCertificate().then((data: socket.X509CertRawData) => {
9535    const decoder = util.TextDecoder.create();
9536    const str = decoder.decodeToString(data.data);
9537    console.log("getRemoteCertificate success: " + str);
9538  }).catch((err: BusinessError) => {
9539    console.error("failed" + err);
9540  });
9541});
9542```
9543
9544### getCipherSuite<sup>10+</sup>
9545
9546getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
9547
9548在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
9549
9550**系统能力**:SystemCapability.Communication.NetStack
9551
9552**参数:**
9553
9554| 参数名   | 类型                             | 必填 | 说明                                                         |
9555| -------- | -------------------------------- | ---- | ------------------------------------------------------------ |
9556| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 |
9557
9558**错误码:**
9559
9560| 错误码ID | 错误信息                               |
9561| -------- | -------------------------------------- |
9562| 401      | Parameter error.                       |
9563| 2303501  | SSL is null.                           |
9564| 2303502  | An error occurred when reading data on the TLS socket.|
9565| 2303505  | An error occurred in the TLS system call.|
9566| 2300002  | System internal error.                 |
9567
9568**示例:**
9569
9570```ts
9571import { socket } from '@kit.NetworkKit';
9572import { BusinessError } from '@kit.BasicServicesKit';
9573
9574let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9575let netAddress: socket.NetAddress = {
9576  address: '192.168.xx.xxx',
9577  port: 8080
9578}
9579let tlsSecureOptions: socket.TLSSecureOptions = {
9580  key: "xxxx",
9581  cert: "xxxx",
9582  ca: ["xxxx"],
9583  password: "xxxx",
9584  protocols: socket.Protocol.TLSv12,
9585  useRemoteCipherPrefer: true,
9586  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9587  cipherSuite: "AES256-SHA256"
9588}
9589let tlsConnectOptions: socket.TLSConnectOptions = {
9590  address: netAddress,
9591  secureOptions: tlsSecureOptions,
9592  ALPNProtocols: ["spdy/1", "http/1.1"]
9593}
9594tlsServer.listen(tlsConnectOptions).then(() => {
9595  console.log("listen callback success");
9596}).catch((err: BusinessError) => {
9597  console.error("failed" + err);
9598});
9599tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9600  client.getCipherSuite((err: BusinessError, data: Array<string>) => {
9601    if (err) {
9602      console.error("getCipherSuite callback error = " + err);
9603    } else {
9604      console.log("getCipherSuite callback = " + data);
9605    }
9606  });
9607});
9608```
9609
9610### getCipherSuite<sup>10+</sup>
9611
9612getCipherSuite(): Promise\<Array\<string\>\>
9613
9614在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
9615
9616**系统能力**:SystemCapability.Communication.NetStack
9617
9618**返回值:**
9619
9620| 类型                       | 说明                                                         |
9621| -------------------------- | ------------------------------------------------------------ |
9622| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
9623
9624**错误码:**
9625
9626| 错误码ID | 错误信息                               |
9627| -------- | -------------------------------------- |
9628| 2303501  | SSL is null.                           |
9629| 2303502  | An error occurred when reading data on the TLS socket.|
9630| 2303505  | An error occurred in the TLS system call. |
9631| 2300002  | System internal error.                 |
9632
9633**示例:**
9634
9635```ts
9636import { socket } from '@kit.NetworkKit';
9637import { BusinessError } from '@kit.BasicServicesKit';
9638
9639let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9640let netAddress: socket.NetAddress = {
9641  address: '192.168.xx.xxx',
9642  port: 8080
9643}
9644let tlsSecureOptions: socket.TLSSecureOptions = {
9645  key: "xxxx",
9646  cert: "xxxx",
9647  ca: ["xxxx"],
9648  password: "xxxx",
9649  protocols: socket.Protocol.TLSv12,
9650  useRemoteCipherPrefer: true,
9651  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9652  cipherSuite: "AES256-SHA256"
9653}
9654let tlsConnectOptions: socket.TLSConnectOptions = {
9655  address: netAddress,
9656  secureOptions: tlsSecureOptions,
9657  ALPNProtocols: ["spdy/1", "http/1.1"]
9658}
9659tlsServer.listen(tlsConnectOptions).then(() => {
9660  console.log("listen callback success");
9661}).catch((err: BusinessError) => {
9662  console.error("failed" + err);
9663});
9664tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9665  client.getCipherSuite().then((data: Array<string>) => {
9666    console.log('getCipherSuite success:' + JSON.stringify(data));
9667  }).catch((err: BusinessError) => {
9668    console.error("failed" + err);
9669  });
9670});
9671```
9672
9673### getSignatureAlgorithms<sup>10+</sup>
9674
9675getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
9676
9677在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。
9678
9679**系统能力**:SystemCapability.Communication.NetStack
9680
9681**参数:**
9682
9683| 参数名   | 类型                             | 必填 | 说明                               |
9684| -------- | -------------------------------- | ---- | ---------------------------------- |
9685| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回双方支持的签名算法。 |
9686
9687**错误码:**
9688
9689| 错误码ID | 错误信息               |
9690| -------- | ---------------------- |
9691| 401      | Parameter error.       |
9692| 2303501  | SSL is null.           |
9693| 2300002  | System internal error. |
9694
9695**示例:**
9696
9697```ts
9698import { socket } from '@kit.NetworkKit';
9699import { BusinessError } from '@kit.BasicServicesKit';
9700
9701let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9702let netAddress: socket.NetAddress = {
9703  address: '192.168.xx.xxx',
9704  port: 8080
9705}
9706let tlsSecureOptions: socket.TLSSecureOptions = {
9707  key: "xxxx",
9708  cert: "xxxx",
9709  ca: ["xxxx"],
9710  password: "xxxx",
9711  protocols: socket.Protocol.TLSv12,
9712  useRemoteCipherPrefer: true,
9713  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9714  cipherSuite: "AES256-SHA256"
9715}
9716let tlsConnectOptions: socket.TLSConnectOptions = {
9717  address: netAddress,
9718  secureOptions: tlsSecureOptions,
9719  ALPNProtocols: ["spdy/1", "http/1.1"]
9720}
9721tlsServer.listen(tlsConnectOptions).then(() => {
9722  console.log("listen callback success");
9723}).catch((err: BusinessError) => {
9724  console.error("failed" + err);
9725});
9726tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9727  client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
9728    if (err) {
9729      console.error("getSignatureAlgorithms callback error = " + err);
9730    } else {
9731      console.log("getSignatureAlgorithms callback = " + data);
9732    }
9733  });
9734});
9735```
9736
9737### getSignatureAlgorithms<sup>10+</sup>
9738
9739getSignatureAlgorithms(): Promise\<Array\<string\>\>
9740
9741在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。
9742
9743**系统能力**:SystemCapability.Communication.NetStack
9744
9745**返回值:**
9746
9747| 类型                       | 说明                                          |
9748| -------------------------- | --------------------------------------------- |
9749| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
9750
9751**错误码:**
9752
9753| 错误码ID | 错误信息               |
9754| -------- | ---------------------- |
9755| 2303501  | SSL is null.           |
9756| 2300002  | System internal error. |
9757
9758**示例:**
9759
9760```ts
9761import { socket } from '@kit.NetworkKit';
9762import { BusinessError } from '@kit.BasicServicesKit';
9763
9764let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9765let netAddress: socket.NetAddress = {
9766  address: '192.168.xx.xxx',
9767  port: 8080
9768}
9769let tlsSecureOptions: socket.TLSSecureOptions = {
9770  key: "xxxx",
9771  cert: "xxxx",
9772  ca: ["xxxx"],
9773  password: "xxxx",
9774  protocols: socket.Protocol.TLSv12,
9775  useRemoteCipherPrefer: true,
9776  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9777  cipherSuite: "AES256-SHA256"
9778}
9779let tlsConnectOptions: socket.TLSConnectOptions = {
9780  address: netAddress,
9781  secureOptions: tlsSecureOptions,
9782  ALPNProtocols: ["spdy/1", "http/1.1"]
9783}
9784tlsServer.listen(tlsConnectOptions).then(() => {
9785  console.log("listen callback success");
9786}).catch((err: BusinessError) => {
9787  console.error("failed" + err);
9788});
9789tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9790  client.getSignatureAlgorithms().then((data: Array<string>) => {
9791    console.log("getSignatureAlgorithms success" + data);
9792  }).catch((err: BusinessError) => {
9793    console.error("failed" + err);
9794  });
9795});
9796```
9797
9798### getLocalAddress<sup>12+</sup>
9799
9800getLocalAddress(): Promise\<NetAddress\>
9801
9802获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。
9803
9804> **说明:**
9805> 在TLSSocketServer通信连接成功之后,才可调用此方法。
9806
9807**系统能力**:SystemCapability.Communication.NetStack
9808
9809**返回值:**
9810
9811| 类型            | 说明                                                 |
9812|  -------------- |  --------------------------------------------------- |
9813| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
9814
9815**错误码:**
9816
9817| 错误码ID | 错误信息                                    |
9818| -------- | ------------------------------------------- |
9819| 2300002  | System internal error.                      |
9820| 2301009  | Bad file descriptor.                            |
9821| 2303188  | Socket operation on non-socket. |
9822
9823**示例:**
9824
9825```ts
9826import { socket } from '@kit.NetworkKit';
9827import { BusinessError } from '@kit.BasicServicesKit';
9828
9829let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9830let netAddress: socket.NetAddress = {
9831  address: '192.168.xx.xxx',
9832  port: 8080
9833}
9834let tlsSecureOptions: socket.TLSSecureOptions = {
9835  key: "xxxx",
9836  cert: "xxxx",
9837  ca: ["xxxx"],
9838  password: "xxxx",
9839  protocols: socket.Protocol.TLSv12,
9840  useRemoteCipherPrefer: true,
9841  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9842  cipherSuite: "AES256-SHA256"
9843}
9844let tlsConnectOptions: socket.TLSConnectOptions = {
9845  address: netAddress,
9846  secureOptions: tlsSecureOptions,
9847  ALPNProtocols: ["spdy/1", "http/1.1"]
9848}
9849tlsServer.listen(tlsConnectOptions).then(() => {
9850  console.info("listen callback success");
9851}).catch((err: BusinessError) => {
9852  console.error("failed" + err);
9853});
9854
9855tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9856  client.getLocalAddress().then((localAddress: socket.NetAddress) => {
9857    console.info("Family IP Port: " + JSON.stringify(localAddress));
9858  }).catch((err: BusinessError) => {
9859    console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err));
9860  })
9861});
9862```
9863
9864### on('message')<sup>10+</sup>
9865
9866on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
9867
9868订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
9869
9870**系统能力**:SystemCapability.Communication.NetStack
9871
9872**参数:**
9873
9874| 参数名   | 类型                                                         | 必填 | 说明                                      |
9875| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
9876| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
9877| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。                               |
9878
9879**错误码:**
9880
9881| 错误码ID | 错误信息         |
9882| -------- | ---------------- |
9883| 401      | Parameter error. |
9884
9885**示例:**
9886
9887```ts
9888import { socket } from '@kit.NetworkKit';
9889import { BusinessError } from '@kit.BasicServicesKit';
9890
9891let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9892let netAddress: socket.NetAddress = {
9893  address: '192.168.xx.xxx',
9894  port: 8080
9895}
9896let tlsSecureOptions: socket.TLSSecureOptions = {
9897  key: "xxxx",
9898  cert: "xxxx",
9899  ca: ["xxxx"],
9900  password: "xxxx",
9901  protocols: socket.Protocol.TLSv12,
9902  useRemoteCipherPrefer: true,
9903  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9904  cipherSuite: "AES256-SHA256"
9905}
9906let tlsConnectOptions: socket.TLSConnectOptions = {
9907  address: netAddress,
9908  secureOptions: tlsSecureOptions,
9909  ALPNProtocols: ["spdy/1", "http/1.1"]
9910}
9911tlsServer.listen(tlsConnectOptions).then(() => {
9912  console.log("listen callback success");
9913}).catch((err: BusinessError) => {
9914  console.error("failed" + err);
9915});
9916
9917tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9918  client.on('message', (value: socket.SocketMessageInfo) => {
9919    let messageView = '';
9920    for (let i: number = 0; i < value.message.byteLength; i++) {
9921      let uint8Array = new Uint8Array(value.message)
9922      let messages = uint8Array[i]
9923      let message = String.fromCharCode(messages);
9924      messageView += message;
9925    }
9926    console.log('on message message: ' + JSON.stringify(messageView));
9927    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
9928  });
9929});
9930```
9931
9932### off('message')<sup>10+</sup>
9933
9934off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
9935
9936取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
9937
9938**系统能力**:SystemCapability.Communication.NetStack
9939
9940**参数:**
9941
9942| 参数名   | 类型                                                         | 必填 | 说明                                      |
9943| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
9944| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
9945| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。  |
9946
9947**错误码:**
9948
9949| 错误码ID | 错误信息         |
9950| -------- | ---------------- |
9951| 401      | Parameter error. |
9952
9953**示例:**
9954
9955```ts
9956import { socket } from '@kit.NetworkKit';
9957import { BusinessError } from '@kit.BasicServicesKit';
9958
9959let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9960let netAddress: socket.NetAddress = {
9961  address: '192.168.xx.xxx',
9962  port: 8080
9963}
9964let tlsSecureOptions: socket.TLSSecureOptions = {
9965  key: "xxxx",
9966  cert: "xxxx",
9967  ca: ["xxxx"],
9968  password: "xxxx",
9969  protocols: socket.Protocol.TLSv12,
9970  useRemoteCipherPrefer: true,
9971  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9972  cipherSuite: "AES256-SHA256"
9973}
9974let tlsConnectOptions: socket.TLSConnectOptions = {
9975  address: netAddress,
9976  secureOptions: tlsSecureOptions,
9977  ALPNProtocols: ["spdy/1", "http/1.1"]
9978}
9979tlsServer.listen(tlsConnectOptions).then(() => {
9980  console.log("listen callback success");
9981}).catch((err: BusinessError) => {
9982  console.error("failed" + err);
9983});
9984
9985let callback = (value: socket.SocketMessageInfo) => {
9986  let messageView = '';
9987  for (let i: number = 0; i < value.message.byteLength; i++) {
9988    let uint8Array = new Uint8Array(value.message)
9989    let messages = uint8Array[i]
9990    let message = String.fromCharCode(messages);
9991    messageView += message;
9992  }
9993  console.log('on message message: ' + JSON.stringify(messageView));
9994  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
9995}
9996tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9997  client.on('message', callback);
9998  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
9999  client.off('message', callback);
10000  client.off('message');
10001});
10002```
10003
10004### on('close')<sup>10+</sup>
10005
10006on(type: 'close', callback: Callback\<void\>): void
10007
10008订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
10009
10010**系统能力**:SystemCapability.Communication.NetStack
10011
10012**参数:**
10013
10014| 参数名   | 类型             | 必填 | 说明                                |
10015| -------- | ---------------- | ---- | ----------------------------------- |
10016| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
10017| callback | Callback\<void\> | 是   | 回调函数。成功时返回空,失败时返回错误码、错误信息。    |
10018
10019**错误码:**
10020
10021| 错误码ID | 错误信息         |
10022| -------- | ---------------- |
10023| 401      | Parameter error. |
10024
10025**示例:**
10026
10027```ts
10028import { socket } from '@kit.NetworkKit';
10029import { BusinessError } from '@kit.BasicServicesKit';
10030
10031let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
10032let netAddress: socket.NetAddress = {
10033  address: '192.168.xx.xxx',
10034  port: 8080
10035}
10036let tlsSecureOptions: socket.TLSSecureOptions = {
10037  key: "xxxx",
10038  cert: "xxxx",
10039  ca: ["xxxx"],
10040  password: "xxxx",
10041  protocols: socket.Protocol.TLSv12,
10042  useRemoteCipherPrefer: true,
10043  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
10044  cipherSuite: "AES256-SHA256"
10045}
10046let tlsConnectOptions: socket.TLSConnectOptions = {
10047  address: netAddress,
10048  secureOptions: tlsSecureOptions,
10049  ALPNProtocols: ["spdy/1", "http/1.1"]
10050}
10051tlsServer.listen(tlsConnectOptions).then(() => {
10052  console.log("listen callback success");
10053}).catch((err: BusinessError) => {
10054  console.error("failed" + err);
10055});
10056tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
10057  client.on('close', () => {
10058    console.log("on close success")
10059  });
10060});
10061```
10062
10063### off('close')<sup>10+</sup>
10064
10065off(type: 'close', callback?: Callback\<void\>): void
10066
10067取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
10068
10069**系统能力**:SystemCapability.Communication.NetStack
10070
10071**参数:**
10072
10073| 参数名   | 类型             | 必填 | 说明                                |
10074| -------- | ---------------- | ---- | ----------------------------------- |
10075| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
10076| callback | Callback\<void\> | 否   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                         |
10077
10078**错误码:**
10079
10080| 错误码ID | 错误信息         |
10081| -------- | ---------------- |
10082| 401      | Parameter error. |
10083
10084**示例:**
10085
10086```ts
10087import { socket } from '@kit.NetworkKit';
10088import { BusinessError } from '@kit.BasicServicesKit';
10089
10090let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
10091let netAddress: socket.NetAddress = {
10092  address: '192.168.xx.xxx',
10093  port: 8080
10094}
10095let tlsSecureOptions: socket.TLSSecureOptions = {
10096  key: "xxxx",
10097  cert: "xxxx",
10098  ca: ["xxxx"],
10099  password: "xxxx",
10100  protocols: socket.Protocol.TLSv12,
10101  useRemoteCipherPrefer: true,
10102  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
10103  cipherSuite: "AES256-SHA256"
10104}
10105let tlsConnectOptions: socket.TLSConnectOptions = {
10106  address: netAddress,
10107  secureOptions: tlsSecureOptions,
10108  ALPNProtocols: ["spdy/1", "http/1.1"]
10109}
10110tlsServer.listen(tlsConnectOptions).then(() => {
10111  console.log("listen callback success");
10112}).catch((err: BusinessError) => {
10113  console.error("failed" + err);
10114});
10115
10116let callback = () => {
10117  console.log("on close success");
10118}
10119tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
10120  client.on('close', callback);
10121  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
10122  client.off('close', callback);
10123  client.off('close');
10124});
10125```
10126
10127### on('error')<sup>10+</sup>
10128
10129on(type: 'error', callback: ErrorCallback): void
10130
10131订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
10132
10133**系统能力**:SystemCapability.Communication.NetStack
10134
10135**参数:**
10136
10137| 参数名   | 类型          | 必填 | 说明                                 |
10138| -------- | ------------- | ---- | ------------------------------------ |
10139| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
10140| callback | ErrorCallback | 是   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                        |
10141
10142**错误码:**
10143
10144| 错误码ID | 错误信息         |
10145| -------- | ---------------- |
10146| 401      | Parameter error. |
10147
10148**示例:**
10149
10150```ts
10151import { socket } from '@kit.NetworkKit';
10152import { BusinessError } from '@kit.BasicServicesKit';
10153
10154let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
10155let netAddress: socket.NetAddress = {
10156  address: '192.168.xx.xxx',
10157  port: 8080
10158}
10159let tlsSecureOptions: socket.TLSSecureOptions = {
10160  key: "xxxx",
10161  cert: "xxxx",
10162  ca: ["xxxx"],
10163  password: "xxxx",
10164  protocols: socket.Protocol.TLSv12,
10165  useRemoteCipherPrefer: true,
10166  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
10167  cipherSuite: "AES256-SHA256"
10168}
10169let tlsConnectOptions: socket.TLSConnectOptions = {
10170  address: netAddress,
10171  secureOptions: tlsSecureOptions,
10172  ALPNProtocols: ["spdy/1", "http/1.1"]
10173}
10174tlsServer.listen(tlsConnectOptions).then(() => {
10175  console.log("listen callback success");
10176}).catch((err: BusinessError) => {
10177  console.error("failed" + err);
10178});
10179
10180tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
10181  client.on('error', (err: BusinessError) => {
10182    console.error("on error, err:" + JSON.stringify(err))
10183  });
10184});
10185```
10186
10187### off('error')<sup>10+</sup>
10188
10189off(type: 'error', callback?: ErrorCallback): void
10190
10191取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
10192
10193**系统能力**:SystemCapability.Communication.NetStack
10194
10195**参数:**
10196
10197| 参数名   | 类型          | 必填 | 说明                                 |
10198| -------- | ------------- | ---- | ------------------------------------ |
10199| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
10200| callback | ErrorCallback | 否   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                        |
10201
10202**错误码:**
10203
10204| 错误码ID | 错误信息         |
10205| -------- | ---------------- |
10206| 401      | Parameter error. |
10207
10208**示例:**
10209
10210```ts
10211import { socket } from '@kit.NetworkKit';
10212import { BusinessError } from '@kit.BasicServicesKit';
10213
10214let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
10215let netAddress: socket.NetAddress = {
10216  address: '192.168.xx.xxx',
10217  port: 8080
10218}
10219let tlsSecureOptions: socket.TLSSecureOptions = {
10220  key: "xxxx",
10221  cert: "xxxx",
10222  ca: ["xxxx"],
10223  password: "xxxx",
10224  protocols: socket.Protocol.TLSv12,
10225  useRemoteCipherPrefer: true,
10226  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
10227  cipherSuite: "AES256-SHA256"
10228}
10229let tlsConnectOptions: socket.TLSConnectOptions = {
10230  address: netAddress,
10231  secureOptions: tlsSecureOptions,
10232  ALPNProtocols: ["spdy/1", "http/1.1"]
10233}
10234tlsServer.listen(tlsConnectOptions).then(() => {
10235  console.log("listen callback success");
10236}).catch((err: BusinessError) => {
10237  console.error("failed" + err);
10238});
10239
10240let callback = (err: BusinessError) => {
10241  console.error("on error, err:" + JSON.stringify(err));
10242}
10243tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
10244  client.on('error', callback);
10245  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
10246  client.off('error', callback);
10247  client.off('error');
10248});
10249```
10250