1# @ohos.net.socket (Socket连接)
2
3本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。
4
5> **说明:**
6>
7> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8
9## 导入模块
10
11```ts
12import { socket } from '@kit.NetworkKit';
13```
14
15## socket.constructUDPSocketInstance
16
17constructUDPSocketInstance(): UDPSocket
18
19创建一个UDPSocket对象。
20
21**系统能力**:SystemCapability.Communication.NetStack
22
23**返回值:**
24
25| 类型                               | 说明                    |
26|  --------------------------------- |  ---------------------- |
27| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 |
28
29**示例:**
30
31```ts
32import { socket } from '@kit.NetworkKit';
33let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
34```
35
36## UDPSocket
37
38UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。
39
40### bind
41
42bind(address: NetAddress, callback: AsyncCallback\<void\>): void
43
44绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。
45
46**需要权限**:ohos.permission.INTERNET
47
48**系统能力**:SystemCapability.Communication.NetStack
49
50**参数:**
51
52| 参数名   | 类型                               | 必填 | 说明                                                   |
53| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
54| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
55| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。        |
56
57**错误码:**
58
59| 错误码ID | 错误信息                 |
60| ------- | ----------------------- |
61| 401     | Parameter error.        |
62| 201     | Permission denied.      |
63
64**示例:**
65
66```ts
67import { socket } from '@kit.NetworkKit';
68import { BusinessError } from '@kit.BasicServicesKit';
69
70let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
71let bindAddr: socket.NetAddress = {
72  address: '192.168.xx.xxx',
73  port: 1234
74}
75udp.bind(bindAddr, (err: BusinessError) => {
76  if (err) {
77    console.log('bind fail');
78    return;
79  }
80  console.log('bind success');
81});
82```
83
84### bind
85
86bind(address: NetAddress): Promise\<void\>
87
88绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。
89
90**需要权限**:ohos.permission.INTERNET
91
92**系统能力**:SystemCapability.Communication.NetStack
93
94**参数:**
95
96| 参数名  | 类型                               | 必填 | 说明                                                   |
97| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
98| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
99
100**错误码:**
101
102| 错误码ID | 错误信息                 |
103| ------- | ----------------------- |
104| 401     | Parameter error.        |
105| 201     | Permission denied.      |
106
107**返回值:**
108
109| 类型            | 说明                                       |
110|  -------------- |  ----------------------------------------- |
111| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 |
112
113**示例:**
114
115```ts
116import { socket } from '@kit.NetworkKit';
117import { BusinessError } from '@kit.BasicServicesKit';
118
119let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
120let bindAddr: socket.NetAddress = {
121  address: '192.168.xx.xxx',
122  port: 8080
123}
124udp.bind(bindAddr).then(() => {
125  console.log('bind success');
126}).catch((err: BusinessError) => {
127  console.log('bind fail');
128});
129```
130
131### send
132
133send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void
134
135通过UDPSocket连接发送数据。使用callback方式作为异步方法。
136
137发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
138
139**需要权限**:ohos.permission.INTERNET
140
141**系统能力**:SystemCapability.Communication.NetStack
142
143**参数:**
144
145| 参数名   | 类型                                     | 必填 | 说明                                                         |
146| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
147| options  | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
148| callback | AsyncCallback\<void\>                    | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。                                                  |
149
150**错误码:**
151
152| 错误码ID | 错误信息                 |
153| ------- | ----------------------- |
154| 401     | Parameter error.        |
155| 201     | Permission denied.      |
156
157**示例:**
158
159```ts
160import { socket } from '@kit.NetworkKit';
161import { BusinessError } from '@kit.BasicServicesKit';
162
163let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
164let netAddress: socket.NetAddress = {
165  address: '192.168.xx.xxx',
166  port: 8080
167}
168let sendOptions: socket.UDPSendOptions = {
169  data: 'Hello, server!',
170  address: netAddress
171}
172udp.send(sendOptions, (err: BusinessError) => {
173  if (err) {
174    console.log('send fail');
175    return;
176  }
177  console.log('send success');
178});
179```
180
181### send
182
183send(options: UDPSendOptions): Promise\<void\>
184
185通过UDPSocket连接发送数据。使用Promise方式作为异步方法。
186
187发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
188
189**需要权限**:ohos.permission.INTERNET
190
191**系统能力**:SystemCapability.Communication.NetStack
192
193**参数:**
194
195| 参数名  | 类型                                     | 必填 | 说明                                                         |
196| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
197| options | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
198
199**错误码:**
200
201| 错误码ID | 错误信息                 |
202| ------- | ----------------------- |
203| 401     | Parameter error.        |
204| 201     | Permission denied.      |
205
206**返回值:**
207
208| 类型            | 说明                                           |
209|  -------------- |  --------------------------------------------- |
210| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 |
211
212**示例:**
213
214```ts
215import { socket } from '@kit.NetworkKit';
216import { BusinessError } from '@kit.BasicServicesKit';
217
218let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
219let netAddress: socket.NetAddress = {
220  address: '192.168.xx.xxx',
221  port: 8080
222}
223let sendOptions: socket.UDPSendOptions = {
224  data: 'Hello, server!',
225  address: netAddress
226}
227udp.send(sendOptions).then(() => {
228  console.log('send success');
229}).catch((err: BusinessError) => {
230  console.log('send fail');
231});
232```
233
234### close
235
236close(callback: AsyncCallback\<void\>): void
237
238关闭UDPSocket连接。使用callback方式作为异步方法。
239
240**需要权限**:ohos.permission.INTERNET
241
242**系统能力**:SystemCapability.Communication.NetStack
243
244**参数:**
245
246| 参数名   | 类型                  | 必填 | 说明       |
247| -------- | --------------------- | ---- | ---------- |
248| callback | AsyncCallback\<void\> | 是   | 回调函数。关闭UDPSocket连接后触发回调函数。 |
249
250**错误码:**
251
252| 错误码ID | 错误信息                 |
253| ------- | ----------------------- |
254| 201     | Permission denied.      |
255
256**示例:**
257
258```ts
259import { socket } from '@kit.NetworkKit';
260import { BusinessError } from '@kit.BasicServicesKit';
261
262let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
263udp.close((err: BusinessError) => {
264  if (err) {
265    console.log('close fail');
266    return;
267  }
268  console.log('close success');
269})
270```
271
272### close
273
274close(): Promise\<void\>
275
276关闭UDPSocket连接。使用Promise方式作为异步方法。
277
278**需要权限**:ohos.permission.INTERNET
279
280**系统能力**:SystemCapability.Communication.NetStack
281
282**错误码:**
283
284| 错误码ID | 错误信息                 |
285| ------- | ----------------------- |
286| 201     | Permission denied.      |
287
288**返回值:**
289
290| 类型            | 说明                                       |
291|  -------------- |  ----------------------------------------- |
292| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 |
293
294**示例:**
295
296```ts
297import { socket } from '@kit.NetworkKit';
298import { BusinessError } from '@kit.BasicServicesKit';
299
300let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
301udp.close().then(() => {
302  console.log('close success');
303}).catch((err: BusinessError) => {
304  console.log('close fail');
305});
306```
307
308### getState
309
310getState(callback: AsyncCallback\<SocketStateBase\>): void
311
312获取UDPSocket状态。使用callback方式作为异步方法。
313
314> **说明:**
315> bind方法调用成功后,才可调用此方法。
316
317**需要权限**:ohos.permission.INTERNET
318
319**系统能力**:SystemCapability.Communication.NetStack
320
321**参数:**
322
323| 参数名   | 类型                                                   | 必填 | 说明       |
324| -------- | ------------------------------------------------------ | ---- | ---------- |
325| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 |
326
327**错误码:**
328
329| 错误码ID | 错误信息                 |
330| ------- | ----------------------- |
331| 201     | Permission denied.      |
332
333**示例:**
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, (err: BusinessError) => {
345  if (err) {
346    console.log('bind fail');
347    return;
348  }
349  console.log('bind success');
350  udp.getState((err: BusinessError, data: socket.SocketStateBase) => {
351    if (err) {
352      console.log('getState fail');
353      return;
354    }
355    console.log('getState success:' + JSON.stringify(data));
356  })
357})
358```
359
360### getState
361
362getState(): Promise\<SocketStateBase\>
363
364获取UDPSocket状态。使用Promise方式作为异步方法。
365
366> **说明:**
367> bind方法调用成功后,才可调用此方法。
368
369**需要权限**:ohos.permission.INTERNET
370
371**系统能力**:SystemCapability.Communication.NetStack
372
373**错误码:**
374
375| 错误码ID | 错误信息                 |
376| ------- | ----------------------- |
377| 201     | Permission denied.      |
378
379**返回值:**
380
381| 类型                                             | 说明                                       |
382|  ----------------------------------------------- |  ----------------------------------------- |
383| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 |
384
385**示例:**
386
387```ts
388import { socket } from '@kit.NetworkKit';
389import { BusinessError } from '@kit.BasicServicesKit';
390
391let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
392let bindAddr: socket.NetAddress = {
393  address: '192.168.xx.xxx',
394  port: 8080
395}
396udp.bind(bindAddr, (err: BusinessError) => {
397  if (err) {
398    console.log('bind fail');
399    return;
400  }
401  console.log('bind success');
402  udp.getState().then((data: socket.SocketStateBase) => {
403    console.log('getState success:' + JSON.stringify(data));
404  }).catch((err: BusinessError) => {
405    console.log('getState fail' + JSON.stringify(err));
406  });
407});
408```
409
410### setExtraOptions
411
412setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void
413
414设置UDPSocket连接的其他属性。使用callback方式作为异步方法。
415
416> **说明:**
417> bind方法调用成功后,才可调用此方法。
418
419**需要权限**:ohos.permission.INTERNET
420
421**系统能力**:SystemCapability.Communication.NetStack
422
423**参数:**
424
425| 参数名   | 类型                                     | 必填 | 说明                                                         |
426| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
427| options  | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
428| callback | AsyncCallback\<void\>                    | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。                    |
429
430**错误码:**
431
432| 错误码ID | 错误信息                 |
433| ------- | ----------------------- |
434| 401     | Parameter error.        |
435| 201     | Permission denied.      |
436
437**示例:**
438
439```ts
440import { socket } from '@kit.NetworkKit';
441import { BusinessError } from '@kit.BasicServicesKit';
442
443let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
444
445let bindAddr: socket.NetAddress = {
446  address: '192.168.xx.xxx',
447  port: 8080
448}
449udp.bind(bindAddr, (err: BusinessError) => {
450  if (err) {
451    console.log('bind fail');
452    return;
453  }
454  console.log('bind success');
455  let udpextraoptions: socket.UDPExtraOptions = {
456    receiveBufferSize: 1000,
457    sendBufferSize: 1000,
458    reuseAddress: false,
459    socketTimeout: 6000,
460    broadcast: true
461  }
462  udp.setExtraOptions(udpextraoptions, (err: BusinessError) => {
463    if (err) {
464      console.log('setExtraOptions fail');
465      return;
466    }
467    console.log('setExtraOptions success');
468  })
469})
470```
471
472### setExtraOptions
473
474setExtraOptions(options: UDPExtraOptions): Promise\<void\>
475
476设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。
477
478> **说明:**
479> bind方法调用成功后,才可调用此方法。
480
481**需要权限**:ohos.permission.INTERNET
482
483**系统能力**:SystemCapability.Communication.NetStack
484
485**参数:**
486
487| 参数名  | 类型                                     | 必填 | 说明                                                         |
488| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
489| options | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
490
491**返回值:**
492
493| 类型            | 说明                                                 |
494|  -------------- |  --------------------------------------------------- |
495| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 |
496
497**错误码:**
498
499| 错误码ID | 错误信息                 |
500| ------- | ----------------------- |
501| 401     | Parameter error.        |
502| 201     | Permission denied.      |
503
504**示例:**
505
506```ts
507import { socket } from '@kit.NetworkKit';
508import { BusinessError } from '@kit.BasicServicesKit';
509
510let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
511
512let bindAddr: socket.NetAddress = {
513  address: '192.168.xx.xxx',
514  port: 8080
515}
516udp.bind(bindAddr, (err: BusinessError) => {
517  if (err) {
518    console.log('bind fail');
519    return;
520  }
521  console.log('bind success');
522  let udpextraoptions: socket.UDPExtraOptions = {
523    receiveBufferSize: 1000,
524    sendBufferSize: 1000,
525    reuseAddress: false,
526    socketTimeout: 6000,
527    broadcast: true
528  }
529  udp.setExtraOptions(udpextraoptions).then(() => {
530    console.log('setExtraOptions success');
531  }).catch((err: BusinessError) => {
532    console.log('setExtraOptions fail');
533  });
534})
535```
536
537### getLocalAddress<sup>12+</sup>
538
539getLocalAddress(): Promise\<NetAddress\>
540
541获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。
542
543> **说明:**
544> bind方法调用成功后,才可调用此方法。
545
546**系统能力**:SystemCapability.Communication.NetStack
547
548**返回值:**
549
550| 类型            | 说明                                                 |
551|  -------------- |  --------------------------------------------------- |
552| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
553
554**错误码:**
555
556| 错误码ID | 错误信息                                    |
557| -------- | ------------------------------------------- |
558| 2300002  | System internal error.                      |
559| 2301009  | Bad file descriptor.                            |
560| 2303188  | Socket operation on non-socket. |
561
562**示例:**
563
564```ts
565import { socket } from '@kit.NetworkKit';
566import { BusinessError } from '@kit.BasicServicesKit';
567
568let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
569
570let bindAddr: socket.NetAddress = {
571  address: '192.168.xx.xxx',
572  port: 8080
573}
574udp.bind(bindAddr).then(() => {
575  console.info('bind success');
576  udp.getLocalAddress().then((localAddress: socket.NetAddress) => {
577        console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress));
578      }).catch((err: BusinessError) => {
579        console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err));
580      })
581}).catch((err: BusinessError) => {
582  console.error('bind fail');
583});
584```
585
586### on('message')
587
588on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
589
590订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
591
592**系统能力**:SystemCapability.Communication.NetStack
593
594**参数:**
595
596| 参数名   | 类型                                                         | 必填 | 说明                                      |
597| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
598| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
599| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。       |
600
601**示例:**
602
603```ts
604import { socket } from '@kit.NetworkKit';
605import { BusinessError } from '@kit.BasicServicesKit';
606
607let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
608
609let messageView = '';
610udp.on('message', (value: socket.SocketMessageInfo) => {
611  for (let i: number = 0; i < value.message.byteLength; i++) {
612    let uint8Array = new Uint8Array(value.message) 
613    let messages = uint8Array[i]
614    let message = String.fromCharCode(messages);
615    messageView += message;
616  }
617  console.log('on message message: ' + JSON.stringify(messageView));
618  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
619});
620```
621
622### off('message')
623
624off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
625
626取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
627
628**系统能力**:SystemCapability.Communication.NetStack
629
630**参数:**
631
632| 参数名   | 类型                                                         | 必填 | 说明                                      |
633| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
634| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
635| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。返回取消订阅某类事件后UDPSocket连接的状态信息。                              |
636
637**示例:**
638
639```ts
640import { socket } from '@kit.NetworkKit';
641import { BusinessError } from '@kit.BasicServicesKit';
642
643let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
644let messageView = '';
645let callback = (value: socket.SocketMessageInfo) => {
646  for (let i: number = 0; i < value.message.byteLength; i++) {
647    let uint8Array = new Uint8Array(value.message) 
648    let messages = uint8Array[i]
649    let message = String.fromCharCode(messages);
650    messageView += message;
651  }
652  console.log('on message message: ' + JSON.stringify(messageView));
653  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
654}
655udp.on('message', callback);
656// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
657udp.off('message', callback);
658udp.off('message');
659```
660
661### on('listening' | 'close')
662
663on(type: 'listening' | 'close', callback: Callback\<void\>): void
664
665订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
666
667**系统能力**:SystemCapability.Communication.NetStack
668
669**参数:**
670
671| 参数名   | 类型             | 必填 | 说明                                                         |
672| -------- | ---------------- | ---- | ------------------------------------------------------------ |
673| type     | string           | 是   | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
674| callback | Callback\<void\> | 是   | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。           |
675
676**示例:**
677
678```ts
679import { socket } from '@kit.NetworkKit';
680import { BusinessError } from '@kit.BasicServicesKit';
681
682let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
683udp.on('listening', () => {
684  console.log("on listening success");
685});
686udp.on('close', () => {
687  console.log("on close success");
688});
689```
690
691### off('listening' | 'close')
692
693off(type: 'listening' | 'close', callback?: Callback\<void\>): void
694
695取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
696
697**系统能力**:SystemCapability.Communication.NetStack
698
699**参数:**
700
701| 参数名   | 类型             | 必填 | 说明                                                         |
702| -------- | ---------------- | ---- | ------------------------------------------------------------ |
703| type     | string           | 是   | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
704| callback | Callback\<void\> | 否   | 回调函数。取消订阅UDPSocket连接的数据包消息事件或关闭事件后触发回调函数。     |
705
706**示例:**
707
708```ts
709import { socket } from '@kit.NetworkKit';
710import { BusinessError } from '@kit.BasicServicesKit';
711
712let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
713let callback1 = () => {
714  console.log("on listening, success");
715}
716udp.on('listening', callback1);
717// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
718udp.off('listening', callback1);
719udp.off('listening');
720let callback2 = () => {
721  console.log("on close, success");
722}
723udp.on('close', callback2);
724// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
725udp.off('close', callback2);
726udp.off('close');
727```
728
729### on('error')
730
731on(type: 'error', callback: ErrorCallback): void
732
733订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
734
735**系统能力**:SystemCapability.Communication.NetStack
736
737**参数:**
738
739| 参数名   | 类型          | 必填 | 说明                                 |
740| -------- | ------------- | ---- | ------------------------------------ |
741| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
742| callback | ErrorCallback | 是   | 回调函数。UDPSocket连接发生error事件后触发回调函数。                      |
743
744**示例:**
745
746```ts
747import { socket } from '@kit.NetworkKit';
748import { BusinessError } from '@kit.BasicServicesKit';
749
750let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
751udp.on('error', (err: BusinessError) => {
752  console.log("on error, err:" + JSON.stringify(err))
753});
754```
755
756### off('error')
757
758off(type: 'error', callback?: ErrorCallback): void
759
760取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
761
762**系统能力**:SystemCapability.Communication.NetStack
763
764**参数:**
765
766| 参数名   | 类型          | 必填 | 说明                                 |
767| -------- | ------------- | ---- | ------------------------------------ |
768| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
769| callback | ErrorCallback | 否   | 回调函数。UDPSocket连接发生error事件后。      |
770
771**示例:**
772
773```ts
774import { socket } from '@kit.NetworkKit';
775import { BusinessError } from '@kit.BasicServicesKit';
776
777let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
778let callback = (err: BusinessError) => {
779  console.log("on error, err:" + JSON.stringify(err));
780}
781udp.on('error', callback);
782// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
783udp.off('error', callback);
784udp.off('error');
785```
786
787## NetAddress
788
789目标地址信息。
790
791**系统能力**:SystemCapability.Communication.NetStack
792
793| 名称  | 类型   | 必填 | 说明                                                         |
794| ------- | ------ | ---- | ------------------------------------------------------------ |
795| address<sup>11+</sup> | string | 是   | 本地绑定的ip地址。                                           |
796| port    | number | 否   | 端口号 ,范围0~65535。如果不指定系统随机分配端口。           |
797| family  | number | 否   | 网络协议类型,可选类型:<br />- 1:IPv4<br />- 2:IPv6<br />默认为1。如果地址为IPV6类型,该字段必须被显式指定为2。 |
798## UDPSendOptions
799
800UDPSocket发送参数。
801
802**系统能力**:SystemCapability.Communication.NetStack
803
804| 名称  | 类型                               | 必填 | 说明           |
805| ------- | ---------------------------------- | ---- | -------------- |
806| data    | string \| ArrayBuffer                          | 是   | 发送的数据。   |
807| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
808
809## UDPExtraOptions
810
811UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。
812
813**系统能力**:SystemCapability.Communication.NetStack
814
815| 名称            | 类型    | 必填 | 说明                             |
816| ----------------- | ------- | ---- | -------------------------------- |
817| broadcast         | boolean | 否   | 是否可以发送广播。默认为false。  |
818
819## SocketMessageInfo<sup>11+</sup>
820
821socket连接信息
822
823**系统能力**:SystemCapability.Communication.NetStack
824
825| 名称        | 类型   | 必填 | 说明                                  |
826| ---------- | ------ | ---- | ------------------------------------- |
827| message    | ArrayBuffer | 是   | 接收的事件消息。 |
828| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是   | socket连接信息。 |
829
830## SocketStateBase
831
832Socket的状态信息。
833
834**系统能力**:SystemCapability.Communication.NetStack
835
836| 名称      | 类型    | 必填 | 说明       |
837| ----------- | ------- | ---- | ---------- |
838| isBound     | boolean | 是   | 是否绑定。 |
839| isClose     | boolean | 是   | 是否关闭。 |
840| isConnected | boolean | 是   | 是否连接。 |
841
842## SocketRemoteInfo
843
844Socket的连接信息。
845
846**系统能力**:SystemCapability.Communication.NetStack
847
848| 名称  | 类型   | 必填 | 说明                                                         |
849| ------- | ------ | ---- | ------------------------------------------------------------ |
850| address | string | 是   | 本地绑定的ip地址。                                           |
851| family  | 'IPv4' \| 'IPv6' | 是   | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 |
852| port    | number | 是   | 端口号,范围0~65535。                                        |
853| size    | number | 是   | 服务器响应信息的字节长度。                                   |
854
855## UDP 错误码说明
856
857UDP 其余错误码映射形式为:2301000 + Linux内核错误码。
858
859错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
860
861## socket.constructMulticastSocketInstance<sup>11+</sup>
862
863constructMulticastSocketInstance(): MulticastSocket
864
865创建一个MulticastSocket对象。
866
867**系统能力**:SystemCapability.Communication.NetStack
868
869**返回值:**
870
871| 类型                               | 说明                    |
872| ----------------------------------- | ----------------------------- |
873| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 |
874
875**示例:**
876
877```ts
878import { socket } from '@kit.NetworkKit';
879let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
880```
881## MulticastSocket<sup>11+</sup>
882
883MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。
884
885### addMembership<sup>11+</sup>
886
887addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void;
888
889加入多播组。使用callback方法作为异步方法。
890
891> **说明:**
892> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
893> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
894
895**需要权限**:ohos.permission.INTERNET
896
897**系统能力**:SystemCapability.Communication.NetStack
898
899**参数:**
900
901| 参数名             | 类型                           | 必填 | 说明                                       |
902| ----------------- | ----------------------------- | ---- | ----------------------------------------- |
903| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
904| callback          | AsyncCallback\<void\>         |  是  | 回调函数。失败返回错误码、错误信息。                                 |
905
906**错误码:**
907
908| 错误码ID | 错误信息                 |
909| ------- | ----------------------- |
910| 401     | Parameter error.        |
911| 201     | Permission denied.      |
912| 2301022 | Invalid argument.       |
913| 2301088 | Not a socket.           |
914| 2301098 | Address in use.         |
915
916**示例:**
917
918```ts
919import { socket } from '@kit.NetworkKit';
920
921let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
922let addr: socket.NetAddress = {
923  address: '239.255.0.1',
924  port: 8080
925}
926multicast.addMembership(addr, (err: Object) => {
927  if (err) {
928    console.log('add membership fail, err: ' + JSON.stringify(err));
929    return;
930  }
931  console.log('add membership success');
932})
933```
934
935### addMembership<sup>11+</sup>
936
937addMembership(multicastAddress: NetAddress): Promise\<void\>;
938
939加入多播组。使用Promise方法作为异步方法。。
940
941> **说明:**
942> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
943> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
944
945**需要权限**:ohos.permission.INTERNET
946
947**系统能力**:SystemCapability.Communication.NetStack
948
949**参数:**
950
951| 参数名             | 类型                           | 必填 | 说明                                           |
952| ----------------- | ----------------------------- | ---- | --------------------------------------------  |
953| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
954
955**返回值:**
956
957| 类型            | 说明                                               |
958|  -------------- |  -----------------------------------------------  |
959| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 |
960
961**错误码:**
962
963| 错误码ID | 错误信息                 |
964| ------- | ----------------------- |
965| 401     | Parameter error.        |
966| 201     | Permission denied.      |
967| 2301088 | Not a socket.           |
968| 2301098 | Address in use.         |
969
970**示例:**
971
972```ts
973import { socket } from '@kit.NetworkKit';
974
975let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
976let addr: socket.NetAddress = {
977  address: '239.255.0.1',
978  port: 8080
979}
980multicast.addMembership(addr).then(() => {
981  console.log('addMembership success');
982}).catch((err: Object) => {
983  console.log('addMembership fail');
984});
985```
986
987### dropMembership<sup>11+</sup>
988
989dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void;
990
991退出多播组。使用callback方法作为异步方法。
992
993> **说明:**
994> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
995> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
996
997**需要权限**:ohos.permission.INTERNET
998
999**系统能力**:SystemCapability.Communication.NetStack
1000
1001**参数:**
1002
1003| 参数名             | 类型                           | 必填 | 说明                                         |
1004| ----------------- | ----------------------------- | ---- | ------------------------------------------- |
1005| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。   |
1006| callback          | AsyncCallback\<void\>         |  是  | 回调函数。失败返回错误码、错误信息。|
1007
1008**错误码:**
1009
1010| 错误码ID | 错误信息                 |
1011| ------- | ----------------------- |
1012| 401     | Parameter error.        |
1013| 201     | Permission denied.      |
1014| 2301088 | Not a socket.           |
1015| 2301098 | Address in use.         |
1016
1017**示例:**
1018
1019```ts
1020import { socket } from '@kit.NetworkKit';
1021
1022let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1023let addr: socket.NetAddress = {
1024  address: '239.255.0.1',
1025  port: 8080
1026}
1027multicast.dropMembership(addr, (err: Object) => {
1028  if (err) {
1029    console.log('drop membership fail, err: ' + JSON.stringify(err));
1030    return;
1031  }
1032  console.log('drop membership success');
1033})
1034```
1035
1036### dropMembership<sup>11+</sup>
1037
1038dropMembership(multicastAddress: NetAddress): Promise\<void\>;
1039
1040退出多播组。使用Promise方法作为异步方法。。
1041
1042> **说明:**
1043> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1044> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
1045
1046**需要权限**:ohos.permission.INTERNET
1047
1048**系统能力**:SystemCapability.Communication.NetStack
1049
1050**参数:**
1051
1052| 参数名             | 类型                                   | 必填 | 说明                                           |
1053| ----------------- | ------------------------------------- | ---- | --------------------------------------------  |
1054| multicastAddress  | [NetAddress](#netaddress) |  是  | 目标地址信息,参考[NetAddress](#netaddress)。     |
1055
1056**返回值:**
1057
1058| 类型            | 说明                                              |
1059|  -------------- |  ----------------------------------------------- |
1060| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 |
1061
1062**错误码:**
1063
1064| 错误码ID | 错误信息                 |
1065| ------- | ----------------------- |
1066| 401     | Parameter error.        |
1067| 201     | Permission denied.      |
1068| 2301088 | Not a socket.           |
1069| 2301098 | Address in use.         |
1070
1071**示例:**
1072
1073```ts
1074import { socket } from '@kit.NetworkKit';
1075
1076let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1077let addr: socket.NetAddress = {
1078  address: '239.255.0.1',
1079  port: 8080
1080}
1081multicast.dropMembership(addr).then(() => {
1082  console.log('drop membership success');
1083}).catch((err: Object) => {
1084  console.log('drop membership fail');
1085});
1086```
1087
1088### setMulticastTTL<sup>11+</sup>
1089
1090setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void;
1091
1092设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。
1093
1094> **说明:**
1095> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1096> 范围为 0~255,默认值为 1 。
1097> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1098> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1099
1100**系统能力**:SystemCapability.Communication.NetStack
1101
1102**参数:**
1103
1104| 参数名         | 类型                   | 必填 | 说明                         |
1105| ------------- | --------------------- | ---- | ----------------------------- |
1106| ttl           | number                |  是  | ttl设置数值,类型为数字number。 |
1107| callback      | AsyncCallback\<void\> |  是  | 回调函数。失败返回错误码、错误信息。    |
1108
1109**错误码:**
1110
1111| 错误码ID | 错误信息                 |
1112| ------- | ----------------------- |
1113| 401     | Parameter error.        |
1114| 2301022 | Invalid argument.       |
1115| 2301088 | Not a socket.           |
1116
1117**示例:**
1118
1119```ts
1120import { socket } from '@kit.NetworkKit';
1121
1122let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1123let ttl = 8
1124multicast.setMulticastTTL(ttl, (err: Object) => {
1125  if (err) {
1126    console.log('set ttl fail, err: ' + JSON.stringify(err));
1127    return;
1128  }
1129  console.log('set ttl success');
1130})
1131```
1132
1133### setMulticastTTL<sup>11+</sup>
1134
1135setMulticastTTL(ttl: number): Promise\<void\>;
1136
1137设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。。
1138
1139> **说明:**
1140> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1141> 范围为 0~255,默认值为 1 。
1142> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1143> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1144
1145**系统能力**:SystemCapability.Communication.NetStack
1146
1147**参数:**
1148
1149| 参数名         | 类型                   | 必填 | 说明                           |
1150| ------------- | ---------------------- | ---- | ------------------------------ |
1151| ttl           | number                 |  是  | ttl设置数值,类型为数字Number。 |
1152
1153**返回值:**
1154
1155| 类型            | 说明                                             |
1156|  -------------- |  ---------------------------------------------- |
1157| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 |
1158
1159**错误码:**
1160
1161| 错误码ID | 错误信息                 |
1162| ------- | ----------------------- |
1163| 401     | Parameter error.        |
1164| 2301022 | Invalid argument.       |
1165| 2301088 | Not a socket.           |
1166
1167**示例:**
1168
1169```ts
1170import { socket } from '@kit.NetworkKit';
1171
1172let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1173multicast.setMulticastTTL(8).then(() => {
1174  console.log('set ttl success');
1175}).catch((err: Object) => {
1176  console.log('set ttl failed');
1177});
1178```
1179
1180### getMulticastTTL<sup>11+</sup>
1181
1182getMulticastTTL(callback: AsyncCallback\<number\>): void;
1183
1184获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。
1185
1186> **说明:**
1187> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1188> 范围为 0~255,默认值为 1 。
1189> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1190> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1191
1192**系统能力**:SystemCapability.Communication.NetStack
1193
1194**参数:**
1195
1196| 参数名         | 类型                     | 必填 | 说明                         |
1197| ------------- | ----------------------- | ---- | --------------------------- |
1198| callback      | AsyncCallback\<number\> |  是  | 回调函数。失败返回错误码、错误信息。  |
1199
1200**错误码:**
1201
1202| 错误码ID | 错误信息                 |
1203| ------- | ----------------------- |
1204| 401     | Parameter error.        |
1205| 2301088 | Not a socket.           |
1206
1207**示例:**
1208
1209```ts
1210import { socket } from '@kit.NetworkKit';
1211
1212let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1213multicast.getMulticastTTL((err: Object, value: Number) => {
1214  if (err) {
1215    console.log('set ttl fail, err: ' + JSON.stringify(err));
1216    return;
1217  }
1218  console.log('set ttl success, value: ' + JSON.stringify(value));
1219})
1220```
1221
1222### getMulticastTTL<sup>11+</sup>
1223
1224getMulticastTTL(): Promise\<number\>;
1225
1226获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。
1227
1228> **说明:**
1229> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1230> 范围为 0~255,默认值为 1 。
1231> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1232> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1233
1234**系统能力**:SystemCapability.Communication.NetStack
1235
1236**返回值:**
1237
1238| 类型               | 说明                        |
1239| ----------------   | --------------------------- |
1240| Promise\<number\> | 以Promise形式返回当前TTL数值。 |
1241
1242**错误码:**
1243
1244| 错误码ID | 错误信息                |
1245| ------- | ----------------------- |
1246| 401     | Parameter error.        |
1247| 2301088 | Not a socket.           |
1248
1249**示例:**
1250
1251```ts
1252import { socket } from '@kit.NetworkKit';
1253
1254let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1255multicast.getMulticastTTL().then((value: Number) => {
1256  console.log('ttl: ', JSON.stringify(value));
1257}).catch((err: Object) => {
1258  console.log('set ttl failed');
1259});
1260```
1261
1262### setLoopbackMode<sup>11+</sup>
1263
1264setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void;
1265
1266设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1267
1268> **说明:**
1269> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1270> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1271> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1272
1273**系统能力**:SystemCapability.Communication.NetStack
1274
1275**参数:**
1276
1277| 参数名         | 类型                  | 必填 | 说明                         |
1278| ------------- | --------------------- | ---- | ---------------------------- |
1279| flag          | boolean               |  是  | ttl设置数值,类型为boolen 。  |
1280| callback      | AsyncCallback\<void\> |  是  | 回调函数。失败返回错误码、错误信息。    |
1281
1282**错误码:**
1283
1284| 错误码ID | 错误信息                 |
1285| ------- | ----------------------- |
1286| 401     | Parameter error.        |
1287| 2301088 | Not a socket.           |
1288
1289**示例:**
1290
1291```ts
1292import { socket } from '@kit.NetworkKit';
1293
1294let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1295multicast.setLoopbackMode(false, (err: Object) => {
1296  if (err) {
1297    console.log('set loopback mode fail, err: ' + JSON.stringify(err));
1298    return;
1299  }
1300  console.log('set loopback mode success');
1301})
1302```
1303
1304### setLoopbackMode<sup>11+</sup>
1305
1306setLoopbackMode(flag: boolean): Promise\<void\>;
1307
1308设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1309
1310> **说明:**
1311> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1312> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1313> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1314
1315**系统能力**:SystemCapability.Communication.NetStack
1316
1317**参数:**
1318
1319| 参数名         | 类型                   | 必填 | 说明                             |
1320| ------------- | ---------------------- | ---- | -------------------------------- |
1321| flag          | boolean                |  是  | 环回模式标志位,类型为数字boolean。|
1322
1323**返回值:**
1324
1325| 类型            | 说明                                             |
1326|  -------------- |  ---------------------------------------------- |
1327| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 |
1328
1329**错误码:**
1330
1331| 错误码ID | 错误信息                |
1332| ------- | ----------------------- |
1333| 401     | Parameter error.        |
1334| 2301088 | Not a socket.           |
1335
1336**示例:**
1337
1338```ts
1339import { socket } from '@kit.NetworkKit';
1340
1341let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1342multicast.setLoopbackMode(false).then(() => {
1343  console.log('set loopback mode success');
1344}).catch((err: Object) => {
1345  console.log('set loopback mode failed');
1346});
1347```
1348
1349### getLoopbackMode<sup>11+</sup>
1350
1351getLoopbackMode(callback: AsyncCallback\<boolean\>): void;
1352
1353获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1354
1355> **说明:**
1356> 用于获取当前环回模式开启或关闭的状态。
1357> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1358> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1359
1360**系统能力**:SystemCapability.Communication.NetStack
1361
1362**参数:**
1363
1364| 参数名         | 类型                     | 必填 | 说明                         |
1365| ------------- | ----------------------- | ---- | --------------------------- |
1366| callback      | AsyncCallback\<number\> |  是  | 回调函数。失败返回错误码、错误信息。  |
1367
1368**错误码:**
1369
1370| 错误码ID | 错误信息                |
1371| ------- | ----------------------- |
1372| 401     | Parameter error.        |
1373| 2301088 | Not a socket.           |
1374
1375**示例:**
1376
1377```ts
1378import { socket } from '@kit.NetworkKit';
1379
1380let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1381multicast.getLoopbackMode((err: Object, value: Boolean) => {
1382  if (err) {
1383    console.log('get loopback mode fail, err: ' + JSON.stringify(err));
1384    return;
1385  }
1386  console.log('get loopback mode success, value: ' + JSON.stringify(value));
1387})
1388```
1389
1390### getLoopbackMode<sup>11+</sup>
1391
1392getLoopbackMode(): Promise\<boolean\>;
1393
1394获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1395
1396> **说明:**
1397> 用于获取当前环回模式开启或关闭的状态。
1398> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1399> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1400
1401**系统能力**:SystemCapability.Communication.NetStack
1402                                                      
1403**返回值:**
1404
1405| 类型                | 说明                        |
1406| ----------------  | --------------------------- |
1407| Promise\<boolean\> | 以Promise形式返回当前TTL数值。 |
1408
1409**错误码:**
1410
1411| 错误码ID | 错误信息                |
1412| ------- | ----------------------- |
1413| 401     | Parameter error.        |
1414| 2301088 | Not a socket.           |
1415
1416**示例:**
1417
1418```ts
1419import { socket } from '@kit.NetworkKit';
1420
1421let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1422multicast.getLoopbackMode().then((value: Boolean) => {
1423  console.log('loopback mode: ', JSON.stringify(value));
1424}).catch((err: Object) => {
1425  console.log('get loopback mode failed');
1426});
1427```
1428
1429## socket.constructTCPSocketInstance<sup>7+</sup>
1430
1431constructTCPSocketInstance(): TCPSocket
1432
1433创建一个TCPSocket对象。
1434
1435**系统能力**:SystemCapability.Communication.NetStack
1436
1437**返回值:**
1438
1439| 类型                               | 说明                    |
1440| --------------------------------- | ---------------------- |
1441| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 |
1442
1443**示例:**
1444
1445```ts
1446import { socket } from '@kit.NetworkKit';
1447let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1448```
1449
1450## TCPSocket
1451
1452TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。
1453
1454### bind
1455
1456bind(address: NetAddress, callback: AsyncCallback\<void\>): void
1457
1458绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用callback方法作为异步方法。
1459
1460> **说明:**
1461> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1462> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1463> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1464
1465**需要权限**:ohos.permission.INTERNET
1466
1467**系统能力**:SystemCapability.Communication.NetStack
1468
1469**参数:**
1470
1471| 参数名   | 类型                               | 必填 | 说明                                                   |
1472| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1473| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1474| callback | AsyncCallback\<void\>              | 是   | 回调函数。失败返回错误、错误信息。                   |
1475
1476**错误码:**
1477
1478| 错误码ID | 错误信息                 |
1479| ------- | ----------------------- |
1480| 401     | Parameter error.        |
1481| 201     | Permission denied.      |
1482
1483**示例:**
1484
1485```ts
1486import { socket } from '@kit.NetworkKit';
1487import { BusinessError } from '@kit.BasicServicesKit';
1488
1489let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1490let bindAddr: socket.NetAddress = {
1491  address: '192.168.xx.xxx',
1492  port: 8080
1493}
1494tcp.bind(bindAddr, (err: BusinessError) => {
1495  if (err) {
1496    console.log('bind fail');
1497    return;
1498  }
1499  console.log('bind success');
1500})
1501```
1502
1503### bind
1504
1505bind(address: NetAddress): Promise\<void\>
1506
1507绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用Promise方法作为异步方法。
1508
1509> **说明:**
1510> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1511> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1512> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1513
1514**需要权限**:ohos.permission.INTERNET
1515
1516**系统能力**:SystemCapability.Communication.NetStack
1517
1518**参数:**
1519
1520| 参数名  | 类型                               | 必填 | 说明                                                   |
1521| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1522| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1523
1524**返回值:**
1525
1526| 类型            | 说明                                                     |
1527| --------------- | ------------------------------------------------------- |
1528| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 |
1529
1530**错误码:**
1531
1532| 错误码ID | 错误信息                 |
1533| ------- | ----------------------- |
1534| 401     | Parameter error.        |
1535| 201     | Permission denied.      |
1536
1537**示例:**
1538
1539```ts
1540import { socket } from '@kit.NetworkKit';
1541import { BusinessError } from '@kit.BasicServicesKit';
1542
1543let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1544let bindAddr: socket.NetAddress = {
1545  address: '192.168.xx.xxx',
1546  port: 8080
1547}
1548tcp.bind(bindAddr).then(() => {
1549  console.log('bind success');
1550}).catch((err: BusinessError) => {
1551  console.log('bind fail');
1552});
1553```
1554
1555### connect
1556
1557connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void
1558
1559连接到指定的IP地址和端口。使用callback方法作为异步方法。
1560
1561> **说明:**
1562> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接
1563
1564**需要权限**:ohos.permission.INTERNET
1565
1566**系统能力**:SystemCapability.Communication.NetStack
1567
1568**参数:**
1569
1570| 参数名   | 类型                                     | 必填 | 说明                                                         |
1571| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1572| options  | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1573| callback | AsyncCallback\<void\>                    | 是   | 回调函数。失败返回错误码、错误信息。                      |
1574
1575**错误码:**
1576
1577| 错误码ID | 错误信息                 |
1578| ------- | ----------------------- |
1579| 401     | Parameter error.        |
1580| 201     | Permission denied.      |
1581
1582**示例:**
1583
1584```ts
1585import { socket } from '@kit.NetworkKit';
1586import { BusinessError } from '@kit.BasicServicesKit';
1587
1588let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1589let netAddress: socket.NetAddress = {
1590  address: '192.168.xx.xxx',
1591  port: 8080
1592}
1593let tcpconnectoptions: socket.TCPConnectOptions = {
1594  address: netAddress,
1595  timeout: 6000
1596}
1597tcp.connect(tcpconnectoptions, (err: BusinessError) => {
1598  if (err) {
1599    console.log('connect fail');
1600    return;
1601  }
1602  console.log('connect success');
1603})
1604```
1605
1606### connect
1607
1608connect(options: TCPConnectOptions): Promise\<void\>
1609
1610连接到指定的IP地址和端口。使用promise方法作为异步方法。
1611
1612> **说明:**
1613> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。
1614
1615**需要权限**:ohos.permission.INTERNET
1616
1617**系统能力**:SystemCapability.Communication.NetStack
1618
1619**参数:**
1620
1621| 参数名  | 类型                                     | 必填 | 说明                                                         |
1622| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1623| options | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1624
1625**返回值:**
1626
1627| 类型            | 说明                                                       |
1628| -------------- | --------------------------------------------------------- |
1629| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 |
1630
1631**错误码:**
1632
1633| 错误码ID | 错误信息                 |
1634| ------- | ----------------------- |
1635| 401     | Parameter error.        |
1636| 201     | Permission denied.      |
1637
1638**示例:**
1639
1640```ts
1641import { socket } from '@kit.NetworkKit';
1642import { BusinessError } from '@kit.BasicServicesKit';
1643
1644let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1645let netAddress: socket.NetAddress = {
1646  address: '192.168.xx.xxx',
1647  port: 8080
1648}
1649let tcpconnectoptions: socket.TCPConnectOptions = {
1650  address: netAddress,
1651  timeout: 6000
1652}
1653tcp.connect(tcpconnectoptions).then(() => {
1654  console.log('connect success')
1655}).catch((err: BusinessError) => {
1656  console.log('connect fail');
1657});
1658```
1659
1660### send
1661
1662send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
1663
1664通过TCPSocket连接发送数据。使用callback方式作为异步方法。
1665
1666> **说明:**
1667> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
1668
1669**需要权限**:ohos.permission.INTERNET
1670
1671**系统能力**:SystemCapability.Communication.NetStack
1672
1673**参数:**
1674
1675| 参数名   | 类型                                    | 必填 | 说明                                                         |
1676| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1677| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
1678| callback | AsyncCallback\<void\>                   | 是   | 回调函数。失败返回错误码、错误信息。                           |
1679
1680**错误码:**
1681
1682| 错误码ID | 错误信息                 |
1683| ------- | ----------------------- |
1684| 401     | Parameter error.        |
1685| 201     | Permission denied.      |
1686
1687**示例:**
1688
1689```ts
1690import { socket } from '@kit.NetworkKit';
1691import { BusinessError } from '@kit.BasicServicesKit';
1692
1693let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1694let netAddress: socket.NetAddress = {
1695  address: '192.168.xx.xxx',
1696  port: 8080
1697}
1698let tcpconnectoptions: socket.TCPConnectOptions = {
1699  address: netAddress,
1700  timeout: 6000
1701}
1702tcp.connect(tcpconnectoptions, () => {
1703  console.log('connect success');
1704  let tcpSendOptions: socket.TCPSendOptions = {
1705    data: 'Hello, server!'
1706  }
1707  tcp.send(tcpSendOptions, (err: BusinessError) => {
1708    if (err) {
1709      console.log('send fail');
1710      return;
1711    }
1712    console.log('send success');
1713  })
1714})
1715```
1716
1717### send
1718
1719send(options: TCPSendOptions): Promise\<void\>
1720
1721通过TCPSocket连接发送数据。使用Promise方式作为异步方法。
1722
1723> **说明:**
1724> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
1725
1726**需要权限**:ohos.permission.INTERNET
1727
1728**系统能力**:SystemCapability.Communication.NetStack
1729
1730**参数:**
1731
1732| 参数名  | 类型                                    | 必填 | 说明                                                         |
1733| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1734| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
1735
1736**返回值:**
1737
1738| 类型            | 说明                                               |
1739| -------------- | ------------------------------------------------- |
1740| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 |
1741
1742**错误码:**
1743
1744| 错误码ID | 错误信息                 |
1745| ------- | ----------------------- |
1746| 401     | Parameter error.        |
1747| 201     | Permission denied.      |
1748
1749**示例:**
1750
1751```ts
1752import { socket } from '@kit.NetworkKit';
1753import { BusinessError } from '@kit.BasicServicesKit';
1754
1755let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1756let netAddress: socket.NetAddress = {
1757  address: '192.168.xx.xxx',
1758  port: 8080
1759}
1760let tcpconnectoptions: socket.TCPConnectOptions = {
1761  address: netAddress,
1762  timeout: 6000
1763}
1764tcp.connect(tcpconnectoptions, () => {
1765  console.log('connect success');
1766  let tcpSendOptions: socket.TCPSendOptions = {
1767    data: 'Hello, server!'
1768  }
1769  tcp.send(tcpSendOptions).then(() => {
1770    console.log('send success');
1771  }).catch((err: BusinessError) => {
1772    console.log('send fail');
1773  });
1774})
1775```
1776
1777### close
1778
1779close(callback: AsyncCallback\<void\>): void
1780
1781关闭TCPSocket连接。使用callback方式作为异步方法。
1782
1783**需要权限**:ohos.permission.INTERNET
1784
1785**系统能力**:SystemCapability.Communication.NetStack
1786
1787**参数:**
1788
1789| 参数名   | 类型                  | 必填 | 说明       |
1790| -------- | --------------------- | ---- | ---------- |
1791| callback | AsyncCallback\<void\> | 是   | 回调函数。失败返回错误码、错误信息。 |
1792
1793**错误码:**
1794
1795| 错误码ID | 错误信息                 |
1796| ------- | ----------------------- |
1797| 201     | Permission denied.      |
1798
1799**示例:**
1800
1801```ts
1802import { socket } from '@kit.NetworkKit';
1803import { BusinessError } from '@kit.BasicServicesKit';
1804
1805let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1806
1807tcp.close((err: BusinessError) => {
1808  if (err) {
1809    console.log('close fail');
1810    return;
1811  }
1812  console.log('close success');
1813})
1814```
1815
1816### close
1817
1818close(): Promise\<void\>
1819
1820关闭TCPSocket连接。使用Promise方式作为异步方法。
1821
1822**需要权限**:ohos.permission.INTERNET
1823
1824**系统能力**:SystemCapability.Communication.NetStack
1825
1826**返回值:**
1827
1828| 类型            | 说明                                       |
1829| -------------- | ----------------------------------------- |
1830| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 |
1831
1832**错误码:**
1833
1834| 错误码ID | 错误信息                 |
1835| ------- | ----------------------- |
1836| 201     | Permission denied.      |
1837
1838**示例:**
1839
1840```ts
1841import { socket } from '@kit.NetworkKit';
1842
1843let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1844
1845tcp.close().then(() => {
1846  console.log('close success');
1847}).catch((err: BusinessError) => {
1848  console.log('close fail');
1849});
1850```
1851
1852### getRemoteAddress
1853
1854getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
1855
1856获取对端Socket地址。使用callback方式作为异步方法。
1857
1858> **说明:**
1859> connect方法调用成功后,才可调用此方法。
1860
1861**需要权限**:ohos.permission.INTERNET
1862
1863**系统能力**:SystemCapability.Communication.NetStack
1864
1865**参数:**
1866
1867| 参数名   | 类型                                              | 必填 | 说明       |
1868| -------- | ------------------------------------------------- | ---- | ---------- |
1869| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 |
1870
1871**错误码:**
1872
1873| 错误码ID | 错误信息                 |
1874| ------- | ----------------------- |
1875| 201     | Permission denied.      |
1876
1877**示例:**
1878
1879```ts
1880import { socket } from '@kit.NetworkKit';
1881import { BusinessError } from '@kit.BasicServicesKit';
1882
1883let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1884let netAddress: socket.NetAddress = {
1885  address: '192.168.xx.xxx',
1886  port: 8080
1887}
1888let tcpconnectoptions: socket.TCPConnectOptions = {
1889  address: netAddress,
1890  timeout: 6000
1891}
1892tcp.connect(tcpconnectoptions, () => {
1893  console.log('connect success');
1894  tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
1895    if (err) {
1896      console.log('getRemoteAddressfail');
1897      return;
1898    }
1899    console.log('getRemoteAddresssuccess:' + JSON.stringify(data));
1900  })
1901});
1902```
1903
1904### getRemoteAddress
1905
1906getRemoteAddress(): Promise\<NetAddress\>
1907
1908获取对端Socket地址。使用Promise方式作为异步方法。
1909
1910> **说明:**
1911> connect方法调用成功后,才可调用此方法。
1912
1913**需要权限**:ohos.permission.INTERNET
1914
1915**系统能力**:SystemCapability.Communication.NetStack
1916
1917**返回值:**
1918
1919| 类型                                        | 说明                                        |
1920| ------------------------------------------ | ------------------------------------------ |
1921| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 |
1922
1923**错误码:**
1924
1925| 错误码ID | 错误信息                 |
1926| ------- | ----------------------- |
1927| 201     | Permission denied.      |
1928
1929**示例:**
1930
1931```ts
1932import { socket } from '@kit.NetworkKit';
1933import { BusinessError } from '@kit.BasicServicesKit';
1934
1935let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1936let netAddress: socket.NetAddress = {
1937  address: '192.168.xx.xxx',
1938  port: 8080
1939}
1940let tcpconnectoptions: socket.TCPConnectOptions = {
1941  address: netAddress,
1942  timeout: 6000
1943}
1944tcp.connect(tcpconnectoptions).then(() => {
1945  console.log('connect success');
1946  tcp.getRemoteAddress().then(() => {
1947    console.log('getRemoteAddress success');
1948  }).catch((err: BusinessError) => {
1949    console.log('getRemoteAddressfail');
1950  });
1951}).catch((err: BusinessError) => {
1952  console.log('connect fail');
1953});
1954```
1955
1956### getState
1957
1958getState(callback: AsyncCallback\<SocketStateBase\>): void
1959
1960获取TCPSocket状态。使用callback方式作为异步方法。
1961
1962> **说明:**
1963> bind或connect方法调用成功后,才可调用此方法。
1964
1965**需要权限**:ohos.permission.INTERNET
1966
1967**系统能力**:SystemCapability.Communication.NetStack
1968
1969**参数:**
1970
1971| 参数名   | 类型                                                   | 必填 | 说明       |
1972| -------- | ------------------------------------------------------ | ---- | ---------- |
1973| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 |
1974
1975**错误码:**
1976
1977| 错误码ID | 错误信息                 |
1978| ------- | ----------------------- |
1979| 201     | Permission denied.      |
1980
1981**示例:**
1982
1983```ts
1984import { socket } from '@kit.NetworkKit';
1985import { BusinessError } from '@kit.BasicServicesKit';
1986
1987let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1988let netAddress: socket.NetAddress = {
1989  address: '192.168.xx.xxx',
1990  port: 8080
1991}
1992let tcpconnectoptions: socket.TCPConnectOptions = {
1993  address: netAddress,
1994  timeout: 6000
1995}
1996tcp.connect(tcpconnectoptions, () => {
1997  console.log('connect success');
1998  tcp.getState((err: BusinessError, data: socket.SocketStateBase) => {
1999    if (err) {
2000      console.log('getState fail');
2001      return;
2002    }
2003    console.log('getState success:' + JSON.stringify(data));
2004  });
2005});
2006```
2007
2008### getState
2009
2010getState(): Promise\<SocketStateBase\>
2011
2012获取TCPSocket状态。使用Promise方式作为异步方法。
2013
2014> **说明:**
2015> bind或connect方法调用成功后,才可调用此方法。
2016
2017**需要权限**:ohos.permission.INTERNET
2018
2019**系统能力**:SystemCapability.Communication.NetStack
2020
2021**返回值:**
2022
2023| 类型                                             | 说明                                       |
2024| ----------------------------------------------- | ----------------------------------------- |
2025| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 |
2026
2027**错误码:**
2028
2029| 错误码ID | 错误信息                 |
2030| ------- | ----------------------- |
2031| 201     | Permission denied.      |
2032
2033**示例:**
2034
2035```ts
2036import { socket } from '@kit.NetworkKit';
2037import { BusinessError } from '@kit.BasicServicesKit';
2038
2039let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2040let netAddress: socket.NetAddress = {
2041  address: '192.168.xx.xxx',
2042  port: 8080
2043}
2044let tcpconnectoptions: socket.TCPConnectOptions = {
2045  address: netAddress,
2046  timeout: 6000
2047}
2048tcp.connect(tcpconnectoptions).then(() => {
2049  console.log('connect success');
2050  tcp.getState().then(() => {
2051    console.log('getState success');
2052  }).catch((err: BusinessError) => {
2053    console.log('getState fail');
2054  });
2055}).catch((err: BusinessError) => {
2056  console.log('connect fail');
2057});
2058```
2059
2060### getSocketFd<sup>10+</sup>
2061
2062getSocketFd(callback: AsyncCallback\<number\>): void
2063
2064获取TCPSocket的文件描述符。使用callback方式作为异步方法。
2065
2066> **说明:**
2067> bind或connect方法调用成功后,才可调用此方法。
2068
2069**系统能力**:SystemCapability.Communication.NetStack
2070
2071**参数:**
2072
2073| 参数名   | 类型                                                   | 必填 | 说明       |
2074| -------- | ------------------------------------------------------ | ---- | ---------- |
2075| callback | AsyncCallback\<number\> | 是   | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 |
2076
2077**示例:**
2078
2079```ts
2080import { socket } from '@kit.NetworkKit';
2081import { BusinessError } from '@kit.BasicServicesKit';
2082
2083let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2084let bindAddr: socket.NetAddress = {
2085  address: '0.0.0.0'
2086}
2087tcp.bind(bindAddr)
2088let netAddress: socket.NetAddress = {
2089  address: '192.168.xx.xxx',
2090  port: 8080
2091}
2092let tcpconnectoptions: socket.TCPConnectOptions = {
2093  address: netAddress,
2094  timeout: 6000
2095}
2096tcp.connect(tcpconnectoptions)
2097tcp.getSocketFd((err: BusinessError, data: number) => {
2098  console.info("getSocketFd failed: " + err);
2099  console.info("tunenlfd: " + data);
2100})
2101```
2102### getSocketFd<sup>10+</sup>
2103
2104getSocketFd(): Promise\<number\>
2105
2106获取TCPSocket的文件描述符。使用Promise方式作为异步方法。
2107
2108> **说明:**
2109> bind或connect方法调用成功后,才可调用此方法。
2110
2111**系统能力**:SystemCapability.Communication.NetStack
2112
2113**返回值:**
2114
2115| 类型                                             | 说明                                       |
2116| ----------------------------------------------- | ----------------------------------------- |
2117| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
2118
2119**示例:**
2120
2121```ts
2122import { socket } from '@kit.NetworkKit';
2123import { BusinessError } from '@kit.BasicServicesKit';
2124
2125let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2126let bindAddr: socket.NetAddress = {
2127  address: '0.0.0.0'
2128}
2129tcp.bind(bindAddr)
2130let netAddress: socket.NetAddress = {
2131  address: '192.168.xx.xxx',
2132  port: 8080
2133}
2134let tcpconnectoptions: socket.TCPConnectOptions = {
2135  address: netAddress,
2136  timeout: 6000
2137}
2138tcp.connect(tcpconnectoptions)
2139tcp.getSocketFd().then((data: number) => {
2140  console.info("tunenlfd: " + data);
2141})
2142```
2143
2144### setExtraOptions
2145
2146setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
2147
2148设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
2149
2150> **说明:**
2151> bind或connect方法调用成功后,才可调用此方法。
2152
2153**需要权限**:ohos.permission.INTERNET
2154
2155**系统能力**:SystemCapability.Communication.NetStack
2156
2157**参数:**
2158
2159| 参数名   | 类型                                      | 必填 | 说明                                                         |
2160| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2161| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2162| callback | AsyncCallback\<void\>                     | 是   | 回调函数。失败时返回错误码、错误信息。               |
2163
2164**错误码:**
2165
2166| 错误码ID | 错误信息                 |
2167| ------- | ----------------------- |
2168| 401     | Parameter error.        |
2169| 201     | Permission denied.      |
2170
2171**示例:**
2172
2173```ts
2174import { socket } from '@kit.NetworkKit';
2175import { BusinessError } from '@kit.BasicServicesKit';
2176
2177let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2178let netAddress: socket.NetAddress = {
2179  address: '192.168.xx.xxx',
2180  port: 8080
2181}
2182let tcpconnectoptions: socket.TCPConnectOptions = {
2183  address: netAddress,
2184  timeout: 6000
2185}
2186
2187interface SocketLinger {
2188  on: boolean;
2189  linger: number;
2190}
2191
2192tcp.connect(tcpconnectoptions, () => {
2193  console.log('connect success');
2194  let tcpExtraOptions: socket.TCPExtraOptions = {
2195    keepAlive: true,
2196    OOBInline: true,
2197    TCPNoDelay: true,
2198    socketLinger: { on: true, linger: 10 } as SocketLinger,
2199    receiveBufferSize: 1000,
2200    sendBufferSize: 1000,
2201    reuseAddress: true,
2202    socketTimeout: 3000
2203  }
2204  tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
2205    if (err) {
2206      console.log('setExtraOptions fail');
2207      return;
2208    }
2209    console.log('setExtraOptions success');
2210  });
2211});
2212```
2213
2214### setExtraOptions
2215
2216setExtraOptions(options: TCPExtraOptions): Promise\<void\>
2217
2218设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
2219
2220> **说明:**
2221> bind或connect方法调用成功后,才可调用此方法。
2222
2223**需要权限**:ohos.permission.INTERNET
2224
2225**系统能力**:SystemCapability.Communication.NetStack
2226
2227**参数:**
2228
2229| 参数名  | 类型                                      | 必填 | 说明                                                         |
2230| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2231| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2232
2233**返回值:**
2234
2235| 类型            | 说明                                                 |
2236| -------------- | --------------------------------------------------- |
2237| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 |
2238
2239**错误码:**
2240
2241| 错误码ID | 错误信息                 |
2242| ------- | ----------------------- |
2243| 401     | Parameter error.        |
2244| 201     | Permission denied.      |
2245
2246**示例:**
2247
2248```ts
2249import { socket } from '@kit.NetworkKit';
2250import { BusinessError } from '@kit.BasicServicesKit';
2251
2252let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2253let netAddress: socket.NetAddress = {
2254  address: '192.168.xx.xxx',
2255  port: 8080
2256}
2257let tcpconnectoptions: socket.TCPConnectOptions = {
2258  address: netAddress,
2259  timeout: 6000
2260}
2261
2262interface SocketLinger {
2263  on: boolean;
2264  linger: number;
2265}
2266
2267tcp.connect(tcpconnectoptions, () => {
2268  console.log('connect success');
2269  let tcpExtraOptions: socket.TCPExtraOptions = {
2270    keepAlive: true,
2271    OOBInline: true,
2272    TCPNoDelay: true,
2273    socketLinger: { on: true, linger: 10 } as SocketLinger,
2274    receiveBufferSize: 1000,
2275    sendBufferSize: 1000,
2276    reuseAddress: true,
2277    socketTimeout: 3000
2278  }
2279  tcp.setExtraOptions(tcpExtraOptions).then(() => {
2280    console.log('setExtraOptions success');
2281  }).catch((err: BusinessError) => {
2282    console.log('setExtraOptions fail');
2283  });
2284});
2285```
2286
2287### getLocalAddress<sup>12+</sup>
2288
2289getLocalAddress(): Promise\<NetAddress\>
2290
2291获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。
2292
2293> **说明:**
2294> bind方法调用成功后,才可调用此方法。
2295
2296**系统能力**:SystemCapability.Communication.NetStack
2297
2298**返回值:**
2299
2300| 类型            | 说明                                                 |
2301|  -------------- |  --------------------------------------------------- |
2302| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
2303
2304**错误码:**
2305
2306| 错误码ID | 错误信息                                    |
2307| -------- | ------------------------------------------- |
2308| 2300002  | System internal error.                      |
2309| 2301009  | Bad file descriptor.                            |
2310| 2303188  | Socket operation on non-socket. |
2311
2312**示例:**
2313
2314```ts
2315import { socket } from '@kit.NetworkKit';
2316import { BusinessError } from '@kit.BasicServicesKit';
2317
2318let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2319let bindAddr: socket.NetAddress = {
2320  address: '192.168.xx.xxx',
2321  family: 1,
2322  port: 8080
2323}
2324tcp.bind(bindAddr).then(() => {
2325  tcp.getLocalAddress().then((localAddress: socket.NetAddress) => {
2326    console.info("SUCCESS! Address:" + JSON.stringify(localAddress));
2327  }).catch((err: BusinessError) => {
2328    console.error("FAILED! Error:" + JSON.stringify(err));
2329  })
2330}).catch((err: BusinessError) => {
2331  console.error('bind fail');
2332});
2333```
2334
2335### on('message')
2336
2337on(type: 'message', callback: Callback<SocketMessageInfo\>): void
2338
2339订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2340
2341**系统能力**:SystemCapability.Communication.NetStack
2342
2343**参数:**
2344
2345| 参数名   | 类型                                                         | 必填 | 说明                                      |
2346| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2347| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
2348| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。返回TCPSocket连接信息。                          |
2349
2350**示例:**
2351
2352```ts
2353import { socket } from '@kit.NetworkKit';
2354import { BusinessError } from '@kit.BasicServicesKit';
2355
2356let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2357let messageView = '';
2358tcp.on('message', (value: socket.SocketMessageInfo) => {
2359  for (let i: number = 0; i < value.message.byteLength; i++) {
2360    let uint8Array = new Uint8Array(value.message) 
2361    let messages = uint8Array[i]
2362    let message = String.fromCharCode(messages);
2363    messageView += message;
2364  }
2365  console.log('on message message: ' + JSON.stringify(messageView));
2366  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2367});
2368```
2369
2370### off('message')
2371
2372off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
2373
2374取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2375
2376**系统能力**:SystemCapability.Communication.NetStack
2377
2378**参数:**
2379
2380| 参数名   | 类型                                                         | 必填 | 说明                                      |
2381| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2382| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
2383| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。取消订阅TCPSocket连接的接收消息事件时触发回调函数。                             |
2384
2385**示例:**
2386
2387```ts
2388import { socket } from '@kit.NetworkKit';
2389import { BusinessError } from '@kit.BasicServicesKit';
2390
2391let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2392let messageView = '';
2393let callback = (value: socket.SocketMessageInfo) => {
2394  for (let i: number = 0; i < value.message.byteLength; i++) {
2395    let uint8Array = new Uint8Array(value.message) 
2396    let messages = uint8Array[i]
2397    let message = String.fromCharCode(messages);
2398    messageView += message;
2399  }
2400  console.log('on message message: ' + JSON.stringify(messageView));
2401  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2402}
2403tcp.on('message', callback);
2404// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2405tcp.off('message', callback);
2406tcp.off('message');
2407```
2408
2409### on('connect' | 'close')
2410
2411on(type: 'connect' | 'close', callback: Callback\<void\>): void
2412
2413订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2414
2415**系统能力**:SystemCapability.Communication.NetStack
2416
2417**参数:**
2418
2419| 参数名   | 类型             | 必填 | 说明                                                         |
2420| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2421| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2422| callback | Callback\<void\> | 是   | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。            |
2423
2424**示例:**
2425
2426```ts
2427import { socket } from '@kit.NetworkKit';
2428import { BusinessError } from '@kit.BasicServicesKit';
2429
2430let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2431tcp.on('connect', () => {
2432  console.log("on connect success")
2433});
2434tcp.on('close', () => {
2435  console.log("on close success")
2436});
2437```
2438
2439### off('connect' | 'close')
2440
2441off(type: 'connect' | 'close', callback?: Callback\<void\>): void
2442
2443取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2444
2445**系统能力**:SystemCapability.Communication.NetStack
2446
2447**参数:**
2448
2449| 参数名   | 类型             | 必填 | 说明                                                         |
2450| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2451| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2452| callback | Callback\<void\> | 否   | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。                        |
2453
2454**示例:**
2455
2456```ts
2457import { socket } from '@kit.NetworkKit';
2458import { BusinessError } from '@kit.BasicServicesKit';
2459
2460let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2461let callback1 = () => {
2462  console.log("on connect success");
2463}
2464tcp.on('connect', callback1);
2465// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2466tcp.off('connect', callback1);
2467tcp.off('connect');
2468let callback2 = () => {
2469  console.log("on close success");
2470}
2471tcp.on('close', callback2);
2472// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2473tcp.off('close', callback2);
2474tcp.off('close');
2475```
2476
2477### on('error')
2478
2479on(type: 'error', callback: ErrorCallback): void
2480
2481订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2482
2483**系统能力**:SystemCapability.Communication.NetStack
2484
2485**参数:**
2486
2487| 参数名   | 类型          | 必填 | 说明                                 |
2488| -------- | ------------- | ---- | ------------------------------------ |
2489| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2490| callback | ErrorCallback | 是   | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。                           |
2491
2492**示例:**
2493
2494```ts
2495import { socket } from '@kit.NetworkKit';
2496import { BusinessError } from '@kit.BasicServicesKit';
2497
2498let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2499tcp.on('error', (err: BusinessError) => {
2500  console.log("on error, err:" + JSON.stringify(err))
2501});
2502```
2503
2504### off('error')
2505
2506off(type: 'error', callback?: ErrorCallback): void
2507
2508取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2509
2510**系统能力**:SystemCapability.Communication.NetStack
2511
2512**参数:**
2513
2514| 参数名   | 类型          | 必填 | 说明                                 |
2515| -------- | ------------- | ---- | ------------------------------------ |
2516| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2517| callback | ErrorCallback | 否   | 回调函数。TCPSocket连接取消订阅的某类error事件触发时调用回调函数。                           |
2518
2519**示例:**
2520
2521```ts
2522import { socket } from '@kit.NetworkKit';
2523import { BusinessError } from '@kit.BasicServicesKit';
2524
2525let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2526let callback = (err: BusinessError) => {
2527  console.log("on error, err:" + JSON.stringify(err));
2528}
2529tcp.on('error', callback);
2530// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2531tcp.off('error', callback);
2532tcp.off('error');
2533```
2534
2535## TCPConnectOptions
2536
2537TCPSocket连接的参数。
2538
2539**系统能力**:SystemCapability.Communication.NetStack
2540
2541| 名称  | 类型                               | 必填 | 说明                       |
2542| ------- | ---------------------------------- | ---- | -------------------------- |
2543| address | [NetAddress](#netaddress) | 是   | 绑定的地址以及端口。       |
2544| timeout | number                             | 否   | 超时时间,单位毫秒(ms)。 |
2545
2546## TCPSendOptions
2547
2548TCPSocket发送请求的参数。
2549
2550**系统能力**:SystemCapability.Communication.NetStack
2551
2552| 名称   | 类型   | 必填 | 说明                                                         |
2553| -------- | ------ | ---- | ------------------------------------------------------------ |
2554| data     | string\| ArrayBuffer  | 是   | 发送的数据。                                                 |
2555| encoding | string | 否   | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 |
2556
2557## TCPExtraOptions
2558
2559TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。
2560
2561**系统能力**:SystemCapability.Communication.NetStack
2562
2563| 名称            | 类型    | 必填 | 说明                                                         |
2564| ----------------- | ------- | ---- | ------------------------------------------------------------ |
2565| keepAlive         | boolean | 否   | 是否保持连接。默认为false。                                  |
2566| OOBInline         | boolean | 否   | 是否为OOB内联。默认为false。                                 |
2567| TCPNoDelay        | boolean | 否   | TCPSocket连接是否无时延。默认为false。                       |
2568| socketLinger      | \{on:boolean, linger:number\}  | 否   | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 |
2569
2570## socket.constructTCPSocketServerInstance<sup>10+</sup>
2571
2572constructTCPSocketServerInstance(): TCPSocketServer
2573
2574创建一个TCPSocketServer对象。
2575
2576**系统能力**:SystemCapability.Communication.NetStack
2577
2578**返回值:**
2579
2580| 类型                                | 说明                          |
2581|  ---------------------------------- |  ---------------------------- |
2582| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 |
2583
2584**示例:**
2585
2586```ts
2587import { socket } from '@kit.NetworkKit';
2588let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2589```
2590
2591## TCPSocketServer<sup>10+</sup>
2592
2593TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。
2594
2595### listen<sup>10+</sup>
2596
2597listen(address: NetAddress, callback: AsyncCallback\<void\>): void
2598
2599绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。
2600
2601> **说明:**
2602> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2603
2604**需要权限**:ohos.permission.INTERNET
2605
2606**系统能力**:SystemCapability.Communication.NetStack
2607
2608**参数:**
2609
2610| 参数名   | 类型                      | 必填 | 说明                                          |
2611| -------- | ------------------------- | ---- | --------------------------------------------- |
2612| address  | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2613| callback | AsyncCallback\<void\>     | 是   | 回调函数。失败时返回错误码、错误信息。    |
2614
2615**错误码:**
2616
2617| 错误码ID | 错误信息                                    |
2618| -------- | ------------------------------------------- |
2619| 401      | Parameter error.                            |
2620| 201      | Permission denied.                          |
2621| 2300002  | System internal error.                      |
2622| 2303109  | Bad file number.                            |
2623| 2303111  | Resource temporarily unavailable. Try again.|
2624| 2303198  | Address already in use.                     |
2625| 2303199  | Cannot assign requested address.            |
2626
2627**示例:**
2628
2629```ts
2630import { socket } from '@kit.NetworkKit';
2631import { BusinessError } from '@kit.BasicServicesKit';
2632
2633let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2634let listenAddr: socket.NetAddress = {
2635  address:  '192.168.xx.xxx',
2636  port: 8080,
2637  family: 1
2638}
2639tcpServer.listen(listenAddr, (err: BusinessError) => {
2640  if (err) {
2641    console.log("listen fail");
2642    return;
2643  }
2644  console.log("listen success");
2645})
2646```
2647
2648### listen<sup>10+</sup>
2649
2650listen(address: NetAddress): Promise\<void\>
2651
2652绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
2653
2654> **说明:**
2655> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2656
2657**需要权限**:ohos.permission.INTERNET
2658
2659**系统能力**:SystemCapability.Communication.NetStack
2660
2661**参数:**
2662
2663| 参数名  | 类型                      | 必填 | 说明                                          |
2664| ------- | ------------------------- | ---- | --------------------------------------------- |
2665| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2666
2667**返回值:**
2668
2669| 类型            | 说明                                                         |
2670|  -------------- |  ----------------------------------------------------------- |
2671| Promise\<void\> | 以Promise形式返回, 成功返回空,失败返回错误码错误信息。|
2672
2673**错误码:**
2674
2675| 错误码ID | 错误信息                                    |
2676| -------- | ------------------------------------------- |
2677| 401      | Parameter error.                            |
2678| 201      | Permission denied.                          |
2679| 2300002  | System internal error.                      |
2680| 2303109  | Bad file number.                            |
2681| 2303111  | Resource temporarily unavailable. Try again.|
2682| 2303198  | Address already in use.                     |
2683| 2303199  | Cannot assign requested address.            |
2684
2685**示例:**
2686
2687```ts
2688import { socket } from '@kit.NetworkKit';
2689import { BusinessError } from '@kit.BasicServicesKit';
2690
2691let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2692let listenAddr: socket.NetAddress = {
2693  address:  '192.168.xx.xxx',
2694  port: 8080,
2695  family: 1
2696}
2697tcpServer.listen(listenAddr).then(() => {
2698  console.log('listen success');
2699}).catch((err: BusinessError) => {
2700  console.log('listen fail');
2701});
2702```
2703
2704### getState<sup>10+</sup>
2705
2706getState(callback: AsyncCallback\<SocketStateBase\>): void
2707
2708获取TCPSocketServer状态。使用callback方式作为异步方法。
2709
2710> **说明:**
2711> listen方法调用成功后,才可调用此方法。
2712
2713**需要权限**:ohos.permission.INTERNET
2714
2715**系统能力**:SystemCapability.Communication.NetStack
2716
2717**参数:**
2718
2719| 参数名   | 类型                                               | 必填 | 说明       |
2720| -------- | -------------------------------------------------- | ---- | ---------- |
2721| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
2722
2723**错误码:**
2724
2725| 错误码ID | 错误信息                        |
2726| -------- | ------------------------------- |
2727| 401      | Parameter error.                |
2728| 201      | Permission denied.              |
2729| 2300002  | System internal error.          |
2730| 2303188  | Socket operation on non-socket. |
2731
2732**示例:**
2733
2734```ts
2735import { socket } from '@kit.NetworkKit';
2736import { BusinessError } from '@kit.BasicServicesKit';
2737
2738let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2739let listenAddr: socket.NetAddress = {
2740  address:  '192.168.xx.xxx',
2741  port: 8080,
2742  family: 1
2743}
2744tcpServer.listen(listenAddr, (err: BusinessError) => {
2745  if (err) {
2746    console.log("listen fail");
2747    return;
2748  }
2749  console.log("listen success");
2750})
2751tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
2752  if (err) {
2753    console.log('getState fail');
2754    return;
2755  }
2756  console.log('getState success:' + JSON.stringify(data));
2757})
2758```
2759
2760### getState<sup>10+</sup>
2761
2762getState(): Promise\<SocketStateBase\>
2763
2764获取TCPSocketServer状态。使用Promise方式作为异步方法。
2765
2766> **说明:**
2767> listen方法调用成功后,才可调用此方法。
2768
2769**需要权限**:ohos.permission.INTERNET
2770
2771**系统能力**:SystemCapability.Communication.NetStack
2772
2773**返回值:**
2774
2775| 类型                                         | 说明                                       |
2776|  ------------------------------------------- |  ----------------------------------------- |
2777| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 |
2778
2779**错误码:**
2780
2781| 错误码ID | 错误信息                        |
2782| -------- | ------------------------------- |
2783| 201      | Permission denied.              |
2784| 2300002  | System internal error.          |
2785| 2303188  | Socket operation on non-socket. |
2786
2787**示例:**
2788
2789```ts
2790import { socket } from '@kit.NetworkKit';
2791import { BusinessError } from '@kit.BasicServicesKit';
2792
2793let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2794let listenAddr: socket.NetAddress = {
2795  address:  '192.168.xx.xxx',
2796  port: 8080,
2797  family: 1
2798}
2799tcpServer.listen(listenAddr, (err: BusinessError) => {
2800  if (err) {
2801    console.log("listen fail");
2802    return;
2803  }
2804  console.log("listen success");
2805})
2806tcpServer.getState().then((data: socket.SocketStateBase) => {
2807  console.log('getState success' + JSON.stringify(data));
2808}).catch((err: BusinessError) => {
2809  console.log('getState fail');
2810});
2811```
2812
2813### setExtraOptions<sup>10+</sup>
2814
2815setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
2816
2817设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。
2818
2819> **说明:**
2820> listen方法调用成功后,才可调用此方法。
2821
2822**需要权限**:ohos.permission.INTERNET
2823
2824**系统能力**:SystemCapability.Communication.NetStack
2825
2826**参数:**
2827
2828| 参数名   | 类型                                | 必填 | 说明                                                         |
2829| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
2830| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
2831| callback | AsyncCallback\<void\>               | 是   | 回调函数。失败时返回错误码、错误信息。                |
2832
2833**错误码:**
2834
2835| 错误码ID | 错误信息                        |
2836| -------- | ------------------------------- |
2837| 401      | Parameter error.                |
2838| 201      | Permission denied.              |
2839| 2300002  | System internal error.          |
2840| 2303188  | Socket operation on non-socket. |
2841
2842**示例:**
2843
2844```ts
2845import { socket } from '@kit.NetworkKit';
2846import { BusinessError } from '@kit.BasicServicesKit';
2847
2848let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2849let listenAddr: socket.NetAddress = {
2850  address:  '192.168.xx.xxx',
2851  port: 8080,
2852  family: 1
2853}
2854tcpServer.listen(listenAddr, (err: BusinessError) => {
2855  if (err) {
2856    console.log("listen fail");
2857    return;
2858  }
2859  console.log("listen success");
2860})
2861
2862interface SocketLinger {
2863  on: boolean;
2864  linger: number;
2865}
2866
2867let tcpExtraOptions: socket.TCPExtraOptions = {
2868  keepAlive: true,
2869  OOBInline: true,
2870  TCPNoDelay: true,
2871  socketLinger: { on: true, linger: 10 } as SocketLinger,
2872  receiveBufferSize: 1000,
2873  sendBufferSize: 1000,
2874  reuseAddress: true,
2875  socketTimeout: 3000
2876}
2877tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
2878  if (err) {
2879    console.log('setExtraOptions fail');
2880    return;
2881  }
2882  console.log('setExtraOptions success');
2883});
2884```
2885
2886### setExtraOptions<sup>10+</sup>
2887
2888setExtraOptions(options: TCPExtraOptions): Promise\<void\>
2889
2890设置TCPSocketServer连接的其他属性,使用Promise方式作为异步方法。
2891
2892> **说明:**
2893> listen方法调用成功后,才可调用此方法。
2894
2895**需要权限**:ohos.permission.INTERNET
2896
2897**系统能力**:SystemCapability.Communication.NetStack
2898
2899**参数:**
2900
2901| 参数名  | 类型                                | 必填 | 说明                                                         |
2902| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
2903| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
2904
2905**返回值:**
2906
2907| 类型            | 说明                                                       |
2908|  -------------- |  --------------------------------------------------------- |
2909| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
2910
2911**错误码:**
2912
2913| 错误码ID | 错误信息                        |
2914| -------- | ------------------------------- |
2915| 401      | Parameter error.                |
2916| 201      | Permission denied.              |
2917| 2300002  | System internal error.          |
2918| 2303188  | Socket operation on non-socket. |
2919
2920**示例:**
2921
2922```ts
2923import { socket } from '@kit.NetworkKit';
2924import { BusinessError } from '@kit.BasicServicesKit';
2925
2926let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2927let listenAddr: socket.NetAddress = {
2928  address:  '192.168.xx.xxx',
2929  port: 8080,
2930  family: 1
2931}
2932
2933interface SocketLinger {
2934  on: boolean;
2935  linger: number;
2936}
2937
2938tcpServer.listen(listenAddr, (err: BusinessError) => {
2939  if (err) {
2940    console.log("listen fail");
2941    return;
2942  }
2943  console.log("listen success");
2944})
2945
2946let tcpExtraOptions: socket.TCPExtraOptions = {
2947  keepAlive: true,
2948  OOBInline: true,
2949  TCPNoDelay: true,
2950  socketLinger: { on: true, linger: 10 } as SocketLinger,
2951  receiveBufferSize: 1000,
2952  sendBufferSize: 1000,
2953  reuseAddress: true,
2954  socketTimeout: 3000
2955}
2956tcpServer.setExtraOptions(tcpExtraOptions).then(() => {
2957  console.log('setExtraOptions success');
2958}).catch((err: BusinessError) => {
2959  console.log('setExtraOptions fail');
2960});
2961```
2962
2963### getLocalAddress<sup>12+</sup>
2964
2965getLocalAddress(): Promise\<NetAddress\>
2966
2967获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。
2968
2969> **说明:**
2970> listen方法调用成功后,才可调用此方法。
2971
2972**系统能力**:SystemCapability.Communication.NetStack
2973
2974**返回值:**
2975
2976| 类型            | 说明                                                 |
2977|  -------------- |  --------------------------------------------------- |
2978| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
2979
2980**错误码:**
2981
2982| 错误码ID | 错误信息                                    |
2983| -------- | ------------------------------------------- |
2984| 2300002  | System internal error.                      |
2985| 2301009  | Bad file descriptor.                            |
2986| 2303188  | Socket operation on non-socket. |
2987
2988**示例:**
2989
2990```ts
2991import { socket } from '@kit.NetworkKit';
2992import { BusinessError } from '@kit.BasicServicesKit';
2993
2994let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2995let listenAddr: socket.NetAddress = {
2996  address: '192.168.xx.xxx',
2997  port: 8080,
2998  family: 1
2999}
3000tcpServer.listen(listenAddr).then(() => {
3001  tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
3002    console.info("SUCCESS! Address:" + JSON.stringify(localAddress));
3003  }).catch((err: BusinessError) => {
3004    console.error("FerrorAILED! Error:" + JSON.stringify(err));
3005  })
3006}).catch((err: BusinessError) => {
3007  console.error('listen fail');
3008});
3009```
3010
3011### on('connect')<sup>10+</sup>
3012
3013on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void
3014
3015订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
3016
3017> **说明:**
3018> listen方法调用成功后,才可调用此方法。
3019
3020**系统能力**:SystemCapability.Communication.NetStack
3021
3022**参数:**
3023
3024| 参数名   | 类型                            | 必填 | 说明                                  |
3025| -------- | ------------------------------- | ---- | ------------------------------------- |
3026| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
3027| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是   | 回调函数。失败时返回错误码、错误信息。       |
3028
3029**错误码:**
3030
3031| 错误码ID | 错误信息         |
3032| -------- | ---------------- |
3033| 401      | Parameter error. |
3034
3035**示例:**
3036
3037```ts
3038import { socket } from '@kit.NetworkKit';
3039
3040let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3041
3042let listenAddr: socket.NetAddress = {
3043  address:  '192.168.xx.xxx',
3044  port: 8080,
3045  family: 1
3046}
3047tcpServer.listen(listenAddr, (err: BusinessError) => {
3048  if (err) {
3049    console.log("listen fail");
3050    return;
3051  }
3052  console.log("listen success");
3053  tcpServer.on('connect', (data: socket.TCPSocketConnection) => {
3054    console.log(JSON.stringify(data))
3055  });
3056})
3057```
3058
3059### off('connect')<sup>10+</sup>
3060
3061off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void
3062
3063取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
3064
3065**系统能力**:SystemCapability.Communication.NetStack
3066
3067**参数:**
3068
3069| 参数名   | 类型                            | 必填 | 说明                                  |
3070| -------- | ------------------------------- | ---- | ------------------------------------- |
3071| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
3072| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否   | 回调函数。失败时返回错误码、错误信息。 |
3073
3074**错误码:**
3075
3076| 错误码ID | 错误信息         |
3077| -------- | ---------------- |
3078| 401      | Parameter error. |
3079
3080**示例:**
3081
3082```ts
3083import { socket } from '@kit.NetworkKit';
3084
3085let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3086
3087let listenAddr: socket.NetAddress = {
3088  address:  '192.168.xx.xxx',
3089  port: 8080,
3090  family: 1
3091}
3092tcpServer.listen(listenAddr, (err: BusinessError) => {
3093  if (err) {
3094    console.log("listen fail");
3095    return;
3096  }
3097  console.log("listen success");
3098  let callback = (data: socket.TCPSocketConnection) => {
3099    console.log('on connect message: ' + JSON.stringify(data));
3100  }
3101  tcpServer.on('connect', callback);
3102  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3103  tcpServer.off('connect', callback);
3104  tcpServer.off('connect');
3105})
3106```
3107
3108### on('error')<sup>10+</sup>
3109
3110on(type: 'error', callback: ErrorCallback): void
3111
3112订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3113
3114> **说明:**
3115> listen方法调用成功后,才可调用此方法。
3116
3117**系统能力**:SystemCapability.Communication.NetStack
3118
3119**参数:**
3120
3121| 参数名   | 类型          | 必填 | 说明                                 |
3122| -------- | ------------- | ---- | ------------------------------------ |
3123| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3124| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。|
3125
3126**错误码:**
3127
3128| 错误码ID | 错误信息         |
3129| -------- | ---------------- |
3130| 401      | Parameter error. |
3131
3132**示例:**
3133
3134```ts
3135import { socket } from '@kit.NetworkKit';
3136import { BusinessError } from '@kit.BasicServicesKit';
3137
3138let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3139
3140let listenAddr: socket.NetAddress = {
3141  address:  '192.168.xx.xxx',
3142  port: 8080,
3143  family: 1
3144}
3145tcpServer.listen(listenAddr, (err: BusinessError) => {
3146  if (err) {
3147    console.log("listen fail");
3148    return;
3149  }
3150  console.log("listen success");
3151  tcpServer.on('error', (err: BusinessError) => {
3152    console.log("on error, err:" + JSON.stringify(err))
3153  });
3154})
3155```
3156
3157### off('error')<sup>10+</sup>
3158
3159off(type: 'error', callback?: ErrorCallback): void
3160
3161取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3162
3163**系统能力**:SystemCapability.Communication.NetStack
3164
3165**参数:**
3166
3167| 参数名   | 类型          | 必填 | 说明                                 |
3168| -------- | ------------- | ---- | ------------------------------------ |
3169| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3170| callback | ErrorCallback | 否   | 回调函数。失败时返回错误码、错误信息。                           |
3171
3172**错误码:**
3173
3174| 错误码ID | 错误信息         |
3175| -------- | ---------------- |
3176| 401      | Parameter error. |
3177
3178**示例:**
3179
3180```ts
3181import { socket } from '@kit.NetworkKit';
3182import { BusinessError } from '@kit.BasicServicesKit';
3183
3184let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3185
3186let listenAddr: socket.NetAddress = {
3187  address:  '192.168.xx.xxx',
3188  port: 8080,
3189  family: 1
3190}
3191tcpServer.listen(listenAddr, (err: BusinessError) => {
3192  if (err) {
3193    console.log("listen fail");
3194    return;
3195  }
3196  console.log("listen success");
3197  let callback = (err: BusinessError) => {
3198    console.log("on error, err:" + JSON.stringify(err));
3199  }
3200  tcpServer.on('error', callback);
3201  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3202  tcpServer.off('error', callback);
3203  tcpServer.off('error');
3204})
3205```
3206
3207## TCPSocketConnection<sup>10+</sup>
3208
3209TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。
3210
3211> **说明:**
3212> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。
3213
3214**系统能力**:SystemCapability.Communication.NetStack
3215
3216### 属性
3217
3218| 名称     | 类型   | 必填 | 说明                                      |
3219| -------- | ------ | ---- | ----------------------------------------- |
3220| clientId | number | 是   | 客户端与TCPSocketServer建立连接的id。 |
3221
3222### send<sup>10+</sup>
3223
3224send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
3225
3226通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。
3227
3228> **说明:**
3229> 与客户端建立连接后,才可调用此方法。
3230
3231**需要权限**:ohos.permission.INTERNET
3232
3233**系统能力**:SystemCapability.Communication.NetStack
3234
3235**参数:**
3236
3237| 参数名   | 类型                              | 必填 | 说明                                                         |
3238| -------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3239| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3240| callback | AsyncCallback\<void\>             | 是   | 回调函数。失败时返回错误码、错误信息。             |
3241
3242**错误码:**
3243
3244| 错误码ID | 错误信息               |
3245| -------- | ---------------------- |
3246| 401      | Parameter error.       |
3247| 201      | Permission denied.     |
3248| 2300002  | System internal error. |
3249
3250**示例:**
3251
3252```ts
3253import { socket } from '@kit.NetworkKit';
3254
3255let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3256
3257tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3258  let tcpSendOption: socket.TCPSendOptions = {
3259    data: 'Hello, client!'
3260  }
3261  client.send(tcpSendOption, () => {
3262    console.log('send success');
3263  });
3264});
3265```
3266
3267### send<sup>10+</sup>
3268
3269send(options: TCPSendOptions): Promise\<void\>
3270
3271通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。
3272
3273> **说明:**
3274> 与客户端建立连接后,才可调用此方法。
3275
3276**需要权限**:ohos.permission.INTERNET
3277
3278**系统能力**:SystemCapability.Communication.NetStack
3279
3280**参数:**
3281
3282| 参数名  | 类型                              | 必填 | 说明                                                         |
3283| ------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3284| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3285
3286**返回值:**
3287
3288| 类型            | 说明                                                         |
3289|  -------------- |  ----------------------------------------------------------- |
3290| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
3291
3292**错误码:**
3293
3294| 错误码ID | 错误信息               |
3295| -------- | ---------------------- |
3296| 401      | Parameter error.       |
3297| 201      | Permission denied.     |
3298| 2300002  | System internal error. |
3299
3300**示例:**
3301
3302```ts
3303import { socket } from '@kit.NetworkKit';
3304import { BusinessError } from '@kit.BasicServicesKit';
3305
3306let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3307
3308tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3309  let tcpSendOption: socket.TCPSendOptions = {
3310    data: 'Hello, client!'
3311  }
3312  client.send(tcpSendOption).then(() => {
3313    console.log('send success');
3314  }).catch((err: BusinessError) => {
3315    console.log('send fail');
3316  });
3317});
3318```
3319
3320### close<sup>10+</sup>
3321
3322close(callback: AsyncCallback\<void\>): void
3323
3324关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。
3325
3326**需要权限**:ohos.permission.INTERNET
3327
3328**系统能力**:SystemCapability.Communication.NetStack
3329
3330**参数:**
3331
3332| 参数名   | 类型                  | 必填 | 说明       |
3333| -------- | --------------------- | ---- | ---------- |
3334| callback | AsyncCallback\<void\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
3335
3336**错误码:**
3337
3338| 错误码ID | 错误信息               |
3339| -------- | ---------------------- |
3340| 401      | Parameter error.       |
3341| 201      | Permission denied.     |
3342| 2300002  | System internal error. |
3343
3344**示例:**
3345
3346```ts
3347import { socket } from '@kit.NetworkKit';
3348import { BusinessError } from '@kit.BasicServicesKit';
3349
3350let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3351
3352tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3353  client.close((err: BusinessError) => {
3354    if (err) {
3355      console.log('close fail');
3356      return;
3357    }
3358    console.log('close success');
3359  });
3360});
3361```
3362
3363### close<sup>10+</sup>
3364
3365close(): Promise\<void\>
3366
3367关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。
3368
3369**需要权限**:ohos.permission.INTERNET
3370
3371**系统能力**:SystemCapability.Communication.NetStack
3372
3373**返回值:**
3374
3375| 类型            | 说明                                         |
3376|  -------------- |  ------------------------------------------- |
3377| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
3378
3379**错误码:**
3380
3381| 错误码ID | 错误信息               |
3382| -------- | ---------------------- |
3383| 201      | Permission denied.     |
3384| 2300002  | System internal error. |
3385
3386**示例:**
3387
3388```ts
3389import { socket } from '@kit.NetworkKit';
3390
3391let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3392tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3393  client.close().then(() => {
3394  	console.log('close success');
3395  }).catch((err: BusinessError) => {
3396  	console.log('close fail');
3397  });
3398});
3399```
3400
3401### getRemoteAddress<sup>10+</sup>
3402
3403getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
3404
3405获取对端Socket地址。使用callback方式作为异步方法。
3406
3407> **说明:**
3408> 与客户端建立连接后,才可调用此方法。
3409
3410**需要权限**:ohos.permission.INTERNET
3411
3412**系统能力**:SystemCapability.Communication.NetStack
3413
3414**参数:**
3415
3416| 参数名   | 类型                                     | 必填 | 说明       |
3417| -------- | ---------------------------------------- | ---- | ---------- |
3418| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
3419
3420**错误码:**
3421
3422| 错误码ID | 错误信息                        |
3423| -------- | ------------------------------- |
3424| 401      | Parameter error.                |
3425| 201      | Permission denied.              |
3426| 2300002  | System internal error.          |
3427| 2303188  | Socket operation on non-socket. |
3428
3429**示例:**
3430
3431```ts
3432import { socket } from '@kit.NetworkKit';
3433import { BusinessError } from '@kit.BasicServicesKit';
3434
3435let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3436tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3437  client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
3438    if (err) {
3439      console.log('getRemoteAddress fail');
3440      return;
3441    }
3442    console.log('getRemoteAddress success:' + JSON.stringify(data));
3443  });
3444});
3445```
3446
3447### getRemoteAddress<sup>10+</sup>
3448
3449getRemoteAddress(): Promise\<NetAddress\>
3450
3451获取对端Socket地址。使用Promise方式作为异步方法。
3452
3453> **说明:**
3454> 与客户端建立连接后,才可调用此方法。
3455
3456**需要权限**:ohos.permission.INTERNET
3457
3458**系统能力**:SystemCapability.Communication.NetStack
3459
3460**返回值:**
3461
3462| 类型                               | 说明                                        |
3463|  --------------------------------- |  ------------------------------------------ |
3464| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 |
3465
3466**错误码:**
3467
3468| 错误码ID | 错误信息                        |
3469| -------- | ------------------------------- |
3470| 201      | Permission denied.              |
3471| 2300002  | System internal error.          |
3472| 2303188  | Socket operation on non-socket. |
3473
3474**示例:**
3475
3476```ts
3477import { socket } from '@kit.NetworkKit';
3478import { BusinessError } from '@kit.BasicServicesKit';
3479
3480let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3481tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3482  client.getRemoteAddress().then(() => {
3483    console.log('getRemoteAddress success');
3484  }).catch((err: BusinessError) => {
3485    console.log('getRemoteAddress fail');
3486  });
3487});
3488```
3489
3490### getLocalAddress<sup>12+</sup>
3491
3492getLocalAddress(): Promise\<NetAddress\>
3493
3494获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。
3495
3496**系统能力**:SystemCapability.Communication.NetStack
3497
3498**返回值:**
3499
3500| 类型            | 说明                                                 |
3501|  -------------- |  --------------------------------------------------- |
3502| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
3503
3504**错误码:**
3505
3506| 错误码ID | 错误信息                                    |
3507| -------- | ------------------------------------------- |
3508| 2300002  | System internal error.                      |
3509| 2301009  | Bad file descriptor.                            |
3510| 2303188  | Socket operation on non-socket. |
3511
3512**示例:**
3513
3514```ts
3515import { socket } from '@kit.NetworkKit';
3516import { BusinessError } from '@kit.BasicServicesKit';
3517
3518let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3519let listenAddr: socket.NetAddress = {
3520  address: "192.168.xx.xx",
3521  port: 8080,
3522  family: 1
3523}
3524tcpServer.listen(listenAddr, (err: BusinessError) => {
3525  let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
3526  let netAddress: socket.NetAddress = {
3527    address: "192.168.xx.xx",
3528    port: 8080
3529  }
3530  let options: socket.TCPConnectOptions = {
3531    address: netAddress,
3532    timeout: 6000
3533  }
3534  tcp.connect(options, (err: BusinessError) => {
3535    if (err) {
3536      console.error('connect fail');
3537      return;
3538    }
3539    console.info('connect success!');
3540  })
3541  tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3542    client.getLocalAddress().then((localAddress: socket.NetAddress) => {
3543      console.info("Family IP Port: " + JSON.stringify(localAddress));
3544    }).catch((err: BusinessError) => {
3545      console.error('Error:' + JSON.stringify(err));
3546    });
3547  })
3548})
3549```
3550
3551### on('message')<sup>10+</sup>
3552
3553on(type: 'message', callback: Callback<SocketMessageInfo\>): void
3554
3555订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
3556
3557**系统能力**:SystemCapability.Communication.NetStack
3558
3559**参数:**
3560
3561| 参数名   | 类型                                                         | 必填 | 说明                                      |
3562| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
3563| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
3564| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。失败时返回错误码、错误信息。         |
3565
3566**错误码:**
3567
3568| 错误码ID | 错误信息         |
3569| -------- | ---------------- |
3570| 401      | Parameter error. |
3571
3572**示例:**
3573
3574```ts
3575import { socket } from '@kit.NetworkKit';
3576import { BusinessError } from '@kit.BasicServicesKit';
3577
3578let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3579
3580tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3581  client.on('message', (value: socket.SocketMessageInfo) => {
3582    let messageView = '';
3583    for (let i: number = 0; i < value.message.byteLength; i++) {
3584      let uint8Array = new Uint8Array(value.message) 
3585      let messages = uint8Array[i]
3586      let message = String.fromCharCode(messages);
3587      messageView += message;
3588    }
3589    console.log('on message message: ' + JSON.stringify(messageView));
3590    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
3591  });
3592});
3593```
3594
3595### off('message')<sup>10+</sup>
3596
3597off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
3598
3599取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
3600
3601**系统能力**:SystemCapability.Communication.NetStack
3602
3603**参数:**
3604
3605| 参数名   | 类型                                                         | 必填 | 说明                                      |
3606| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
3607| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
3608| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。失败时返回错误码、错误信息。        |
3609
3610**错误码:**
3611
3612| 错误码ID | 错误信息         |
3613| -------- | ---------------- |
3614| 401      | Parameter error. |
3615
3616**示例:**
3617
3618```ts
3619import { socket } from '@kit.NetworkKit';
3620import { BusinessError } from '@kit.BasicServicesKit';
3621
3622let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3623let callback = (value: socket.SocketMessageInfo) => {
3624  let messageView = '';
3625  for (let i: number = 0; i < value.message.byteLength; i++) {
3626    let uint8Array = new Uint8Array(value.message) 
3627    let messages = uint8Array[i]
3628    let message = String.fromCharCode(messages);
3629    messageView += message;
3630  }
3631  console.log('on message message: ' + JSON.stringify(messageView));
3632  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
3633}
3634tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3635  client.on('message', callback);
3636  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3637  client.off('message', callback);
3638  client.off('message');
3639});
3640```
3641
3642### on('close')<sup>10+</sup>
3643
3644on(type: 'close', callback: Callback\<void\>): void
3645
3646订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
3647
3648**系统能力**:SystemCapability.Communication.NetStack
3649
3650**参数:**
3651
3652| 参数名   | 类型             | 必填 | 说明                                |
3653| -------- | ---------------- | ---- | ----------------------------------- |
3654| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
3655| callback | Callback\<void\> | 是   | 回调函数。失败时返回错误码、错误信息。        |
3656
3657**错误码:**
3658
3659| 错误码ID | 错误信息         |
3660| -------- | ---------------- |
3661| 401      | Parameter error. |
3662
3663**示例:**
3664
3665```ts
3666import { socket } from '@kit.NetworkKit';
3667import { BusinessError } from '@kit.BasicServicesKit';
3668
3669let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3670tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3671  client.on('close', () => {
3672    console.log("on close success")
3673  });
3674});
3675```
3676
3677### off('close')<sup>10+</sup>
3678
3679off(type: 'close', callback?: Callback\<void\>): void
3680
3681取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
3682
3683**系统能力**:SystemCapability.Communication.NetStack
3684
3685**参数:**
3686
3687| 参数名   | 类型             | 必填 | 说明                                |
3688| -------- | ---------------- | ---- | ----------------------------------- |
3689| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
3690| callback | Callback\<void\> | 否   | 回调函数。失败时返回错误码、错误信息。    |
3691
3692**错误码:**
3693
3694| 错误码ID | 错误信息         |
3695| -------- | ---------------- |
3696| 401      | Parameter error. |
3697
3698**示例:**
3699
3700```ts
3701import { socket } from '@kit.NetworkKit';
3702
3703let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3704let callback = () => {
3705  console.log("on close success");
3706}
3707tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3708  client.on('close', callback);
3709  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3710  client.off('close', callback);
3711  client.off('close');
3712});
3713```
3714
3715### on('error')<sup>10+</sup>
3716
3717on(type: 'error', callback: ErrorCallback): void
3718
3719订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
3720
3721**系统能力**:SystemCapability.Communication.NetStack
3722
3723**参数:**
3724
3725| 参数名   | 类型          | 必填 | 说明                                 |
3726| -------- | ------------- | ---- | ------------------------------------ |
3727| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3728| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。    |
3729
3730**错误码:**
3731
3732| 错误码ID | 错误信息         |
3733| -------- | ---------------- |
3734| 401      | Parameter error. |
3735
3736**示例:**
3737
3738```ts
3739import { socket } from '@kit.NetworkKit';
3740import { BusinessError } from '@kit.BasicServicesKit';
3741
3742let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3743tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3744  client.on('error', (err: BusinessError) => {
3745    console.log("on error, err:" + JSON.stringify(err))
3746  });
3747});
3748```
3749
3750### off('error')<sup>10+</sup>
3751
3752off(type: 'error', callback?: ErrorCallback): void
3753
3754取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
3755
3756**系统能力**:SystemCapability.Communication.NetStack
3757
3758**参数:**
3759
3760| 参数名   | 类型          | 必填 | 说明                                 |
3761| -------- | ------------- | ---- | ------------------------------------ |
3762| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3763| callback | ErrorCallback | 否   | 回调函数。失败时返回错误码、错误信息。  |
3764
3765**错误码:**
3766
3767| 错误码ID | 错误信息         |
3768| -------- | ---------------- |
3769| 401      | Parameter error. |
3770
3771**示例:**
3772
3773```ts
3774import { socket } from '@kit.NetworkKit';
3775import { BusinessError } from '@kit.BasicServicesKit';
3776
3777let callback = (err: BusinessError) => {
3778  console.log("on error, err:" + JSON.stringify(err));
3779}
3780let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3781tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3782  client.on('error', callback);
3783  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3784  client.off('error', callback);
3785  client.off('error');
3786});
3787```
3788
3789## TCP 错误码说明
3790
3791TCP 其余错误码映射形式为:2301000 + Linux内核错误码。
3792
3793错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
3794
3795## socket.constructLocalSocketInstance<sup>11+</sup>
3796
3797constructLocalSocketInstance(): LocalSocket
3798
3799创建一个LocalSocket对象。
3800
3801**系统能力**:SystemCapability.Communication.NetStack
3802
3803**返回值:**
3804
3805| 类型                               | 说明                    |
3806  | :--------------------------------- | :---------------------- |
3807| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 |
3808
3809**示例:**
3810
3811```ts
3812import { socket } from '@kit.NetworkKit';
3813let client: socket.LocalSocket = socket.constructLocalSocketInstance();
3814```
3815
3816## LocalSocket<sup>11+</sup>
3817
3818LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。
3819
3820### bind<sup>11+</sup>
3821
3822bind(address: LocalAddress): Promise\<void\>;
3823
3824绑定本地套接字文件的路径。使用promise方法作为异步方法。
3825
3826> **说明:**
3827> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。
3828> bind方法在本地套接字通信中非必须。
3829
3830**系统能力**:SystemCapability.Communication.NetStack
3831
3832**参数:**
3833
3834| 参数名   | 类型                               | 必填 | 说明                                                   |
3835| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
3836| address  | [LocalAddress](#localaddress11) | 是   | 目标地址信息,参考[LocalAddress](#localaddress11)。 |
3837
3838**错误码:**
3839
3840| 错误码ID | 错误信息                    |
3841| ------- | -------------------------- |
3842| 401     | Parameter error.           |
3843| 2301013 | Insufficient permissions.  |
3844| 2301022 | Invalid argument.          |
3845| 2301098 | Address already in use.    |
3846
3847**示例:**
3848
3849```ts
3850import { socket } from '@kit.NetworkKit';
3851
3852let client: socket.LocalSocket = socket.constructLocalSocketInstance()
3853let sandboxPath: string = getContext().filesDir + '/testSocket'
3854let address : socket.LocalAddress = {
3855  address: sandboxPath
3856}
3857client.bind(address).then(() => {
3858  console.log('bind success')
3859}).catch((err: Object) => {
3860  console.error('failed to bind: ' + JSON.stringify(err))
3861})
3862```
3863
3864### connect<sup>11+</sup>
3865
3866connect(options: LocalConnectOptions): Promise\<void\>
3867
3868连接到指定的套接字文件。使用promise方法作为异步方法。
3869
3870> **说明:**
3871> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。
3872
3873**系统能力**:SystemCapability.Communication.NetStack
3874
3875**参数:**
3876
3877| 参数名  | 类型                                     | 必填 | 说明                                                         |
3878| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
3879| options | [LocalConnectOptions](#localconnectoptions11) | 是   | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 |
3880
3881**返回值:**
3882
3883| 类型            | 说明                                       |
3884| :-------------- | :---------------------------------------- |
3885| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 |
3886
3887**错误码:**
3888
3889| 错误码ID | 错误信息                 |
3890| ------- | ----------------------- |
3891| 401     | Parameter error.                 |
3892| 2301013     | Insufficient permissions.        |
3893| 2301022     | Invalid argument.                |
3894| 2301111     | Connection refused.              |
3895| 2301099     | Cannot assign requested address. |
3896
3897**示例:**
3898
3899```ts
3900import { socket } from '@kit.NetworkKit';
3901
3902let client: socket.LocalSocket = socket.constructLocalSocketInstance();
3903let sandboxPath: string = getContext().filesDir + '/testSocket'
3904let localAddress : socket.LocalAddress = {
3905  address: sandboxPath
3906}
3907let connectOpt: socket.LocalConnectOptions = {
3908  address: localAddress,
3909  timeout: 6000
3910}
3911client.connect(connectOpt).then(() => {
3912  console.log('connect success')
3913}).catch((err: Object) => {
3914  console.error('connect fail: ' + JSON.stringify(err));
3915});
3916```
3917
3918### send<sup>11+</sup>
3919
3920send(options: LocalSendOptions): Promise\<void\>
3921
3922通过LocalSocket连接发送数据。使用Promise方式作为异步方法。
3923
3924> **说明:**
3925> connect方法调用成功后,才可调用此方法。
3926
3927**系统能力**:SystemCapability.Communication.NetStack
3928
3929**参数:**
3930
3931| 参数名  | 类型                                    | 必填 | 说明                                                         |
3932| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
3933| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 |
3934
3935**返回值:**
3936
3937| 类型            | 说明                                         |
3938| :-------------- | :------------------------------------------ |
3939| Promise\<void\> | 以Promise形式返回通过LocalSocket发送数据的结果。 |
3940
3941**错误码:**
3942
3943| 错误码ID | 错误信息                 |
3944| ------- | ----------------------- |
3945| 401     | Parameter error.        |
3946| 2301011 | Operation would block.  |
3947
3948**示例:**
3949
3950```ts
3951import { socket } from '@kit.NetworkKit';
3952
3953let client: socket.LocalSocket = socket.constructLocalSocketInstance()
3954let sandboxPath: string = getContext().filesDir + '/testSocket'
3955let localAddress : socket.LocalAddress = {
3956  address: sandboxPath
3957}
3958let connectOpt: socket.LocalConnectOptions = {
3959  address: localAddress,
3960  timeout: 6000
3961}
3962client.connect(connectOpt).then(() => {
3963  console.log('connect success')
3964}).catch((err: Object) => {
3965  console.error('connect failed: ' + JSON.stringify(err))
3966})
3967let sendOpt: socket.LocalSendOptions = {
3968  data: 'Hello world!'
3969}
3970client.send(sendOpt).then(() => {
3971  console.log('send success')
3972}).catch((err: Object) => {
3973  console.error('send fail: ' + JSON.stringify(err))
3974})
3975```
3976
3977### close<sup>11+</sup>
3978
3979close(): Promise\<void\>
3980
3981关闭LocalSocket连接。使用Promise方式作为异步方法。
3982
3983**系统能力**:SystemCapability.Communication.NetStack
3984
3985**返回值:**
3986
3987| 类型            | 说明                                       |
3988| :-------------- | :----------------------------------------- |
3989| Promise\<void\> | 以Promise形式返回关闭LocalSocket连接的结果。 |
3990
3991**错误码:**
3992
3993| 错误码ID | 错误信息                 |
3994| ------- | ----------------------- |
3995| 2301009 | Bad file descriptor.    |
3996
3997**示例:**
3998
3999```ts
4000import { socket } from '@kit.NetworkKit';
4001
4002let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4003
4004client.close().then(() => {
4005  console.log('close success');
4006}).catch((err: Object) => {
4007  console.error('close fail: ' + JSON.stringify(err));
4008});
4009```
4010
4011### getState<sup>11+</sup>
4012
4013getState(): Promise\<SocketStateBase\>
4014
4015获取LocalSocket状态。使用Promise方式作为异步方法。
4016
4017> **说明:**
4018> bind或connect方法调用成功后,才可调用此方法。
4019
4020**系统能力**:SystemCapability.Communication.NetStack
4021
4022**返回值:**
4023
4024| 类型                                          | 说明                                     |
4025| :------------------------------------------- | :--------------------------------------- |
4026| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 |
4027
4028**示例:**
4029
4030```ts
4031import { socket } from '@kit.NetworkKit';
4032
4033let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4034let sandboxPath: string = getContext().filesDir + '/testSocket'
4035let localAddress : socket.LocalAddress = {
4036  address: sandboxPath
4037}
4038let connectOpt: socket.LocalConnectOptions = {
4039  address: localAddress,
4040  timeout: 6000
4041}
4042client.connect(connectOpt).then(() => {
4043  console.log('connect success');
4044  client.getState().then(() => {
4045    console.log('getState success');
4046  }).catch((err: Object) => {
4047    console.error('getState fail: ' + JSON.stringify(err))
4048  });
4049}).catch((err: Object) => {
4050  console.error('connect fail: ' + JSON.stringify(err));
4051});
4052```
4053
4054### getSocketFd<sup>11+</sup>
4055
4056getSocketFd(): Promise\<number\>
4057
4058获取LocalSocket的文件描述符。使用Promise方式作为异步方法。
4059
4060> **说明:**
4061> bind或connect方法调用成功后,才可调用此方法。
4062> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。
4063
4064**系统能力**:SystemCapability.Communication.NetStack
4065
4066**返回值:**
4067
4068| 类型               | 说明                              |
4069| :---------------- | :-------------------------------- |
4070| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
4071
4072**示例:**
4073
4074```ts
4075import { socket } from '@kit.NetworkKit';
4076
4077let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4078let sandboxPath: string = getContext().filesDir + '/testSocket'
4079let localAddress : socket.LocalAddress = {
4080  address: sandboxPath
4081}
4082let connectOpt: socket.LocalConnectOptions = {
4083  address: localAddress,
4084  timeout: 6000
4085}
4086client.connect(connectOpt).then(() => {
4087  console.log('connect ok')
4088}).catch((err: Object) => {
4089  console.error('connect fail: ' + JSON.stringify(err))
4090})
4091client.getSocketFd().then((data: number) => {
4092  console.info("fd: " + data);
4093}).catch((err: Object) => {
4094  console.error("getSocketFd faile: " + JSON.stringify(err));
4095})
4096```
4097
4098### setExtraOptions<sup>11+</sup>
4099
4100setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
4101
4102设置LocalSocket的套接字属性,使用Promise方式作为异步方法。
4103
4104> **说明:**
4105> bind或connect方法调用成功后,才可调用此方法。
4106
4107**系统能力**:SystemCapability.Communication.NetStack
4108
4109**参数:**
4110
4111| 参数名  | 类型                                      | 必填 | 说明                                                         |
4112| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
4113| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 |
4114
4115**返回值:**
4116
4117| 类型            | 说明                                           |
4118| :-------------- | :-------------------------------------------- |
4119| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 |
4120
4121**错误码:**
4122
4123| 错误码ID | 错误信息                 |
4124| ------- | ----------------------- |
4125| 401     | Parameter error.        |
4126| 2301009 | Bad file descriptor.    |
4127
4128**示例:**
4129
4130```ts
4131import { socket } from '@kit.NetworkKit';
4132
4133let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4134let sandboxPath: string = getContext().filesDir + '/testSocket'
4135let localAddress : socket.LocalAddress = {
4136  address: sandboxPath
4137}
4138let connectOpt: socket.LocalConnectOptions = {
4139  address: localAddress,
4140  timeout: 6000
4141}
4142client.connect(connectOpt).then(() => {
4143  console.log('connect success');
4144  let options: socket.ExtraOptionsBase = {
4145    receiveBufferSize: 8000,
4146    sendBufferSize: 8000,
4147    socketTimeout: 3000
4148  }
4149  client.setExtraOptions(options).then(() => {
4150    console.log('setExtraOptions success');
4151  }).catch((err: Object) => {
4152    console.error('setExtraOptions fail: ' + JSON.stringify(err));
4153  });
4154}).catch((err: Object) => {
4155  console.error('connect fail: ' + JSON.stringify(err));
4156});
4157```
4158
4159### getExtraOptions<sup>11+</sup>
4160
4161getExtraOptions(): Promise\<ExtraOptionsBase\>;
4162
4163获取LocalSocket的套接字属性,使用Promise方式作为异步方法。
4164
4165> **说明:**
4166> bind或connect方法调用成功后,才可调用此方法。
4167
4168**系统能力**:SystemCapability.Communication.NetStack
4169
4170**返回值:**
4171
4172| 类型                         | 说明                                      |
4173| :-------------------------- | :---------------------------------------- |
4174| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 |
4175
4176**错误码:**
4177
4178| 错误码ID | 错误信息                 |
4179| ------- | ----------------------- |
4180| 2301009 | Bad file descriptor.    |
4181
4182**示例:**
4183
4184```ts
4185import { socket } from '@kit.NetworkKit';
4186
4187let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4188let sandboxPath: string = getContext().filesDir + '/testSocket'
4189let localAddress : socket.LocalAddress = {
4190  address: sandboxPath
4191}
4192let connectOpt: socket.LocalConnectOptions = {
4193  address: localAddress,
4194  timeout: 6000
4195}
4196client.connect(connectOpt).then(() => {
4197  console.log('connect success');
4198  client.getExtraOptions().then((options : socket.ExtraOptionsBase) => {
4199    console.log('options: ' + JSON.stringify(options));
4200  }).catch((err: Object) => {
4201    console.error('setExtraOptions fail: ' + JSON.stringify(err));
4202  });
4203}).catch((err: Object) => {
4204  console.error('connect fail: ' + JSON.stringify(err));
4205});
4206```
4207
4208### getLocalAddress<sup>12+</sup>
4209
4210getLocalAddress(): Promise\<string\>
4211
4212获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。
4213
4214> **说明:**
4215> bind方法调用成功后,才可调用此方法。
4216
4217**系统能力**:SystemCapability.Communication.NetStack
4218
4219**返回值:**
4220
4221| 类型            | 说明                                                 |
4222|  -------------- |  --------------------------------------------------- |
4223| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
4224
4225**错误码:**
4226
4227| 错误码ID | 错误信息                                    |
4228| -------- | ------------------------------------------- |
4229| 2300002  | System internal error.                      |
4230| 2301009  | Bad file descriptor.                            |
4231| 2303188  | Socket operation on non-socket. |
4232
4233**示例:**
4234
4235```ts
4236let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4237let sandboxPath: string = getContext().filesDir + '/testSocket';
4238let address : socket.LocalAddress = {
4239  address: sandboxPath
4240}
4241client.bind(address).then(() => {
4242  console.error('bind success');
4243  client.getLocalAddress().then((localPath: string) => {
4244    console.info("SUCCESS " + JSON.stringify(localPath));
4245  }).catch((err: BusinessError) => {
4246    console.error("FAIL " + JSON.stringify(err));
4247  })
4248}).catch((err: Object) => {
4249  console.info('failed to bind: ' + JSON.stringify(err));
4250})
4251```
4252
4253### on('message')<sup>11+</sup>
4254
4255on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void
4256
4257订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4258
4259**系统能力**:SystemCapability.Communication.NetStack
4260
4261**参数:**
4262
4263| 参数名   | 类型                                              | 必填 | 说明                                      |
4264| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
4265| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。 |
4266| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收的消息。|
4267
4268**错误码:**
4269
4270| 错误码ID | 错误信息                 |
4271| ------- | ----------------------- |
4272| 401     | Parameter error.        |
4273
4274**示例:**
4275
4276```ts
4277import { socket } from '@kit.NetworkKit';
4278
4279let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4280client.on('message', (value: socket.LocalSocketMessageInfo) => {
4281  const uintArray = new Uint8Array(value.message)
4282  let messageView = '';
4283  for (let i = 0; i < uintArray.length; i++) {
4284    messageView += String.fromCharCode(uintArray[i]);
4285  }
4286  console.log('total: ' + JSON.stringify(value));
4287  console.log('message infomation: ' + messageView);
4288});
4289```
4290
4291### off('message')<sup>11+</sup>
4292
4293off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
4294
4295取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4296
4297**系统能力**:SystemCapability.Communication.NetStack
4298
4299**参数:**
4300
4301| 参数名   | 类型                                               | 必填 | 说明                                 |
4302| -------- | ------------------------------------------------ | ---- | ----------------------------------- |
4303| type     | string                                           | 是   | 订阅的事件类型。'message':接收消息事件。 |
4304| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 指定传入on中的callback取消一个订阅。|
4305
4306**错误码:**
4307
4308| 错误码ID | 错误信息                 |
4309| ------- | ----------------------- |
4310| 401     | Parameter error.        |
4311
4312**示例:**
4313
4314```ts
4315import { socket } from '@kit.NetworkKit';
4316
4317let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4318let messageView = '';
4319let callback = (value: socket.LocalSocketMessageInfo) => {
4320  const uintArray = new Uint8Array(value.message)
4321  let messageView = '';
4322  for (let i = 0; i < uintArray.length; i++) {
4323    messageView += String.fromCharCode(uintArray[i]);
4324  }
4325  console.log('total: ' + JSON.stringify(value));
4326  console.log('message infomation: ' + messageView);
4327}
4328client.on('message', callback);
4329client.off('message');
4330```
4331
4332### on('connect')<sup>11+</sup>
4333
4334on(type: 'connect', callback: Callback\<void\>): void;
4335
4336订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4337
4338**系统能力**:SystemCapability.Communication.NetStack
4339
4340**参数:**
4341
4342| 参数名   | 类型             | 必填 | 说明                                                         |
4343| -------- | ---------------- | ---- | --------------------------------------------------------- |
4344| type     | string           | 是   | 订阅的事件类型。                                             |
4345| callback | Callback\<void\> | 是   | 以callback的形式异步返回与服务端连接的结果。                     |
4346
4347**错误码:**
4348
4349| 错误码ID | 错误信息                 |
4350| ------- | ----------------------- |
4351| 401     | Parameter error.        |
4352
4353**示例:**
4354
4355```ts
4356import { socket } from '@kit.NetworkKit';
4357
4358let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4359client.on('connect', () => {
4360  console.log("on connect success")
4361});
4362```
4363
4364### off('connect')<sup>11+</sup>
4365
4366off(type: 'connect', callback?: Callback\<void\>): void;
4367
4368取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4369
4370**系统能力**:SystemCapability.Communication.NetStack
4371
4372**参数:**
4373
4374| 参数名   | 类型             | 必填 | 说明                                                         |
4375| -------- | ---------------- | ---- | --------------------------------------------------------- |
4376| type     | string           | 是   | 订阅的事件类型。                                             |
4377| callback | Callback\<void\> | 否   | 指定传入on中的callback取消一个订阅。                           |
4378
4379**错误码:**
4380
4381| 错误码ID | 错误信息                 |
4382| ------- | ----------------------- |
4383| 401     | Parameter error.        |
4384
4385**示例:**
4386
4387```ts
4388import { socket } from '@kit.NetworkKit';
4389
4390let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4391let callback = () => {
4392  console.log("on connect success");
4393}
4394client.on('connect', callback);
4395// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4396client.off('connect', callback);
4397client.off('connect');
4398```
4399
4400### on('close')<sup>11+</sup>
4401
4402on(type: 'close', callback: Callback\<void\>): void;
4403
4404订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4405
4406**系统能力**:SystemCapability.Communication.NetStack
4407
4408**参数:**
4409
4410| 参数名   | 类型             | 必填 | 说明                        |
4411| -------- | ---------------- | ---- | ------------------------ |
4412| type     | string           | 是   | 订阅LocalSocket的关闭事件。 |
4413| callback | Callback\<void\> | 是   | 以callback的形式异步返回关闭localsocket的结果。|
4414
4415**错误码:**
4416
4417| 错误码ID | 错误信息                 |
4418| ------- | ----------------------- |
4419| 401     | Parameter error.        |
4420
4421**示例:**
4422
4423```ts
4424import { socket } from '@kit.NetworkKit';
4425
4426let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4427let callback = () => {
4428  console.log("on close success");
4429}
4430client.on('close', callback);
4431```
4432
4433### off('close')<sup>11+</sup>
4434
4435off(type: 'close', callback?: Callback\<void\>): void;
4436
4437订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4438
4439**系统能力**:SystemCapability.Communication.NetStack
4440
4441**参数:**
4442
4443| 参数名   | 类型             | 必填 | 说明                        |
4444| -------- | ---------------- | ---- | ------------------------ |
4445| type     | string           | 是   | 订阅LocalSocket的关闭事件。 |
4446| callback | Callback\<void\> | 否   | 取消指定传入on中的callback取消一个订阅。|
4447
4448**错误码:**
4449
4450| 错误码ID | 错误信息                 |
4451| ------- | ----------------------- |
4452| 401     | Parameter error.        |
4453
4454**示例:**
4455
4456```ts
4457import { socket } from '@kit.NetworkKit';
4458
4459let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4460let callback = () => {
4461  console.log("on close success");
4462}
4463client.on('close', callback);
4464// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4465client.off('close', callback);
4466client.off('close');
4467```
4468
4469### on('error')<sup>11+</sup>
4470
4471on(type: 'error', callback: ErrorCallback): void
4472
4473订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
4474
4475**系统能力**:SystemCapability.Communication.NetStack
4476
4477**参数:**
4478
4479| 参数名   | 类型          | 必填 | 说明                            |
4480| -------- | ------------- | ---- | ---------------------------- |
4481| type     | string        | 是   | 订阅LocalSocket的error事件。   |
4482| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
4483
4484**错误码:**
4485
4486| 错误码ID | 错误信息                 |
4487| ------- | ----------------------- |
4488| 401     | Parameter error.        |
4489
4490**示例:**
4491
4492```ts
4493import { socket } from '@kit.NetworkKit';
4494
4495let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4496client.on('error', (err: Object) => {
4497  console.log("on error, err:" + JSON.stringify(err))
4498});
4499```
4500
4501### off('error')<sup>11+</sup>
4502
4503off(type: 'error', callback?: ErrorCallback): void;
4504
4505取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
4506
4507**系统能力**:SystemCapability.Communication.NetStack
4508
4509**参数:**
4510
4511| 参数名   | 类型          | 必填 | 说明                             |
4512| -------- | ------------- | ---- | ----------------------------- |
4513| type     | string        | 是   | 取消订阅LocalSocket的error事件。 |
4514| callback | ErrorCallback | 否   | 指定传入on中的callback取消一个订阅。|
4515
4516**错误码:**
4517
4518| 错误码ID | 错误信息                 |
4519| ------- | ----------------------- |
4520| 401     | Parameter error.        |
4521
4522**示例:**
4523
4524```ts
4525import { socket } from '@kit.NetworkKit';
4526
4527let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4528let callback = (err: Object) => {
4529  console.log("on error, err:" + JSON.stringify(err));
4530}
4531client.on('error', callback);
4532// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4533client.off('error', callback);
4534client.off('error');
4535```
4536
4537## LocalSocketMessageInfo<sup>11+</sup>
4538
4539LocalSocket客户端与服务端通信时接收的数据。
4540
4541**系统能力**:SystemCapability.Communication.NetStack
4542
4543| 名称     | 类型            | 必填 | 说明               |
4544| ------- | --------------- | --- | ------------------ |
4545| message | ArrayBuffer     | 是   | 收到的消息数据。     |
4546| address | string          | 是   | 使用的本地套接字路径。|
4547| size    | number          | 是   | 数据长度。          |
4548
4549## LocalAddress<sup>11+</sup>
4550
4551LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。
4552
4553**系统能力**:SystemCapability.Communication.NetStack
4554
4555| 名称     | 类型       | 必填 | 说明               |
4556| ------- | ---------- | --- | ------------------ |
4557| address | string     | 是   | 本地套接字路径。     |
4558
4559## LocalConnectOptions<sup>11+</sup>
4560
4561LocalSocket客户端在连接服务端时传入的参数信息。
4562
4563**系统能力**:SystemCapability.Communication.NetStack
4564
4565| 名称     | 类型       | 必填 | 说明                            |
4566| ------- | ---------- | --- | ------------------------------ |
4567| address | [LocalAddress](#localaddress11)    | 是   | 指定的本地套接字路径。            |
4568| timeout | number     | 否   | 连接服务端的超时时间,单位为毫秒。  |
4569
4570## LocalSendOptions<sup>11+</sup>
4571
4572LocalSocket发送请求的参数。
4573
4574**系统能力**:SystemCapability.Communication.NetStack
4575
4576| 名称     | 类型       | 必填 | 说明                 |
4577| ------- | ---------- | --- | ------------------- |
4578| data    | string \| ArrayBuffer | 是   | 需要发送的数据。 |
4579| encoding | string   | 否   | 字符编码。  |
4580
4581## ExtraOptionsBase<sup>7+</sup>
4582
4583Socket套接字的基础属性。
4584
4585**系统能力**:SystemCapability.Communication.NetStack
4586
4587| 名称            | 类型    | 必填 | 说明                              |
4588| ----------------- | ------- | ---- | ----------------------------- |
4589| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte)。     |
4590| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte)。     |
4591| reuseAddress      | boolean | 否   | 是否重用地址。                   |
4592| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。    |
4593
4594## socket.constructLocalSocketServerInstance<sup>11+</sup>
4595
4596constructLocalSocketServerInstance(): LocalSocketServer
4597
4598创建一个LocalSocketServer对象。
4599
4600**系统能力**:SystemCapability.Communication.NetStack
4601
4602**返回值:**
4603
4604| 类型                                | 说明                          |
4605| :---------------------------------- | :---------------------------- |
4606| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 |
4607
4608**示例:**
4609
4610```ts
4611import { socket } from '@kit.NetworkKit';
4612let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4613```
4614
4615## LocalSocketServer<sup>11+</sup>
4616
4617LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。
4618
4619### listen<sup>11+</sup>
4620
4621listen(address: LocalAddress): Promise\<void\>
4622
4623绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
4624
4625> **说明:**
4626> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。
4627
4628**系统能力**:SystemCapability.Communication.NetStack
4629
4630**参数:**
4631
4632| 参数名  | 类型                      | 必填 | 说明                                          |
4633| ------- | ------------------------- | ---- | --------------------------------------------- |
4634| address | [LocalAddress](#localaddress11) | 是   | 目标地址信息。 |
4635
4636**返回值:**
4637
4638| 类型            | 说明                                                   |
4639| :-------------- | :---------------------------------------------------- |
4640| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。|
4641
4642**错误码:**
4643
4644| 错误码ID | 错误信息                      |
4645| -------- | --------------------------- |
4646| 401      | Parameter error.            |
4647| 2303109  | Bad file number.            |
4648| 2301013  | Insufficient permissions.   |
4649| 2301022  | Invalid argument.           |
4650| 2301098  | Address already in use.     |
4651
4652**示例:**
4653
4654```ts
4655import { socket } from '@kit.NetworkKit';
4656
4657let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4658let sandboxPath: string = getContext().filesDir + '/testSocket'
4659let addr: socket.LocalAddress = {
4660  address: sandboxPath
4661}
4662server.listen(addr).then(() => {
4663  console.log('listen success');
4664}).catch((err: Object) => {
4665  console.error('listen fail: ' + JSON.stringify(err));
4666});
4667```
4668
4669### getState<sup>11+</sup>
4670
4671getState(): Promise\<SocketStateBase\>
4672
4673获取LocalSocketServer状态。使用Promise方式作为异步方法。
4674
4675> **说明:**
4676> listen方法调用成功后,才可调用此方法。
4677
4678**系统能力**:SystemCapability.Communication.NetStack
4679
4680**返回值:**
4681
4682| 类型                                         | 说明                                            |
4683| :------------------------------------------- | :--------------------------------------------- |
4684| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 |
4685
4686**示例:**
4687
4688```ts
4689import { socket } from '@kit.NetworkKit';
4690
4691let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4692let sandboxPath: string = getContext().filesDir + '/testSocket'
4693let listenAddr: socket.LocalAddress = {
4694  address: sandboxPath
4695}
4696server.listen(listenAddr).then(() => {
4697  console.log("listen success");
4698}).catch((err: Object) => {
4699  console.error("listen fail: " + JSON.stringify(err));
4700})
4701server.getState().then((data: socket.SocketStateBase) => {
4702  console.log('getState success: ' + JSON.stringify(data));
4703}).catch((err: Object) => {
4704  console.error('getState fail: ' + JSON.stringify(err));
4705});
4706```
4707
4708### setExtraOptions<sup>11+</sup>
4709
4710setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
4711
4712设置LocalSocketServer连接的套接字属性,使用Promise方式作为异步方法。
4713
4714> **说明:**
4715> listen方法调用成功后,才可调用此方法。
4716
4717**系统能力**:SystemCapability.Communication.NetStack
4718
4719**参数:**
4720
4721| 参数名  | 类型                                      | 必填 | 说明                            |
4722| ------- | --------------------------------------- | ---- | ------------------------------ |
4723| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocketServer连接的其他属性。 |
4724
4725**返回值:**
4726
4727| 类型            | 说明                                             |
4728| :-------------- | :---------------------------------------------- |
4729| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
4730
4731**错误码:**
4732
4733| 错误码ID | 错误信息                        |
4734| -------- | ------------------------------- |
4735| 401      | Parameter error.                |
4736| 2301009  | Bad file descriptor.            |
4737
4738**示例:**
4739
4740```ts
4741import { socket } from '@kit.NetworkKit';
4742
4743let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4744let sandboxPath: string = getContext().filesDir + '/testSocket'
4745let listenAddr: socket.NetAddress = {
4746  address: sandboxPath
4747}
4748server.listen(listenAddr).then(() => {
4749  console.log("listen success");
4750}).catch((err: Object) => {
4751  console.error("listen fail: " + JSON.stringify(err));
4752})
4753
4754let options: socket.ExtraOptionsBase = {
4755  receiveBufferSize: 6000,
4756  sendBufferSize: 6000,
4757  socketTimeout: 3000
4758}
4759server.setExtraOptions(options).then(() => {
4760  console.log('setExtraOptions success');
4761}).catch((err: Object) => {
4762  console.error('setExtraOptions fail: ' + JSON.stringify(err));
4763});
4764```
4765
4766### getExtraOptions<sup>11+</sup>
4767
4768getExtraOptions(): Promise\<ExtraOptionsBase\>;
4769
4770获取LocalSocketServer中连接的套接字的属性,使用Promise方式作为异步方法。
4771
4772> **说明:**
4773> listen方法调用成功后,才可调用此方法。
4774
4775**系统能力**:SystemCapability.Communication.NetStack
4776
4777**返回值:**
4778
4779| 类型                         | 说明                        |
4780| :-------------------------- | :-------------------------- |
4781| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 |
4782
4783**错误码:**
4784
4785| 错误码ID | 错误信息               |
4786| -------- | -------------------- |
4787| 401     | Parameter error. |
4788
4789**示例:**
4790
4791```ts
4792import { socket } from '@kit.NetworkKit';
4793
4794let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4795let sandboxPath: string = getContext().filesDir + '/testSocket'
4796let listenAddr: socket.LocalAddress = {
4797  address: sandboxPath
4798}
4799server.listen(listenAddr).then(() => {
4800  console.log("listen success");
4801}).catch((err: Object) => {
4802  console.error("listen fail: " + JSON.stringify(err));
4803})
4804server.getExtraOptions().then((options: socket.ExtraOptionsBase) => {
4805  console.log('options: ' + JSON.stringify(options));
4806}).catch((err: Object) => {
4807  console.error('getExtraOptions fail: ' + JSON.stringify(err));
4808});
4809```
4810
4811### getLocalAddress<sup>12+</sup>
4812
4813getLocalAddress(): Promise\<string\>
4814
4815获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。
4816
4817> **说明:**
4818> listen方法调用成功后,才可调用此方法。
4819
4820**系统能力**:SystemCapability.Communication.NetStack
4821
4822**返回值:**
4823
4824| 类型            | 说明                                                 |
4825|  -------------- |  --------------------------------------------------- |
4826| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
4827
4828**错误码:**
4829
4830| 错误码ID | 错误信息                                    |
4831| -------- | ------------------------------------------- |
4832| 2300002  | System internal error.                      |
4833| 2301009  | Bad file descriptor.                            |
4834| 2303188  | Socket operation on non-socket. |
4835
4836**示例:**
4837
4838```ts
4839let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4840let sandboxPath: string = getContext().filesDir + '/testSocket';
4841let listenAddr: socket.LocalAddress = {
4842  address: sandboxPath
4843}
4844server.listen(listenAddr).then(() => {
4845  console.info("listen success");
4846  server.getLocalAddress().then((localPath: string) => {
4847    console.info("SUCCESS " + JSON.stringify(localPath));
4848  }).catch((err: BusinessError) => {
4849    console.error("FAIL " + JSON.stringify(err));
4850  })
4851}).catch((err: Object) => {
4852  console.error("listen fail: " + JSON.stringify(err));
4853})
4854
4855```
4856
4857### on('connect')<sup>11+</sup>
4858
4859on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void
4860
4861订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
4862
4863> **说明:**
4864> listen方法调用成功后,才可调用此方法。
4865
4866**系统能力**:SystemCapability.Communication.NetStack
4867
4868**参数:**
4869
4870| 参数名   | 类型                            | 必填 | 说明                                  |
4871| -------- | ------------------------------- | ---- | ------------------------------------- |
4872| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
4873| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是   | 以callback的形式异步返回接收到客户端连接的结果。|
4874
4875**错误码:**
4876
4877| 错误码ID | 错误信息         |
4878| -------- | ---------------- |
4879| 401      | Parameter error. |
4880
4881**示例:**
4882
4883```ts
4884import { socket } from '@kit.NetworkKit';
4885
4886let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4887server.on('connect', (connection: socket.LocalSocketConnection) => {
4888  if (connection) {
4889    console.log('accept a client')
4890  }
4891});
4892```
4893
4894### off('connect')<sup>11+</sup>
4895
4896off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void
4897
4898取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
4899
4900**系统能力**:SystemCapability.Communication.NetStack
4901
4902**参数:**
4903
4904| 参数名   | 类型                            | 必填 | 说明                                  |
4905| -------- | ------------------------------- | ---- | ------------------------------------- |
4906| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
4907| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否   | 指定传入on的一个callback取消注册。|
4908
4909**错误码:**
4910
4911| 错误码ID | 错误信息         |
4912| -------- | ---------------- |
4913| 401      | Parameter error. |
4914
4915**示例:**
4916
4917```ts
4918import { socket } from '@kit.NetworkKit';
4919
4920let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4921let callback = (connection: socket.LocalSocketConnection) => {
4922  if (connection) {
4923    console.log('accept a client')
4924  }
4925}
4926server.on('connect', callback);
4927// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4928server.off('connect', callback);
4929server.off('connect');
4930```
4931
4932### on('error')<sup>11+</sup>
4933
4934on(type: 'error', callback: ErrorCallback): void
4935
4936订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
4937
4938> **说明:**
4939> listen方法调用成功后,才可调用此方法。
4940
4941**系统能力**:SystemCapability.Communication.NetStack
4942
4943**参数:**
4944
4945| 参数名   | 类型          | 必填 | 说明                                 |
4946| -------- | ------------- | ---- | ------------------------------------ |
4947| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
4948| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
4949
4950**错误码:**
4951
4952| 错误码ID | 错误信息         |
4953| -------- | ---------------- |
4954| 401      | Parameter error. |
4955
4956**示例:**
4957
4958```ts
4959import { socket } from '@kit.NetworkKit';
4960
4961let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4962server.on('error', (err: Object) => {
4963  console.error("on error, err:" + JSON.stringify(err))
4964});
4965```
4966
4967### off('error')<sup>11+</sup>
4968
4969off(type: 'error', callback?: ErrorCallback): void
4970
4971取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
4972
4973**系统能力**:SystemCapability.Communication.NetStack
4974
4975**参数:**
4976
4977| 参数名   | 类型          | 必填 | 说明                                 |
4978| -------- | ------------- | ---- | ------------------------------------ |
4979| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
4980| callback | ErrorCallback | 否   | 指定传入on的一个callback取消订阅。   |
4981
4982**错误码:**
4983
4984| 错误码ID | 错误信息         |
4985| -------- | ---------------- |
4986| 401      | Parameter error. |
4987
4988**示例:**
4989
4990```ts
4991import { socket } from '@kit.NetworkKit';
4992
4993let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4994let callback = (err: Object) => {
4995  console.error("on error, err:" + JSON.stringify(err));
4996}
4997server.on('error', callback);
4998// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4999server.off('error', callback);
5000server.off('error');
5001```
5002
5003
5004## LocalSocketConnection<sup>11+</sup>
5005
5006LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。
5007
5008> **说明:**
5009> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。
5010
5011**系统能力**:SystemCapability.Communication.NetStack
5012
5013### 属性
5014
5015| 名称     | 类型   | 必填 | 说明                            |
5016| -------- | ------ | ---- | ---------------------------- |
5017| clientId | number | 是   | 客户端与服务端建立的会话连接的id。 |
5018
5019### send<sup>11+</sup>
5020
5021send(options: LocalSendOptions): Promise\<void\>
5022
5023通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。
5024
5025> **说明:**
5026> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。
5027
5028**系统能力**:SystemCapability.Communication.NetStack
5029
5030**参数:**
5031
5032| 参数名  | 类型                              | 必填 | 说明                                                         |
5033| ------- | --------------------------------- | ---- | -------------------------------------- |
5034| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocketConnection发送请求的参数。 |
5035
5036**返回值:**
5037
5038| 类型            | 说明                                             |
5039| :-------------- | :---------------------------------------------- |
5040| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
5041
5042**错误码:**
5043
5044| 错误码ID | 错误信息               |
5045| -------- | ---------------------- |
5046| 401      | Parameter error.       |
5047| 2301011  | Operation would block. |
5048
5049**示例:**
5050
5051```ts
5052import { socket } from '@kit.NetworkKit';
5053
5054let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5055
5056server.on('connect', (connection: socket.LocalSocketConnection) => {
5057  let sendOptions: socket.LocalSendOptions = {
5058    data: 'Hello, client!'
5059  }
5060  connection.send(sendOptions).then(() => {
5061    console.log('send success');
5062  }).catch((err: Object) => {
5063    console.error('send fail: ' + JSON.stringify(err));
5064  });
5065});
5066```
5067
5068### close<sup>11+</sup>
5069
5070close(): Promise\<void\>
5071
5072关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。
5073
5074**系统能力**:SystemCapability.Communication.NetStack
5075
5076**返回值:**
5077
5078| 类型            | 说明                                         |
5079| :-------------- | :------------------------------------------- |
5080| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
5081
5082**错误码:**
5083
5084| 错误码ID | 错误信息               |
5085| -------- | -------------------- |
5086| 2301009  | Bad file descriptor. |
5087
5088**示例:**
5089
5090```ts
5091import { socket } from '@kit.NetworkKit';
5092
5093let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5094server.on('connect', (connection: socket.LocalSocketConnection) => {
5095  connection.close().then(() => {
5096    console.log('close success');
5097  }).catch((err: Object) => {
5098    console.error('close fail: ' + JSON.stringify(err));
5099  });
5100});
5101```
5102
5103### getLocalAddress<sup>12+</sup>
5104
5105getLocalAddress(): Promise\<string\>
5106
5107获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。
5108
5109**系统能力**:SystemCapability.Communication.NetStack
5110
5111**返回值:**
5112
5113| 类型            | 说明                                                 |
5114|  -------------- |  --------------------------------------------------- |
5115| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
5116
5117**错误码:**
5118
5119| 错误码ID | 错误信息                                    |
5120| -------- | ------------------------------------------- |
5121| 2300002  | System internal error.                      |
5122| 2301009  | Bad file descriptor.                            |
5123| 2303188  | Socket operation on non-socket. |
5124
5125**示例:**
5126
5127```ts
5128let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5129let sandboxPath: string = getContext().filesDir + '/testSocket';
5130let localAddr: socket.LocalAddress = {
5131  address: sandboxPath
5132}
5133server.listen(localAddr).then(() => {
5134  console.info('listen success');
5135  let client: socket.LocalSocket = socket.constructLocalSocketInstance();
5136  let connectOpt: socket.LocalConnectOptions = {
5137    address: localAddr,
5138    timeout: 6000
5139  }
5140  client.connect(connectOpt).then(() => {
5141    server.getLocalAddress().then((localPath: string) => {
5142      console.info("success, localPath is" + JSON.stringify(localPath));
5143    }).catch((err: BusinessError) => {
5144      console.error("FAIL " + JSON.stringify(err));
5145    })
5146  }).catch((err: Object) => {
5147    console.error('connect fail: ' + JSON.stringify(err));
5148  });
5149});
5150```
5151
5152### on('message')<sup>11+</sup>
5153
5154on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void;
5155
5156订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
5157
5158**系统能力**:SystemCapability.Communication.NetStack
5159
5160**参数:**
5161
5162| 参数名   | 类型                                              | 必填 | 说明                                     |
5163| -------- | ----------------------------------------------- | ---- | --------------------------------------- |
5164| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。     |
5165| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收到的来自客户端的消息。 |
5166
5167**错误码:**
5168
5169| 错误码ID | 错误信息         |
5170| -------- | ---------------- |
5171| 401      | Parameter error. |
5172
5173**示例:**
5174
5175```ts
5176import { socket } from '@kit.NetworkKit';
5177
5178let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5179let sandboxPath: string = getContext().filesDir + '/testSocket'
5180let listenAddr: socket.LocalAddress = {
5181  address: sandboxPath
5182}
5183server.listen(listenAddr).then(() => {
5184  console.log("listen success");
5185}).catch((err: Object) => {
5186  console.error("listen fail: " + JSON.stringify(err));
5187});
5188server.on('connect', (connection: socket.LocalSocketConnection) => {
5189  connection.on('message', (value: socket.LocalSocketMessageInfo) => {
5190    const uintArray = new Uint8Array(value.message);
5191    let messageView = '';
5192    for (let i = 0; i < uintArray.length; i++) {
5193      messageView += String.fromCharCode(uintArray[i]);
5194    }
5195    console.log('total: ' + JSON.stringify(value));
5196    console.log('message infomation: ' + messageView);
5197  });
5198});
5199```
5200
5201### off('message')<sup>11+</sup>
5202
5203off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
5204
5205取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
5206
5207**系统能力**:SystemCapability.Communication.NetStack
5208
5209**参数:**
5210
5211| 参数名   | 类型                                              | 必填 | 说明                                 |
5212| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
5213| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。 |
5214| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 指定传入on的一个callback取消注册。 |
5215
5216**错误码:**
5217
5218| 错误码ID | 错误信息         |
5219| -------- | ---------------- |
5220| 401      | Parameter error. |
5221
5222**示例:**
5223
5224```ts
5225import { socket } from '@kit.NetworkKit';
5226
5227let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5228let callback = (value: socket.LocalSocketMessageInfo) => {
5229  const uintArray = new Uint8Array(value.message)
5230  let messageView = '';
5231  for (let i = 0; i < uintArray.length; i++) {
5232    messageView += String.fromCharCode(uintArray[i]);
5233  }
5234  console.log('total: ' + JSON.stringify(value));
5235  console.log('message infomation: ' + messageView);
5236}
5237server.on('connect', (connection: socket.LocalSocketConnection) => {
5238  connection.on('message', callback);
5239  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5240  connection.off('message', callback);
5241  connection.off('message');
5242});
5243```
5244
5245### on('close')<sup>11+</sup>
5246
5247on(type: 'close', callback: Callback\<void\>): void
5248
5249订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
5250
5251**系统能力**:SystemCapability.Communication.NetStack
5252
5253**参数:**
5254
5255| 参数名   | 类型             | 必填 | 说明                                |
5256| -------- | ---------------- | ---- | ----------------------------------- |
5257| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
5258| callback | Callback\<void\> | 是   | 以callback的形式异步返回会话关闭的结果。 |
5259
5260**错误码:**
5261
5262| 错误码ID | 错误信息         |
5263| -------- | ---------------- |
5264| 401      | Parameter error. |
5265
5266**示例:**
5267
5268```ts
5269import { socket } from '@kit.NetworkKit';
5270
5271let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5272server.on('connect', (connection: socket.LocalSocketConnection) => {
5273  connection.on('close', () => {
5274    console.log("on close success")
5275  });
5276});
5277```
5278
5279### off('close')<sup>11+</sup>
5280
5281off(type: 'close', callback?: Callback\<void\>): void
5282
5283取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
5284
5285**系统能力**:SystemCapability.Communication.NetStack
5286
5287**参数:**
5288
5289| 参数名   | 类型             | 必填 | 说明                                |
5290| -------- | ---------------- | ---- | ----------------------------------- |
5291| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
5292| callback | Callback\<void\> | 否   | 指定传入on的一个callback取消订阅。 |
5293
5294**错误码:**
5295
5296| 错误码ID | 错误信息         |
5297| -------- | ---------------- |
5298| 401      | Parameter error. |
5299
5300**示例:**
5301
5302```ts
5303import { socket } from '@kit.NetworkKit';
5304
5305let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5306let callback = () => {
5307  console.log("on close success");
5308}
5309server.on('connect', (connection: socket.LocalSocketConnection) => {
5310  connection.on('close', callback);
5311  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5312  connection.off('close', callback);
5313  connection.off('close');
5314});
5315```
5316
5317### on('error')<sup>11+</sup>
5318
5319on(type: 'error', callback: ErrorCallback): void
5320
5321订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
5322
5323**系统能力**:SystemCapability.Communication.NetStack
5324
5325**参数:**
5326
5327| 参数名   | 类型          | 必填 | 说明                                 |
5328| -------- | ------------- | ---- | ------------------------------------ |
5329| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5330| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
5331
5332**错误码:**
5333
5334| 错误码ID | 错误信息         |
5335| -------- | ---------------- |
5336| 401      | Parameter error. |
5337
5338**示例:**
5339
5340```ts
5341import { socket } from '@kit.NetworkKit';
5342
5343let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5344server.on('connect', (connection: socket.LocalSocketConnection) => {
5345  connection.on('error', (err: Object) => {
5346    console.error("on error, err:" + JSON.stringify(err))
5347  });
5348});
5349```
5350
5351### off('error')<sup>11+</sup>
5352
5353off(type: 'error', callback?: ErrorCallback): void
5354
5355取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
5356
5357**系统能力**:SystemCapability.Communication.NetStack
5358
5359**参数:**
5360
5361| 参数名   | 类型          | 必填 | 说明                                 |
5362| -------- | ------------- | ---- | ------------------------------------ |
5363| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5364| callback | ErrorCallback | 否   | 指定传入on的一个callback取消订阅。   |
5365
5366**错误码:**
5367
5368| 错误码ID | 错误信息         |
5369| -------- | ---------------- |
5370| 401      | Parameter error. |
5371
5372**示例:**
5373
5374```ts
5375import { socket } from '@kit.NetworkKit';
5376
5377let callback = (err: Object) => {
5378  console.error("on error, err: " + JSON.stringify(err));
5379}
5380let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5381server.on('connect', (connection: socket.LocalSocketConnection) => {
5382  connection.on('error', callback);
5383  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5384  connection.off('error', callback);
5385  connection.off('error');
5386});
5387```
5388
5389## LocalSocket 错误码说明
5390
5391LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。
5392
5393错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
5394
5395## socket.constructTLSSocketInstance<sup>9+</sup>
5396
5397constructTLSSocketInstance(): TLSSocket
5398
5399创建并返回一个TLSSocket对象。
5400
5401**系统能力**:SystemCapability.Communication.NetStack
5402
5403**返回值:**
5404
5405| 类型                               | 说明                    |
5406|  --------------------------------- |  ---------------------- |
5407| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
5408
5409**示例:**
5410
5411```ts
5412import { socket } from '@kit.NetworkKit';
5413
5414let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5415```
5416
5417## socket.constructTLSSocketInstance<sup>12+</sup>
5418
5419constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket
5420
5421将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。
5422
5423> **说明:**
5424> 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。
5425
5426**系统能力**:SystemCapability.Communication.NetStack
5427
5428**参数:**
5429
5430| 参数名       | 类型 | 必填 | 说明                     |
5431|-----------|----| ---- |------------------------|
5432| tcpSocket | [TCPSocket](#tcpsocket)   | 是   | 需要进行升级的TCPSocket对象。 |
5433
5434**返回值:**
5435
5436| 类型                               | 说明                    |
5437|  --------------------------------- |  ---------------------- |
5438| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
5439
5440**错误码:**
5441
5442| 错误码ID   | 错误信息                             |
5443|---------|----------------------------------|
5444| 401     | Parameter error.  |
5445| 2300002 | System internal error.  |
5446| 2303601 | Invalid socket FD.     |
5447| 2303602 | Socket is not connected.  |
5448
5449**示例:**
5450
5451```ts
5452import { socket } from '@kit.NetworkKit';
5453import { BusinessError } from '@kit.BasicServicesKit';
5454
5455let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
5456let tcpconnectoptions: socket.TCPConnectOptions = {
5457  address: {
5458    address: '192.168.xx.xxx',
5459    port: 8080
5460  },
5461  timeout: 6000
5462}
5463tcp.connect(tcpconnectoptions, (err: BusinessError) => {
5464  if (err) {
5465    console.log('connect fail');
5466    return;
5467  }
5468  console.log('connect success');
5469
5470  // 确保TCPSocket已连接后,再升级TLSSocket
5471  let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp);
5472})
5473```
5474
5475## TLSSocket<sup>9+</sup>
5476
5477TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。
5478
5479### bind<sup>9+</sup>
5480
5481bind(address: NetAddress, callback: AsyncCallback\<void\>): void
5482
5483绑定IP地址和端口。使用callback方法作为异步方法。
5484
5485> **说明:**
5486> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。
5487
5488**需要权限**:ohos.permission.INTERNET
5489
5490**系统能力**:SystemCapability.Communication.NetStack
5491
5492**参数:**
5493
5494| 参数名   | 类型                               | 必填 | 说明                                                   |
5495| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
5496| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
5497| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。|
5498
5499**错误码:**
5500
5501| 错误码ID | 错误信息                 |
5502| ------- | ----------------------- |
5503| 401     | Parameter error.        |
5504| 201     | Permission denied.      |
5505| 2303198 | Address already in use. |
5506| 2300002 | System internal error.  |
5507
5508**示例:**
5509
5510```ts
5511import { socket } from '@kit.NetworkKit';
5512import { BusinessError } from '@kit.BasicServicesKit';
5513
5514let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5515let bindAddr: socket.NetAddress = {
5516  address: '192.168.xx.xxx',
5517  port: 8080
5518}
5519tls.bind(bindAddr, (err: BusinessError) => {
5520  if (err) {
5521    console.log('bind fail');
5522    return;
5523  }
5524  console.log('bind success');
5525});
5526```
5527
5528### bind<sup>9+</sup>
5529
5530bind(address: NetAddress): Promise\<void\>
5531
5532绑定IP地址和端口。使用Promise方法作为异步方法。
5533
5534> **说明:**
5535> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。
5536
5537**需要权限**:ohos.permission.INTERNET
5538
5539**系统能力**:SystemCapability.Communication.NetStack
5540
5541**参数:**
5542
5543| 参数名  | 类型                               | 必填 | 说明                                                   |
5544| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
5545| address | [NetAddress](#netaddress)          | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
5546
5547**返回值:**
5548
5549| 类型            | 说明                                                     |
5550|  -------------- |  ------------------------------------------------------- |
5551| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 |
5552
5553**错误码:**
5554
5555| 错误码ID | 错误信息                 |
5556| ------- | ----------------------- |
5557| 401     | Parameter error.        |
5558| 201     | Permission denied.      |
5559| 2303198 | Address already in use. |
5560| 2300002 | System internal error.  |
5561
5562**示例:**
5563
5564```ts
5565import { socket } from '@kit.NetworkKit';
5566import { BusinessError } from '@kit.BasicServicesKit';
5567
5568let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5569let bindAddr: socket.NetAddress = {
5570  address: '192.168.xx.xxx',
5571  port: 8080
5572}
5573tls.bind(bindAddr).then(() => {
5574  console.log('bind success');
5575}).catch((err: BusinessError) => {
5576  console.log('bind fail');
5577});
5578```
5579
5580### getState<sup>9+</sup>
5581
5582getState(callback: AsyncCallback\<SocketStateBase\>): void
5583
5584在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。
5585
5586**系统能力**:SystemCapability.Communication.NetStack
5587
5588**参数:**
5589
5590| 参数名   | 类型                                                   | 必填 | 说明       |
5591| -------- | ------------------------------------------------------ | ---- | ---------- |
5592| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 |
5593
5594**错误码:**
5595
5596| 错误码ID | 错误信息                        |
5597| ------- | ------------------------------ |
5598| 2303188 | Socket operation on non-socket.|
5599| 2300002 | System internal error.         |
5600
5601**示例:**
5602
5603```ts
5604import { socket } from '@kit.NetworkKit';
5605import { BusinessError } from '@kit.BasicServicesKit';
5606
5607let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5608let bindAddr: socket.NetAddress = {
5609  address: '192.168.xx.xxx',
5610  port: 8080
5611}
5612tls.bind(bindAddr, (err: BusinessError) => {
5613  if (err) {
5614    console.log('bind fail');
5615    return;
5616  }
5617  console.log('bind success');
5618});
5619tls.getState((err: BusinessError, data: socket.SocketStateBase) => {
5620  if (err) {
5621    console.log('getState fail');
5622    return;
5623  }
5624  console.log('getState success:' + JSON.stringify(data));
5625});
5626```
5627
5628### getState<sup>9+</sup>
5629
5630getState(): Promise\<SocketStateBase\>
5631
5632在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。
5633
5634**系统能力**:SystemCapability.Communication.NetStack
5635
5636**返回值:**
5637
5638| 类型                                             | 说明                                       |
5639|  ----------------------------------------------- |  ----------------------------------------- |
5640| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。|
5641
5642**错误码:**
5643
5644| 错误码ID | 错误信息                        |
5645| ------- | ------------------------------ |
5646| 2303188 | Socket operation on non-socket.|
5647| 2300002 | System internal error.         |
5648
5649**示例:**
5650
5651```ts
5652import { socket } from '@kit.NetworkKit';
5653import { BusinessError } from '@kit.BasicServicesKit';
5654
5655let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5656let bindAddr: socket.NetAddress = {
5657  address: '192.168.xx.xxx',
5658  port: 8080
5659}
5660tls.bind(bindAddr, (err: BusinessError) => {
5661  if (err) {
5662    console.log('bind fail');
5663    return;
5664  }
5665  console.log('bind success');
5666});
5667tls.getState().then(() => {
5668  console.log('getState success');
5669}).catch((err: BusinessError) => {
5670  console.log('getState fail');
5671});
5672```
5673
5674### setExtraOptions<sup>9+</sup>
5675
5676setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
5677
5678在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
5679
5680**系统能力**:SystemCapability.Communication.NetStack
5681
5682**参数:**
5683
5684| 参数名   | 类型                                      | 必填 | 说明                                                         |
5685| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
5686| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
5687| callback | AsyncCallback\<void\>                     | 是   | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。|
5688
5689**错误码:**
5690
5691| 错误码ID | 错误信息                        |
5692| ------- | -----------------------------  |
5693| 401     | Parameter error.               |
5694| 2303188 | Socket operation on non-socket.|
5695| 2300002 | System internal error.         |
5696
5697**示例:**
5698
5699```ts
5700import { socket } from '@kit.NetworkKit';
5701import { BusinessError } from '@kit.BasicServicesKit';
5702
5703let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5704let bindAddr: socket.NetAddress = {
5705  address: '192.168.xx.xxx',
5706  port: 8080
5707}
5708tls.bind(bindAddr, (err: BusinessError) => {
5709  if (err) {
5710    console.log('bind fail');
5711    return;
5712  }
5713  console.log('bind success');
5714});
5715
5716interface SocketLinger {
5717  on: boolean;
5718  linger: number;
5719}
5720
5721let tcpExtraOptions: socket.TCPExtraOptions = {
5722  keepAlive: true,
5723  OOBInline: true,
5724  TCPNoDelay: true,
5725  socketLinger: { on: true, linger: 10 } as SocketLinger,
5726  receiveBufferSize: 1000,
5727  sendBufferSize: 1000,
5728  reuseAddress: true,
5729  socketTimeout: 3000
5730}
5731tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
5732  if (err) {
5733    console.log('setExtraOptions fail');
5734    return;
5735  }
5736  console.log('setExtraOptions success');
5737});
5738```
5739
5740### setExtraOptions<sup>9+</sup>
5741
5742setExtraOptions(options: TCPExtraOptions): Promise\<void\>
5743
5744在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
5745
5746**系统能力**:SystemCapability.Communication.NetStack
5747
5748**参数:**
5749
5750| 参数名  | 类型                                      | 必填 | 说明                                                         |
5751| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
5752| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
5753
5754**返回值:**
5755
5756| 类型            | 说明                                                 |
5757|  -------------- |  --------------------------------------------------- |
5758| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 |
5759
5760**错误码:**
5761
5762| 错误码ID | 错误信息                        |
5763| ------- | ------------------------------ |
5764| 401     | Parameter error.               |
5765| 2303188 | Socket operation on non-socket.|
5766| 2300002 | System internal error.         |
5767
5768**示例:**
5769
5770```ts
5771import { socket } from '@kit.NetworkKit';
5772import { BusinessError } from '@kit.BasicServicesKit';
5773
5774let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5775let bindAddr: socket.NetAddress = {
5776  address: '192.168.xx.xxx',
5777  port: 8080
5778}
5779tls.bind(bindAddr, (err: BusinessError) => {
5780  if (err) {
5781    console.log('bind fail');
5782    return;
5783  }
5784  console.log('bind success');
5785});
5786
5787interface SocketLinger {
5788  on: boolean;
5789  linger: number;
5790}
5791
5792let tcpExtraOptions: socket.TCPExtraOptions = {
5793  keepAlive: true,
5794  OOBInline: true,
5795  TCPNoDelay: true,
5796  socketLinger: { on: true, linger: 10 } as SocketLinger,
5797  receiveBufferSize: 1000,
5798  sendBufferSize: 1000,
5799  reuseAddress: true,
5800  socketTimeout: 3000
5801}
5802tls.setExtraOptions(tcpExtraOptions).then(() => {
5803  console.log('setExtraOptions success');
5804}).catch((err: BusinessError) => {
5805  console.log('setExtraOptions fail');
5806});
5807```
5808
5809### on('message')<sup>9+</sup>
5810
5811on(type: 'message', callback: Callback\<SocketMessageInfo\>): void;
5812
5813订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
5814
5815**系统能力**:SystemCapability.Communication.NetStack
5816
5817**参数:**
5818
5819| 参数名   | 类型                                                         | 必填 | 说明                                      |
5820| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
5821| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
5822| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 |
5823
5824**错误码:**
5825
5826| 错误码ID | 错误信息                        |
5827| ------- | ------------------------------ |
5828| 401     | Parameter error.               |
5829
5830**示例:**
5831
5832```ts
5833import { socket } from '@kit.NetworkKit';
5834import { BusinessError } from '@kit.BasicServicesKit';
5835
5836let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5837let messageView = '';
5838tls.on('message', (value: socket.SocketMessageInfo) => {
5839  for (let i: number = 0; i < value.message.byteLength; i++) {
5840    let uint8Array = new Uint8Array(value.message) 
5841    let messages = uint8Array[i]
5842    let message = String.fromCharCode(messages);
5843    messageView += message;
5844  }
5845  console.log('on message message: ' + JSON.stringify(messageView));
5846  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
5847});
5848```
5849
5850### off('message')<sup>9+</sup>
5851
5852off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
5853
5854取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
5855
5856**系统能力**:SystemCapability.Communication.NetStack
5857
5858**参数:**
5859
5860| 参数名   | 类型                                                         | 必填 | 说明                                      |
5861| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
5862| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
5863| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 |
5864
5865**错误码:**
5866
5867| 错误码ID | 错误信息                        |
5868| ------- | ------------------------------ |
5869| 401     | Parameter error.               |
5870
5871**示例:**
5872
5873```ts
5874import { socket } from '@kit.NetworkKit';
5875import { BusinessError } from '@kit.BasicServicesKit';
5876
5877let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5878let messageView = '';
5879let callback = (value: socket.SocketMessageInfo) => {
5880  for (let i: number = 0; i < value.message.byteLength; i++) {
5881    let uint8Array = new Uint8Array(value.message) 
5882    let messages = uint8Array[i]
5883    let message = String.fromCharCode(messages);
5884    messageView += message;
5885  }
5886  console.log('on message message: ' + JSON.stringify(messageView));
5887  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
5888}
5889tls.on('message', callback);
5890// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5891tls.off('message', callback);
5892```
5893### on('connect' | 'close')<sup>9+</sup>
5894
5895on(type: 'connect' | 'close', callback: Callback\<void\>): void
5896
5897订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
5898
5899**系统能力**:SystemCapability.Communication.NetStack
5900
5901**参数:**
5902
5903| 参数名   | 类型             | 必填 | 说明                                                         |
5904| -------- | ---------------- | ---- | ------------------------------------------------------------ |
5905| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
5906| callback | Callback\<void\> | 是   | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。                                                   |
5907
5908**错误码:**
5909
5910| 错误码ID | 错误信息                        |
5911| ------- | ------------------------------ |
5912| 401     | Parameter error.               |
5913
5914**示例:**
5915
5916```ts
5917import { socket } from '@kit.NetworkKit';
5918import { BusinessError } from '@kit.BasicServicesKit';
5919
5920let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5921tls.on('connect', () => {
5922  console.log("on connect success")
5923});
5924tls.on('close', () => {
5925  console.log("on close success")
5926});
5927```
5928
5929### off('connect' | 'close')<sup>9+</sup>
5930
5931off(type: 'connect' | 'close', callback?: Callback\<void\>): void
5932
5933取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
5934
5935**系统能力**:SystemCapability.Communication.NetStack
5936
5937**参数:**
5938
5939| 参数名   | 类型             | 必填 | 说明                                                         |
5940| -------- | ---------------- | ---- | ------------------------------------------------------------ |
5941| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
5942| callback | Callback\<void\> | 否   | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。          |
5943
5944**错误码:**
5945
5946| 错误码ID | 错误信息                        |
5947| ------- | ------------------------------ |
5948| 401     | Parameter error.               |
5949
5950**示例:**
5951
5952```ts
5953import { socket } from '@kit.NetworkKit';
5954import { BusinessError } from '@kit.BasicServicesKit';
5955
5956let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5957let callback1 = () => {
5958  console.log("on connect success");
5959}
5960tls.on('connect', callback1);
5961// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5962tls.off('connect', callback1);
5963tls.off('connect');
5964let callback2 = () => {
5965  console.log("on close success");
5966}
5967tls.on('close', callback2);
5968// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5969tls.off('close', callback2);
5970```
5971
5972### on('error')<sup>9+</sup>
5973
5974on(type: 'error', callback: ErrorCallback): void
5975
5976订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
5977
5978**系统能力**:SystemCapability.Communication.NetStack
5979
5980**参数:**
5981
5982| 参数名   | 类型          | 必填 | 说明                                 |
5983| -------- | ------------- | ---- | ------------------------------------ |
5984| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5985| callback | ErrorCallback | 是   | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。        |
5986
5987**错误码:**
5988
5989| 错误码ID | 错误信息                        |
5990| ------- | ------------------------------ |
5991| 401     | Parameter error.               |
5992
5993**示例:**
5994
5995```ts
5996import { socket } from '@kit.NetworkKit';
5997import { BusinessError } from '@kit.BasicServicesKit';
5998
5999let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6000tls.on('error', (err: BusinessError) => {
6001  console.log("on error, err:" + JSON.stringify(err))
6002});
6003```
6004
6005### off('error')<sup>9+</sup>
6006
6007off(type: 'error', callback?: ErrorCallback): void
6008
6009取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
6010
6011**系统能力**:SystemCapability.Communication.NetStack
6012
6013**参数:**
6014
6015| 参数名   | 类型          | 必填 | 说明                                 |
6016| -------- | ------------- | ---- | ------------------------------------ |
6017| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
6018| callback | ErrorCallback | 否   | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。                           |
6019
6020**错误码:**
6021
6022| 错误码ID | 错误信息                        |
6023| ------- | ------------------------------ |
6024| 401     | Parameter error.               |
6025
6026**示例:**
6027
6028```ts
6029import { socket } from '@kit.NetworkKit';
6030import { BusinessError } from '@kit.BasicServicesKit';
6031
6032let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6033let callback = (err: BusinessError) => {
6034  console.log("on error, err:" + JSON.stringify(err));
6035}
6036tls.on('error', callback);
6037// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6038tls.off('error', callback);
6039```
6040
6041### connect<sup>9+</sup>
6042
6043connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
6044
6045在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。
6046
6047**系统能力**:SystemCapability.Communication.NetStack
6048
6049**参数:**
6050
6051| 参数名   | 类型                                   | 必填 | 说明 |
6052| -------- | ---------------------------------------| ----| --------------- |
6053| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocket连接所需要的参数。|
6054| callback | AsyncCallback\<void\>                  | 是   | 回调函数,成功无返回,失败返回错误码、错误信息。|
6055
6056**错误码:**
6057
6058| 错误码ID | 错误信息                                      |
6059| ------- | -------------------------------------------- |
6060| 401     | Parameter error.                             |
6061| 2303104 | Interrupted system call.                     |
6062| 2303109 | Bad file number.                             |
6063| 2303111 | Resource temporarily unavailable. Try again. |
6064| 2303188 | Socket operation on non-socket.              |
6065| 2303191 | Incorrect socket protocol type.              |
6066| 2303198 | Address already in use.                      |
6067| 2303199 | Cannot assign requested address.             |
6068| 2303210 | Connection timed out.                        |
6069| 2303501 | SSL is null.                                 |
6070| 2303502 | An error occurred when reading data on the TLS socket.|
6071| 2303503 | An error occurred when writing data on the TLS socket.|
6072| 2303505 | An error occurred in the TLS system call.    |
6073| 2303506 | Failed to close the TLS connection.          |
6074| 2300002 | System internal error.                       |
6075
6076**示例:**
6077
6078```ts
6079import { socket } from '@kit.NetworkKit';
6080import { BusinessError } from '@kit.BasicServicesKit';
6081
6082let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
6083let bindAddr: socket.NetAddress = {
6084  address: '0.0.0.0',
6085}
6086tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6087  if (err) {
6088    console.log('bind fail');
6089    return;
6090  }
6091  console.log('bind success');
6092});
6093let twoWayNetAddr: socket.NetAddress = {
6094  address: '192.168.xx.xxx',
6095  port: 8080
6096}
6097let twoWaySecureOptions: socket.TLSSecureOptions = {
6098  key: "xxxx",
6099  cert: "xxxx",
6100  ca: ["xxxx"],
6101  password: "xxxx",
6102  protocols: socket.Protocol.TLSv12,
6103  useRemoteCipherPrefer: true,
6104  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6105  cipherSuite: "AES256-SHA256"
6106}
6107let tlsConnectOptions: socket.TLSConnectOptions = {
6108  address: twoWayNetAddr,
6109  secureOptions: twoWaySecureOptions,
6110  ALPNProtocols: ["spdy/1", "http/1.1"]
6111}
6112
6113tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => {
6114  console.error("connect callback error" + err);
6115});
6116
6117let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
6118tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6119  if (err) {
6120    console.log('bind fail');
6121    return;
6122  }
6123  console.log('bind success');
6124});
6125let oneWayNetAddr: socket.NetAddress = {
6126  address: '192.168.xx.xxx',
6127  port: 8080
6128}
6129let oneWaySecureOptions: socket.TLSSecureOptions = {
6130  ca: ["xxxx", "xxxx"],
6131  cipherSuite: "AES256-SHA256"
6132}
6133let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6134  address: oneWayNetAddr,
6135  secureOptions: oneWaySecureOptions
6136}
6137tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => {
6138  console.error("connect callback error" + err);
6139});
6140```
6141
6142### connect<sup>9+</sup>
6143
6144connect(options: TLSConnectOptions): Promise\<void\>
6145
6146在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。
6147
6148**系统能力**:SystemCapability.Communication.NetStack
6149
6150**参数:**
6151
6152| 参数名   | 类型                                   | 必填 | 说明 |
6153| -------- | --------------------------------------| ----| --------------- |
6154| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。|
6155
6156**返回值:**
6157
6158| 类型                                        | 说明                          |
6159| ------------------------------------------- | ----------------------------- |
6160| Promise\<void\>                              | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。|
6161
6162**错误码:**
6163
6164| 错误码ID | 错误信息                                      |
6165| ------- | -------------------------------------------- |
6166| 401     | Parameter error.                             |
6167| 2303104 | Interrupted system call.                     |
6168| 2303109 | Bad file number.                             |
6169| 2303111 | Resource temporarily unavailable. Try again. |
6170| 2303188 | Socket operation on non-socket.              |
6171| 2303191 | Incorrect socket protocol type.              |
6172| 2303198 | Address already in use.                      |
6173| 2303199 | Cannot assign requested address.             |
6174| 2303210 | Connection timed out.                        |
6175| 2303501 | SSL is null.                                 |
6176| 2303502 | An error occurred when reading data on the TLS socket.|
6177| 2303503 | An error occurred when writing data on the TLS socket.|
6178| 2303505 | An error occurred in the TLS system call.    |
6179| 2303506 | Failed to close the TLS connection.          |
6180| 2300002 | System internal error.                       |
6181
6182**示例:**
6183
6184```ts
6185import { socket } from '@kit.NetworkKit';
6186import { BusinessError } from '@kit.BasicServicesKit';
6187
6188let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
6189let bindAddr: socket.NetAddress = {
6190  address: '0.0.0.0',
6191}
6192tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6193  if (err) {
6194    console.log('bind fail');
6195    return;
6196  }
6197  console.log('bind success');
6198});
6199let twoWayNetAddr: socket.NetAddress = {
6200  address: '192.168.xx.xxx',
6201  port: 8080
6202}
6203let twoWaySecureOptions: socket.TLSSecureOptions = {
6204  key: "xxxx",
6205  cert: "xxxx",
6206  ca: ["xxxx"],
6207  password: "xxxx",
6208  protocols: socket.Protocol.TLSv12,
6209  useRemoteCipherPrefer: true,
6210  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6211  cipherSuite: "AES256-SHA256"
6212}
6213let tlsConnectOptions: socket.TLSConnectOptions = {
6214  address: twoWayNetAddr,
6215  secureOptions: twoWaySecureOptions,
6216  ALPNProtocols: ["spdy/1", "http/1.1"]
6217}
6218
6219tlsTwoWay.connect(tlsConnectOptions).then(() => {
6220  console.log("connect successfully");
6221}).catch((err: BusinessError) => {
6222  console.log("connect failed " + JSON.stringify(err));
6223});
6224
6225let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
6226tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6227  if (err) {
6228    console.log('bind fail');
6229    return;
6230  }
6231  console.log('bind success');
6232});
6233let oneWayNetAddr: socket.NetAddress = {
6234  address: '192.168.xx.xxx',
6235  port: 8080
6236}
6237let oneWaySecureOptions: socket.TLSSecureOptions = {
6238  ca: ["xxxx", "xxxx"],
6239  cipherSuite: "AES256-SHA256"
6240}
6241let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6242  address: oneWayNetAddr,
6243  secureOptions: oneWaySecureOptions
6244}
6245tlsOneWay.connect(tlsOneWayConnectOptions).then(() => {
6246  console.log("connect successfully");
6247}).catch((err: BusinessError) => {
6248  console.log("connect failed " + JSON.stringify(err));
6249});
6250```
6251
6252### getRemoteAddress<sup>9+</sup>
6253
6254getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
6255
6256在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
6257
6258**系统能力**:SystemCapability.Communication.NetStack
6259
6260**参数:**
6261
6262| 参数名   | 类型                                              | 必填 | 说明       |
6263| -------- | ------------------------------------------------- | ---- | ---------- |
6264| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 |
6265
6266**错误码:**
6267
6268| 错误码ID | 错误信息                        |
6269| ------- | -----------------------------  |
6270| 2303188 | Socket operation on non-socket.|
6271| 2300002 | System internal error.         |
6272
6273**示例:**
6274
6275```ts
6276import { socket } from '@kit.NetworkKit';
6277import { BusinessError } from '@kit.BasicServicesKit';
6278
6279let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6280tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
6281  if (err) {
6282    console.log('getRemoteAddress fail');
6283    return;
6284  }
6285  console.log('getRemoteAddress success:' + JSON.stringify(data));
6286});
6287```
6288
6289### getRemoteAddress<sup>9+</sup>
6290
6291getRemoteAddress(): Promise\<NetAddress\>
6292
6293在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
6294
6295**系统能力**:SystemCapability.Communication.NetStack
6296
6297**返回值:**
6298
6299| 类型                                        | 说明                                        |
6300|  ------------------------------------------ |  ------------------------------------------ |
6301| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
6302
6303**错误码:**
6304
6305| 错误码ID | 错误信息                        |
6306| ------- | ------------------------------ |
6307| 2303188 | Socket operation on non-socket.|
6308| 2300002 | System internal error.         |
6309
6310**示例:**
6311
6312```ts
6313import { socket } from '@kit.NetworkKit';
6314import { BusinessError } from '@kit.BasicServicesKit';
6315
6316let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6317tls.getRemoteAddress().then(() => {
6318  console.log('getRemoteAddress success');
6319}).catch((err: BusinessError) => {
6320  console.log('getRemoteAddress fail');
6321});
6322```
6323
6324### getCertificate<sup>9+</sup>
6325
6326getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
6327
6328在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。
6329
6330**系统能力**:SystemCapability.Communication.NetStack
6331
6332**参数:**
6333
6334| 参数名   | 类型                                   | 必填 | 说明 |
6335| -------- | ----------------------------------------| ---- | ---------------|
6336| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>    | 是   | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。|
6337
6338**错误码:**
6339
6340| 错误码ID | 错误信息                        |
6341| ------- | ------------------------------ |
6342| 2303501 | SSL is null.                   |
6343| 2303504 | An error occurred when verifying the X.509 certificate.|
6344| 2300002 | System internal error.         |
6345
6346**示例:**
6347
6348```ts
6349import { socket } from '@kit.NetworkKit';
6350import { BusinessError } from '@kit.BasicServicesKit';
6351
6352let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6353tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
6354  if (err) {
6355    console.log("getCertificate callback error = " + err);
6356  } else {
6357    console.log("getCertificate callback = " + data);
6358  }
6359});
6360```
6361
6362### getCertificate<sup>9+</sup>
6363
6364getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
6365
6366在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。
6367
6368**系统能力**:SystemCapability.Communication.NetStack
6369
6370**返回值:**
6371
6372| 类型            | 说明                  |
6373| -------------- | -------------------- |
6374| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
6375
6376**错误码:**
6377
6378| 错误码ID | 错误信息                        |
6379| ------- | ------------------------------ |
6380| 2303501 | SSL is null.                   |
6381| 2303504 | An error occurred when verifying the X.509 certificate.|
6382| 2300002 | System internal error.         |
6383
6384**示例:**
6385
6386```ts
6387import { socket } from '@kit.NetworkKit';
6388import { BusinessError } from '@kit.BasicServicesKit';
6389import { util } from '@kit.ArkTS';
6390
6391let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6392tls.getCertificate().then((data: socket.X509CertRawData) => {
6393  const decoder = util.TextDecoder.create();
6394  const str = decoder.decodeWithStream(data.data);
6395  console.log("getCertificate: " + str);
6396}).catch((err: BusinessError) => {
6397  console.error("failed" + err);
6398});
6399```
6400
6401### getRemoteCertificate<sup>9+</sup>
6402
6403getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
6404
6405在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。
6406
6407**系统能力**:SystemCapability.Communication.NetStack
6408
6409**参数:**
6410
6411| 参数名    | 类型                                    | 必填  | 说明           |
6412| -------- | ----------------------------------------| ---- | ---------------|
6413| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>  | 是   | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 |
6414
6415**错误码:**
6416
6417| 错误码ID | 错误信息                        |
6418| ------- | ------------------------------ |
6419| 2303501 | SSL is null.                   |
6420| 2300002 | System internal error.         |
6421
6422**示例:**
6423
6424```ts
6425import { socket } from '@kit.NetworkKit';
6426import { BusinessError } from '@kit.BasicServicesKit';
6427import { util } from '@kit.ArkTS';
6428
6429let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6430tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
6431  if (err) {
6432    console.log("getRemoteCertificate callback error = " + err);
6433  } else {
6434    const decoder = util.TextDecoder.create();
6435    const str = decoder.decodeWithStream(data.data);
6436    console.log("getRemoteCertificate callback = " + str);
6437  }
6438});
6439```
6440
6441### getRemoteCertificate<sup>9+</sup>
6442
6443getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
6444
6445在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。
6446
6447**系统能力**:SystemCapability.Communication.NetStack
6448
6449**返回值:**
6450
6451| 类型            | 说明                  |
6452| -------------- | -------------------- |
6453| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 |
6454
6455**错误码:**
6456
6457| 错误码ID | 错误信息                        |
6458| ------- | ------------------------------ |
6459| 2303501 | SSL is null.                   |
6460| 2300002 | System internal error.         |
6461
6462**示例:**
6463
6464```ts
6465import { socket } from '@kit.NetworkKit';
6466import { BusinessError } from '@kit.BasicServicesKit';
6467import { util } from '@kit.ArkTS';
6468
6469let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6470tls.getRemoteCertificate().then((data: socket.X509CertRawData) => {
6471  const decoder = util.TextDecoder.create();
6472  const str = decoder.decodeWithStream(data.data);
6473  console.log("getRemoteCertificate:" + str);
6474}).catch((err: BusinessError) => {
6475  console.error("failed" + err);
6476});
6477```
6478
6479### getProtocol<sup>9+</sup>
6480
6481getProtocol(callback: AsyncCallback\<string\>): void
6482
6483在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
6484
6485**系统能力**:SystemCapability.Communication.NetStack
6486
6487**参数:**
6488
6489| 参数名   | 类型                                       | 必填 | 说明           |
6490| -------- | ----------------------------------------| ---- | ---------------|
6491| callback | AsyncCallback\<string\>                  | 是   | 回调函数,返回通信的协议。失败返回错误码、错误信息。|
6492
6493**错误码:**
6494
6495| 错误码ID | 错误信息                        |
6496| ------- | -----------------------------  |
6497| 2303501 | SSL is null.                   |
6498| 2303505 | An error occurred in the TLS system call. |
6499| 2300002 | System internal error.         |
6500
6501**示例:**
6502
6503```ts
6504import { socket } from '@kit.NetworkKit';
6505import { BusinessError } from '@kit.BasicServicesKit';
6506
6507let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6508tls.getProtocol((err: BusinessError, data: string) => {
6509  if (err) {
6510    console.log("getProtocol callback error = " + err);
6511  } else {
6512    console.log("getProtocol callback = " + data);
6513  }
6514});
6515```
6516
6517### getProtocol<sup>9+</sup>
6518
6519getProtocol():Promise\<string\>
6520
6521在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
6522
6523**系统能力**:SystemCapability.Communication.NetStack
6524
6525**返回值:**
6526
6527| 类型            | 说明                  |
6528| -------------- | -------------------- |
6529| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
6530
6531**错误码:**
6532
6533| 错误码ID | 错误信息                        |
6534| ------- | ------------------------------ |
6535| 2303501 | SSL is null.                   |
6536| 2303505 | An error occurred in the TLS system call. |
6537| 2300002 | System internal error.         |
6538
6539**示例:**
6540
6541```ts
6542import { socket } from '@kit.NetworkKit';
6543import { BusinessError } from '@kit.BasicServicesKit';
6544
6545let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6546tls.getProtocol().then((data: string) => {
6547  console.log(data);
6548}).catch((err: BusinessError) => {
6549  console.error("failed" + err);
6550});
6551```
6552
6553### getCipherSuite<sup>9+</sup>
6554
6555getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
6556
6557在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
6558
6559**系统能力**:SystemCapability.Communication.NetStack
6560
6561**参数:**
6562
6563| 参数名   | 类型                                     | 必填 | 说明 |
6564| -------- | ----------------------------------------| ---- | ---------------|
6565| callback | AsyncCallback\<Array\<string\>\>          | 是   | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 |
6566
6567**错误码:**
6568
6569| 错误码ID | 错误信息                        |
6570| ------- | ------------------------------ |
6571| 2303501 | SSL is null.                   |
6572| 2303502 | An error occurred when reading data on the TLS socket.|
6573| 2303505 | An error occurred in the TLS system call. |
6574| 2300002 | System internal error.         |
6575
6576**示例:**
6577
6578```ts
6579import { socket } from '@kit.NetworkKit';
6580import { BusinessError } from '@kit.BasicServicesKit';
6581
6582let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6583tls.getCipherSuite((err: BusinessError, data: Array<string>) => {
6584  if (err) {
6585    console.log("getCipherSuite callback error = " + err);
6586  } else {
6587    console.log("getCipherSuite callback = " + data);
6588  }
6589});
6590```
6591
6592### getCipherSuite<sup>9+</sup>
6593
6594getCipherSuite(): Promise\<Array\<string\>\>
6595
6596在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
6597
6598**系统能力**:SystemCapability.Communication.NetStack
6599
6600**返回值:**
6601
6602| 类型                    | 说明                  |
6603| ---------------------- | --------------------- |
6604| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
6605
6606**错误码:**
6607
6608| 错误码ID | 错误信息                        |
6609| ------- | ------------------------------ |
6610| 2303501 | SSL is null.                   |
6611| 2303502 | An error occurred when reading data on the TLS socket.|
6612| 2303505 | An error occurred in the TLS system call. |
6613| 2300002 | System internal error.         |
6614
6615**示例:**
6616
6617```ts
6618import { socket } from '@kit.NetworkKit';
6619import { BusinessError } from '@kit.BasicServicesKit';
6620
6621let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6622tls.getCipherSuite().then((data: Array<string>) => {
6623  console.log('getCipherSuite success:' + JSON.stringify(data));
6624}).catch((err: BusinessError) => {
6625  console.error("failed" + err);
6626});
6627```
6628
6629### getSignatureAlgorithms<sup>9+</sup>
6630
6631getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
6632
6633在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。
6634
6635**系统能力**:SystemCapability.Communication.NetStack
6636
6637**参数:**
6638
6639| 参数名   | 类型                                   | 必填 | 说明            |
6640| -------- | -------------------------------------| ---- | ---------------|
6641| callback | AsyncCallback\<Array\<string\>\>         | 是   | 回调函数,返回双方支持的签名算法。  |
6642
6643**错误码:**
6644
6645| 错误码ID | 错误信息                        |
6646| ------- | ------------------------------ |
6647| 2303501 | SSL is null.                   |
6648| 2300002 | System internal error.         |
6649
6650**示例:**
6651
6652```ts
6653import { socket } from '@kit.NetworkKit';
6654import { BusinessError } from '@kit.BasicServicesKit';
6655
6656let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6657tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
6658  if (err) {
6659    console.log("getSignatureAlgorithms callback error = " + err);
6660  } else {
6661    console.log("getSignatureAlgorithms callback = " + data);
6662  }
6663});
6664```
6665
6666### getSignatureAlgorithms<sup>9+</sup>
6667
6668getSignatureAlgorithms(): Promise\<Array\<string\>\>
6669
6670在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。
6671
6672**系统能力**:SystemCapability.Communication.NetStack
6673
6674**返回值:**
6675
6676| 类型                    | 说明                  |
6677| ---------------------- | -------------------- |
6678| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
6679
6680**错误码:**
6681
6682| 错误码ID | 错误信息                        |
6683| ------- | ------------------------------ |
6684| 2303501 | SSL is null.                   |
6685| 2300002 | System internal error.         |
6686
6687**示例:**
6688
6689```ts
6690import { socket } from '@kit.NetworkKit';
6691import { BusinessError } from '@kit.BasicServicesKit';
6692
6693let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6694tls.getSignatureAlgorithms().then((data: Array<string>) => {
6695  console.log("getSignatureAlgorithms success" + data);
6696}).catch((err: BusinessError) => {
6697  console.error("failed" + err);
6698});
6699```
6700
6701### getLocalAddress<sup>12+</sup>
6702
6703getLocalAddress(): Promise\<NetAddress\>
6704
6705获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。
6706
6707> **说明:**
6708> 在TLSSocketServer通信连接成功之后,才可调用此方法。
6709
6710**系统能力**:SystemCapability.Communication.NetStack
6711
6712**返回值:**
6713
6714| 类型            | 说明                                                 |
6715|  -------------- |  --------------------------------------------------- |
6716| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
6717
6718**错误码:**
6719
6720| 错误码ID | 错误信息                                    |
6721| -------- | ------------------------------------------- |
6722| 2300002  | System internal error.                      |
6723| 2301009  | Bad file descriptor.                            |
6724| 2303188  | Socket operation on non-socket. |
6725
6726**示例:**
6727
6728```ts
6729import { socket } from '@kit.NetworkKit';
6730import { BusinessError } from '@kit.BasicServicesKit';
6731
6732let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6733tls.getLocalAddress().then((localAddress: socket.NetAddress) => {
6734  console.info("Get success: " + JSON.stringify(localAddress));
6735}).catch((err: BusinessError) => {
6736  console.error("Get failed, error: " + JSON.stringify(err));
6737})
6738```
6739
6740### send<sup>9+</sup>
6741
6742send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void
6743
6744在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。
6745
6746**系统能力**:SystemCapability.Communication.NetStack
6747
6748**参数:**
6749
6750| 参数名    | 类型                          | 必填 | 说明            |
6751| -------- | -----------------------------| ---- | ---------------|
6752|   data   | string \| ArrayBuffer                      | 是   | 发送的数据内容。   |
6753| callback | AsyncCallback\<void\>         | 是   | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 |
6754
6755**错误码:**
6756
6757| 错误码ID | 错误信息                                      |
6758| ------- | -------------------------------------------- |
6759| 401     | Parameter error.                             |
6760| 2303501 | SSL is null.                                 |
6761| 2303503 | An error occurred when writing data on the TLS socket.|
6762| 2303505 | An error occurred in the TLS system call.    |
6763| 2303506 | Failed to close the TLS connection.          |
6764| 2300002 | System internal error.                       |
6765
6766**示例:**
6767
6768```ts
6769import { socket } from '@kit.NetworkKit';
6770import { BusinessError } from '@kit.BasicServicesKit';
6771
6772let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6773tls.send("xxxx", (err: BusinessError) => {
6774  if (err) {
6775    console.log("send callback error = " + err);
6776  } else {
6777    console.log("send success");
6778  }
6779});
6780```
6781
6782### send<sup>9+</sup>
6783
6784send(data: string \| ArrayBuffer): Promise\<void\>
6785
6786在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
6787
6788**系统能力**:SystemCapability.Communication.NetStack
6789
6790**参数:**
6791
6792| 参数名    | 类型                          | 必填 | 说明            |
6793| -------- | -----------------------------| ---- | ---------------|
6794|   data   | string \| ArrayBuffer                       | 是   | 发送的数据内容。   |
6795
6796**错误码:**
6797
6798| 错误码ID | 错误信息                                      |
6799| ------- | -------------------------------------------- |
6800| 401     | Parameter error.                             |
6801| 2303501 | SSL is null.                                 |
6802| 2303503 | An error occurred when writing data on the TLS socket.|
6803| 2303505 | An error occurred in the TLS system call.    |
6804| 2303506 | Failed to close the TLS connection.          |
6805| 2300002 | System internal error.                       |
6806
6807**返回值:**
6808
6809| 类型           | 说明                  |
6810| -------------- | -------------------- |
6811| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
6812
6813**示例:**
6814
6815```ts
6816import { socket } from '@kit.NetworkKit';
6817import { BusinessError } from '@kit.BasicServicesKit';
6818
6819let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6820tls.send("xxxx").then(() => {
6821  console.log("send success");
6822}).catch((err: BusinessError) => {
6823  console.error("failed" + err);
6824});
6825```
6826
6827### close<sup>9+</sup>
6828
6829close(callback: AsyncCallback\<void\>): void
6830
6831在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。
6832
6833**系统能力**:SystemCapability.Communication.NetStack
6834
6835**参数:**
6836
6837| 参数名    | 类型                          | 必填 | 说明            |
6838| -------- | -----------------------------| ---- | ---------------|
6839| callback | AsyncCallback\<void\>         | 是   | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 |
6840
6841**错误码:**
6842
6843| 错误码ID | 错误信息                                      |
6844| ------- | -------------------------------------------- |
6845| 401 | Parameter error.                                 |
6846| 2303501 | SSL is null.                                 |
6847| 2303505 | An error occurred in the TLS system call.    |
6848| 2303506 | Failed to close the TLS connection.          |
6849| 2300002 | System internal error.                       |
6850
6851**示例:**
6852
6853```ts
6854import { socket } from '@kit.NetworkKit';
6855import { BusinessError } from '@kit.BasicServicesKit';
6856
6857let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6858tls.close((err: BusinessError) => {
6859  if (err) {
6860    console.log("close callback error = " + err);
6861  } else {
6862    console.log("close success");
6863  }
6864});
6865```
6866
6867### close<sup>9+</sup>
6868
6869close(): Promise\<void\>
6870
6871在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。
6872
6873**系统能力**:SystemCapability.Communication.NetStack
6874
6875**返回值:**
6876
6877| 类型           | 说明                  |
6878| -------------- | -------------------- |
6879| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 |
6880
6881**错误码:**
6882
6883| 错误码ID | 错误信息                                      |
6884| ------- | -------------------------------------------- |
6885| 401 | Parameter error.                                 |
6886| 2303501 | SSL is null.                                 |
6887| 2303505 | An error occurred in the TLS system call.    |
6888| 2303506 | Failed to close the TLS connection.          |
6889| 2300002 | System internal error.                       |
6890
6891**示例:**
6892
6893```ts
6894import { socket } from '@kit.NetworkKit';
6895import { BusinessError } from '@kit.BasicServicesKit';
6896
6897let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6898tls.close().then(() => {
6899  console.log("close success");
6900}).catch((err: BusinessError) => {
6901  console.error("failed" + err);
6902});
6903```
6904
6905## TLSConnectOptions<sup>9+</sup>
6906
6907TLS连接的操作。
6908
6909**系统能力**:SystemCapability.Communication.NetStack
6910
6911| 名称          | 类型                                     | 必填 | 说明            |
6912| -------------- | ------------------------------------- | ---  |-------------- |
6913| address        | [NetAddress](#netaddress)             | 是  |  网关地址。       |
6914| secureOptions  | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。|
6915| ALPNProtocols  | Array\<string\>                         | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。      |
6916| skipRemoteValidation<sup>12+</sup>  | boolean                         | 否 | 是否对服务端进行证书认证,默认为false。      |
6917
6918## TLSSecureOptions<sup>9+</sup>
6919
6920TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。
6921
6922**系统能力**:SystemCapability.Communication.NetStack
6923
6924| 名称                 | 类型                                                    | 必填 | 说明                                |
6925| --------------------- | ------------------------------------------------------ | --- |----------------------------------- |
6926| ca                    | string \| Array\<string\> | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书<sup>12+</sup>。 |
6927| cert                  | string                                                  | 否 | 本地客户端的数字证书。                 |
6928| key                   | string                                                  | 否 | 本地数字证书的私钥。                   |
6929| password                | string                                                  | 否 | 读取私钥的密码。                      |
6930| protocols             | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。                  |
6931| useRemoteCipherPrefer | boolean                                                 | 否 | 优先使用对等方的密码套件。        |
6932| signatureAlgorithms   | string                                                 | 否 | 通信过程中的签名算法,默认为"" 。              |
6933| cipherSuite           | string                                                 | 否 | 通信过程中的加密套件,默认为"" 。              |
6934
6935## Protocol<sup>9+</sup>
6936
6937TLS通信的协议版本。
6938
6939**系统能力**:SystemCapability.Communication.NetStack
6940
6941| 名称      |    值    | 说明                |
6942| --------- | --------- |------------------ |
6943| TLSv12    | "TLSv1.2" | 使用TLSv1.2协议通信。 |
6944| TLSv13    | "TLSv1.3" | 使用TLSv1.3协议通信。 |
6945
6946## X509CertRawData<sup>9+</sup>
6947
6948存储证书的数据。
6949
6950**系统能力**:SystemCapability.Communication.NetStack
6951
6952## socket.constructTLSSocketServerInstance<sup>10+</sup>
6953
6954constructTLSSocketServerInstance(): TLSSocketServer
6955
6956创建并返回一个TLSSocketServer对象。
6957
6958**系统能力**:SystemCapability.Communication.NetStack
6959
6960**返回值:**
6961
6962| 类型                                  | 说明                          |
6963|  ------------------------------------ |  ---------------------------- |
6964| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 |
6965
6966**示例:**
6967
6968```ts
6969import { socket } from '@kit.NetworkKit';
6970import { BusinessError } from '@kit.BasicServicesKit';
6971
6972let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
6973```
6974
6975## TLSSocketServer<sup>10+</sup>
6976
6977TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。
6978
6979### listen<sup>10+</sup>
6980
6981listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
6982
6983绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。
6984
6985**需要权限**:ohos.permission.INTERNET
6986
6987**系统能力**:SystemCapability.Communication.NetStack
6988
6989**参数:**
6990
6991| 参数名   | 类型                                     | 必填 | 说明                                             |
6992| -------- | ---------------------------------------- | ---- | ------------------------------------------------ |
6993| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocketServer连接所需要的参数。                |
6994| callback | AsyncCallback\<void\>                     | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
6995
6996**错误码:**
6997
6998| 错误码ID | 错误信息                                    |
6999| -------- | ------------------------------------------- |
7000| 401      | Parameter error.                            |
7001| 201      | Permission denied.                          |
7002| 2300002  | System internal error.                      |
7003| 2303109  | Bad file number.                            |
7004| 2303111  | Resource temporarily unavailable. Try again.|
7005| 2303198  | Address already in use.                     |
7006| 2303199  | Cannot assign requested address.            |
7007| 2303501  | SSL is null.                                |
7008| 2303502  | An error occurred when reading data on the TLS socket.|
7009| 2303503  | An error occurred when writing data on the TLS socket.|
7010| 2303505  | An error occurred in the TLS system call.   |
7011| 2303506  | Failed to close the TLS connection.         |
7012
7013**示例:**
7014
7015```ts
7016import { socket } from '@kit.NetworkKit';
7017import { BusinessError } from '@kit.BasicServicesKit';
7018
7019let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7020let netAddress: socket.NetAddress = {
7021  address: '192.168.xx.xxx',
7022  port: 8080
7023}
7024let tlsSecureOptions: socket.TLSSecureOptions = {
7025  key: "xxxx",
7026  cert: "xxxx",
7027  ca: ["xxxx"],
7028  password: "xxxx",
7029  protocols: socket.Protocol.TLSv12,
7030  useRemoteCipherPrefer: true,
7031  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7032  cipherSuite: "AES256-SHA256"
7033}
7034let tlsConnectOptions: socket.TLSConnectOptions = {
7035  address: netAddress,
7036  secureOptions: tlsSecureOptions,
7037  ALPNProtocols: ["spdy/1", "http/1.1"],
7038  skipRemoteValidation: false
7039}
7040tlsServer.listen(tlsConnectOptions, (err: BusinessError) => {
7041  console.log("listen callback error" + err);
7042});
7043```
7044
7045### listen<sup>10+</sup>
7046
7047listen(options: TLSConnectOptions): Promise\<void\>
7048
7049绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。
7050
7051**需要权限**:ohos.permission.INTERNET
7052
7053**系统能力**:SystemCapability.Communication.NetStack
7054
7055**参数:**
7056
7057| 参数名  | 类型                                     | 必填 | 说明               |
7058| ------- | ---------------------------------------- | ---- | ------------------ |
7059| options | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。 |
7060
7061**返回值:**
7062
7063| 类型            | 说明                                                      |
7064| --------------- | --------------------------------------------------------- |
7065| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
7066
7067**错误码:**
7068
7069| 错误码ID | 错误信息                                    |
7070| -------- | ------------------------------------------- |
7071| 401      | Parameter error.                            |
7072| 201      | Permission denied.                          |
7073| 2300002  | System internal error.                      |
7074| 2303109  | Bad file number.                            |
7075| 2303111  | Resource temporarily unavailable. Try again.|
7076| 2303198  | Address already in use.                     |
7077| 2303199  | Cannot assign requested address.            |
7078| 2303501  | SSL is null.                                |
7079| 2303502  | An error occurred when reading data on the TLS socket.|
7080| 2303503  | An error occurred when writing data on the TLS socket.|
7081| 2303505  | An error occurred in the TLS system call.   |
7082| 2303506  | Failed to close the TLS connection.         |
7083
7084**示例:**
7085
7086```ts
7087import { socket } from '@kit.NetworkKit';
7088import { BusinessError } from '@kit.BasicServicesKit';
7089
7090let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7091let netAddress: socket.NetAddress = {
7092  address: '192.168.xx.xxx',
7093  port: 8080
7094}
7095let tlsSecureOptions: socket.TLSSecureOptions = {
7096  key: "xxxx",
7097  cert: "xxxx",
7098  ca: ["xxxx"],
7099  password: "xxxx",
7100  protocols: socket.Protocol.TLSv12,
7101  useRemoteCipherPrefer: true,
7102  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7103  cipherSuite: "AES256-SHA256"
7104}
7105let tlsConnectOptions: socket.TLSConnectOptions = {
7106  address: netAddress,
7107  secureOptions: tlsSecureOptions,
7108  ALPNProtocols: ["spdy/1", "http/1.1"],
7109  skipRemoteValidation: false
7110}
7111tlsServer.listen(tlsConnectOptions).then(() => {
7112  console.log("listen callback success");
7113}).catch((err: BusinessError) => {
7114  console.log("failed: " + JSON.stringify(err));
7115});
7116```
7117
7118### getState<sup>10+</sup>
7119
7120getState(callback: AsyncCallback\<SocketStateBase\>): void
7121
7122在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。
7123
7124> **说明:**
7125> listen方法调用成功后,才可调用此方法。
7126
7127**系统能力**:SystemCapability.Communication.NetStack
7128
7129**参数:**
7130
7131| 参数名   | 类型                                                 | 必填 | 说明                                                         |
7132| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
7133| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 |
7134
7135**错误码:**
7136
7137| 错误码ID | 错误信息                        |
7138| -------- | ------------------------------- |
7139| 401      | Parameter error.                |
7140| 2303188  | Socket operation on non-socket. |
7141| 2300002  | System internal error.          |
7142
7143**示例:**
7144
7145```ts
7146import { socket } from '@kit.NetworkKit';
7147import { BusinessError } from '@kit.BasicServicesKit';
7148
7149let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7150let netAddress: socket.NetAddress = {
7151  address: '192.168.xx.xxx',
7152  port: 8080
7153}
7154let tlsSecureOptions: socket.TLSSecureOptions = {
7155  key: "xxxx",
7156  cert: "xxxx",
7157  ca: ["xxxx"],
7158  password: "xxxx",
7159  protocols: socket.Protocol.TLSv12,
7160  useRemoteCipherPrefer: true,
7161  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7162  cipherSuite: "AES256-SHA256"
7163}
7164let tlsConnectOptions: socket.TLSConnectOptions = {
7165  address: netAddress,
7166  secureOptions: tlsSecureOptions,
7167  ALPNProtocols: ["spdy/1", "http/1.1"]
7168}
7169tlsServer.listen(tlsConnectOptions).then(() => {
7170  console.log("listen callback success");
7171}).catch((err: BusinessError) => {
7172  console.log("failed: " + JSON.stringify(err));
7173});
7174tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
7175  if (err) {
7176    console.log('getState fail');
7177    return;
7178  }
7179  console.log('getState success:' + JSON.stringify(data));
7180});
7181```
7182
7183### getState<sup>10+</sup>
7184
7185getState(): Promise\<SocketStateBase\>
7186
7187在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。
7188
7189> **说明:**
7190> listen方法调用成功后,才可调用此方法。
7191
7192**系统能力**:SystemCapability.Communication.NetStack
7193
7194**返回值:**
7195
7196| 类型                                           | 说明                                                         |
7197|  --------------------------------------------- |  ----------------------------------------------------------- |
7198| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 |
7199
7200**错误码:**
7201
7202| 错误码ID | 错误信息                        |
7203| -------- | ------------------------------- |
7204| 2303188  | Socket operation on non-socket. |
7205| 2300002  | System internal error.          |
7206
7207**示例:**
7208
7209```ts
7210import { socket } from '@kit.NetworkKit';
7211import { BusinessError } from '@kit.BasicServicesKit';
7212
7213let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7214let netAddress: socket.NetAddress = {
7215  address: '192.168.xx.xxx',
7216  port: 8080
7217}
7218let tlsSecureOptions: socket.TLSSecureOptions = {
7219  key: "xxxx",
7220  cert: "xxxx",
7221  ca: ["xxxx"],
7222  password: "xxxx",
7223  protocols: socket.Protocol.TLSv12,
7224  useRemoteCipherPrefer: true,
7225  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7226  cipherSuite: "AES256-SHA256"
7227}
7228let tlsConnectOptions: socket.TLSConnectOptions = {
7229  address: netAddress,
7230  secureOptions: tlsSecureOptions,
7231  ALPNProtocols: ["spdy/1", "http/1.1"]
7232}
7233tlsServer.listen(tlsConnectOptions).then(() => {
7234  console.log("listen callback success");
7235}).catch((err: BusinessError) => {
7236  console.log("failed: " + JSON.stringify(err));
7237});
7238tlsServer.getState().then(() => {
7239  console.log('getState success');
7240}).catch((err: BusinessError) => {
7241  console.log('getState fail');
7242});
7243```
7244
7245### setExtraOptions<sup>10+</sup>
7246
7247setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
7248
7249在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。
7250
7251> **说明:**
7252> listen方法调用成功后,才可调用此方法。
7253
7254**系统能力**:SystemCapability.Communication.NetStack
7255
7256**参数:**
7257
7258| 参数名   | 类型                                 | 必填 | 说明                                             |
7259| -------- | ------------------------------------ | ---- | ------------------------------------------------ |
7260| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。                  |
7261| callback | AsyncCallback\<void\>                | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。 |
7262
7263**错误码:**
7264
7265| 错误码ID | 错误信息                        |
7266| -------- | ------------------------------- |
7267| 401      | Parameter error.                |
7268| 2303188  | Socket operation on non-socket. |
7269| 2300002  | System internal error.          |
7270
7271**示例:**
7272
7273```ts
7274import { socket } from '@kit.NetworkKit';
7275import { BusinessError } from '@kit.BasicServicesKit';
7276
7277let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7278let netAddress: socket.NetAddress = {
7279  address: '192.168.xx.xxx',
7280  port: 8080
7281}
7282let tlsSecureOptions: socket.TLSSecureOptions = {
7283  key: "xxxx",
7284  cert: "xxxx",
7285  ca: ["xxxx"],
7286  password: "xxxx",
7287  protocols: socket.Protocol.TLSv12,
7288  useRemoteCipherPrefer: true,
7289  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7290  cipherSuite: "AES256-SHA256"
7291}
7292let tlsConnectOptions: socket.TLSConnectOptions = {
7293  address: netAddress,
7294  secureOptions: tlsSecureOptions,
7295  ALPNProtocols: ["spdy/1", "http/1.1"]
7296}
7297tlsServer.listen(tlsConnectOptions).then(() => {
7298  console.log("listen callback success");
7299}).catch((err: BusinessError) => {
7300  console.log("failed: " + JSON.stringify(err));
7301});
7302
7303interface SocketLinger {
7304  on: boolean;
7305  linger: number;
7306}
7307
7308let tcpExtraOptions: socket.TCPExtraOptions = {
7309  keepAlive: true,
7310  OOBInline: true,
7311  TCPNoDelay: true,
7312  socketLinger: { on: true, linger: 10 } as SocketLinger,
7313  receiveBufferSize: 1000,
7314  sendBufferSize: 1000,
7315  reuseAddress: true,
7316  socketTimeout: 3000
7317}
7318tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
7319  if (err) {
7320    console.log('setExtraOptions fail');
7321    return;
7322  }
7323  console.log('setExtraOptions success');
7324});
7325```
7326
7327### setExtraOptions<sup>10+</sup>
7328
7329setExtraOptions(options: TCPExtraOptions): Promise\<void\>
7330
7331在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。
7332
7333> **说明:**
7334> listen方法调用成功后,才可调用此方法。
7335
7336**系统能力**:SystemCapability.Communication.NetStack
7337
7338**参数:**
7339
7340| 参数名  | 类型                                 | 必填 | 说明                            |
7341| ------- | ------------------------------------ | ---- | ------------------------------- |
7342| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。 |
7343
7344**返回值:**
7345
7346| 类型            | 说明                                                      |
7347|  -------------- |  -------------------------------------------------------- |
7348| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
7349
7350**错误码:**
7351
7352| 错误码ID | 错误信息                        |
7353| -------- | ------------------------------- |
7354| 401      | Parameter error.                |
7355| 2303188  | Socket operation on non-socket. |
7356| 2300002  | System internal error.          |
7357
7358**示例:**
7359
7360```ts
7361import { socket } from '@kit.NetworkKit';
7362import { BusinessError } from '@kit.BasicServicesKit';
7363
7364let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7365let netAddress: socket.NetAddress = {
7366  address: '192.168.xx.xxx',
7367  port: 8080
7368}
7369let tlsSecureOptions: socket.TLSSecureOptions = {
7370  key: "xxxx",
7371  cert: "xxxx",
7372  ca: ["xxxx"],
7373  password: "xxxx",
7374  protocols: socket.Protocol.TLSv12,
7375  useRemoteCipherPrefer: true,
7376  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7377  cipherSuite: "AES256-SHA256"
7378}
7379let tlsConnectOptions: socket.TLSConnectOptions = {
7380  address: netAddress,
7381  secureOptions: tlsSecureOptions,
7382  ALPNProtocols: ["spdy/1", "http/1.1"]
7383}
7384tlsServer.listen(tlsConnectOptions).then(() => {
7385  console.log("listen callback success");
7386}).catch((err: BusinessError) => {
7387  console.log("failed: " + JSON.stringify(err));
7388});
7389
7390interface SocketLinger {
7391  on: boolean;
7392  linger: number;
7393}
7394
7395let tcpExtraOptions: socket.TCPExtraOptions = {
7396  keepAlive: true,
7397  OOBInline: true,
7398  TCPNoDelay: true,
7399  socketLinger: { on: true, linger: 10 } as SocketLinger,
7400  receiveBufferSize: 1000,
7401  sendBufferSize: 1000,
7402  reuseAddress: true,
7403  socketTimeout: 3000
7404}
7405tlsServer.setExtraOptions(tcpExtraOptions).then(() => {
7406  console.log('setExtraOptions success');
7407}).catch((err: BusinessError) => {
7408  console.log('setExtraOptions fail');
7409});
7410```
7411
7412### getCertificate<sup>10+</sup>
7413
7414getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
7415
7416在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。
7417
7418> **说明:**
7419> listen方法调用成功后,才可调用此方法。
7420
7421**系统能力**:SystemCapability.Communication.NetStack
7422
7423**参数:**
7424
7425| 参数名   | 类型                                                  | 必填 | 说明                                                     |
7426| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- |
7427| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 |
7428
7429**错误码:**
7430
7431| 错误码ID | 错误信息               |
7432| -------- | ---------------------- |
7433| 401      | Parameter error.       |
7434| 2303501  | SSL is null.           |
7435| 2303504  | An error occurred when verifying the X.509 certificate. |
7436| 2300002  | System internal error. |
7437
7438**示例:**
7439
7440```ts
7441import { socket } from '@kit.NetworkKit';
7442import { BusinessError } from '@kit.BasicServicesKit';
7443import { util } from '@kit.ArkTS';
7444
7445let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7446let netAddress: socket.NetAddress = {
7447  address: '192.168.xx.xxx',
7448  port: 8080
7449}
7450let tlsSecureOptions: socket.TLSSecureOptions = {
7451  key: "xxxx",
7452  cert: "xxxx",
7453  ca: ["xxxx"],
7454  password: "xxxx",
7455  protocols: socket.Protocol.TLSv12,
7456  useRemoteCipherPrefer: true,
7457  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7458  cipherSuite: "AES256-SHA256"
7459}
7460let tlsConnectOptions: socket.TLSConnectOptions = {
7461  address: netAddress,
7462  secureOptions: tlsSecureOptions,
7463  ALPNProtocols: ["spdy/1", "http/1.1"]
7464}
7465tlsServer.listen(tlsConnectOptions).then(() => {
7466  console.log("listen callback success");
7467}).catch((err: BusinessError) => {
7468  console.log("failed: " + JSON.stringify(err));
7469});
7470tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
7471  if (err) {
7472    console.log("getCertificate callback error = " + err);
7473  } else {
7474    const decoder = util.TextDecoder.create();
7475    const str = decoder.decodeWithStream(data.data);
7476    console.log("getCertificate callback: " + str);
7477  }
7478});
7479```
7480
7481### getCertificate<sup>10+</sup>
7482
7483getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
7484
7485在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。
7486
7487> **说明:**
7488> listen方法调用成功后,才可调用此方法。
7489
7490**系统能力**:SystemCapability.Communication.NetStack
7491
7492**返回值:**
7493
7494| 类型                                            | 说明                                                         |
7495| ----------------------------------------------- | ------------------------------------------------------------ |
7496| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
7497
7498**错误码:**
7499
7500| 错误码ID | 错误信息               |
7501| -------- | ---------------------- |
7502| 2303501  | SSL is null.           |
7503| 2303504  | An error occurred when verifying the X.509 certificate. |
7504| 2300002  | System internal error. |
7505
7506**示例:**
7507
7508```ts
7509import { socket } from '@kit.NetworkKit';
7510import { BusinessError } from '@kit.BasicServicesKit';
7511import { util } from '@kit.ArkTS';
7512
7513let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7514let netAddress: socket.NetAddress = {
7515  address: '192.168.xx.xxx',
7516  port: 8080
7517}
7518let tlsSecureOptions: socket.TLSSecureOptions = {
7519  key: "xxxx",
7520  cert: "xxxx",
7521  ca: ["xxxx"],
7522  password: "xxxx",
7523  protocols: socket.Protocol.TLSv12,
7524  useRemoteCipherPrefer: true,
7525  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7526  cipherSuite: "AES256-SHA256"
7527}
7528let tlsConnectOptions: socket.TLSConnectOptions = {
7529  address: netAddress,
7530  secureOptions: tlsSecureOptions,
7531  ALPNProtocols: ["spdy/1", "http/1.1"]
7532}
7533tlsServer.listen(tlsConnectOptions).then(() => {
7534  console.log("listen callback success");
7535}).catch((err: BusinessError) => {
7536  console.log("failed: " + JSON.stringify(err));
7537});
7538tlsServer.getCertificate().then((data: socket.X509CertRawData) => {
7539  const decoder = util.TextDecoder.create();
7540  const str = decoder.decodeWithStream(data.data);
7541  console.log("getCertificate: " + str);
7542}).catch((err: BusinessError) => {
7543  console.error("failed" + err);
7544});
7545```
7546
7547### getProtocol<sup>10+</sup>
7548
7549getProtocol(callback: AsyncCallback\<string\>): void
7550
7551在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
7552
7553> **说明:**
7554> listen方法调用成功后,才可调用此方法。
7555
7556**系统能力**:SystemCapability.Communication.NetStack
7557
7558**参数:**
7559
7560| 参数名   | 类型                    | 必填 | 说明                                                 |
7561| -------- | ----------------------- | ---- | ---------------------------------------------------- |
7562| callback | AsyncCallback\<string\> | 是   | 回调函数,返回通信的协议。失败返回错误码、错误信息。 |
7563
7564**错误码:**
7565
7566| 错误码ID | 错误信息                               |
7567| -------- | -------------------------------------- |
7568| 401      | Parameter error.                       |
7569| 2303501  | SSL is null.                           |
7570| 2303505  | An error occurred in the TLS system call. |
7571| 2300002  | System internal error.                 |
7572
7573**示例:**
7574
7575```ts
7576import { socket } from '@kit.NetworkKit';
7577import { BusinessError } from '@kit.BasicServicesKit';
7578
7579let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7580let netAddress: socket.NetAddress = {
7581  address: '192.168.xx.xxx',
7582  port: 8080
7583}
7584let tlsSecureOptions: socket.TLSSecureOptions = {
7585  key: "xxxx",
7586  cert: "xxxx",
7587  ca: ["xxxx"],
7588  password: "xxxx",
7589  protocols: socket.Protocol.TLSv12,
7590  useRemoteCipherPrefer: true,
7591  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7592  cipherSuite: "AES256-SHA256"
7593}
7594let tlsConnectOptions: socket.TLSConnectOptions = {
7595  address: netAddress,
7596  secureOptions: tlsSecureOptions,
7597  ALPNProtocols: ["spdy/1", "http/1.1"]
7598}
7599tlsServer.listen(tlsConnectOptions).then(() => {
7600  console.log("listen callback success");
7601}).catch((err: BusinessError) => {
7602  console.log("failed: " + JSON.stringify(err));
7603});
7604tlsServer.getProtocol((err: BusinessError, data: string) => {
7605  if (err) {
7606    console.log("getProtocol callback error = " + err);
7607  } else {
7608    console.log("getProtocol callback = " + data);
7609  }
7610});
7611```
7612
7613### getProtocol<sup>10+</sup>
7614
7615getProtocol():Promise\<string\>
7616
7617在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
7618
7619> **说明:**
7620> listen方法调用成功后,才可调用此方法。
7621
7622**系统能力**:SystemCapability.Communication.NetStack
7623
7624**返回值:**
7625
7626| 类型              | 说明                                                    |
7627| ----------------- | ------------------------------------------------------- |
7628| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
7629
7630**错误码:**
7631
7632| 错误码ID | 错误信息                               |
7633| -------- | -------------------------------------- |
7634| 2303501  | SSL is null.                           |
7635| 2303505  | An error occurred in the TLS system call. |
7636| 2300002  | System internal error.                 |
7637
7638**示例:**
7639
7640```ts
7641import { socket } from '@kit.NetworkKit';
7642import { BusinessError } from '@kit.BasicServicesKit';
7643
7644let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7645let netAddress: socket.NetAddress = {
7646  address: '192.168.xx.xxx',
7647  port: 8080
7648}
7649let tlsSecureOptions: socket.TLSSecureOptions = {
7650  key: "xxxx",
7651  cert: "xxxx",
7652  ca: ["xxxx"],
7653  password: "xxxx",
7654  protocols: socket.Protocol.TLSv12,
7655  useRemoteCipherPrefer: true,
7656  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7657  cipherSuite: "AES256-SHA256"
7658}
7659let tlsConnectOptions: socket.TLSConnectOptions = {
7660  address: netAddress,
7661  secureOptions: tlsSecureOptions,
7662  ALPNProtocols: ["spdy/1", "http/1.1"]
7663}
7664tlsServer.listen(tlsConnectOptions).then(() => {
7665  console.log("listen callback success");
7666}).catch((err: BusinessError) => {
7667  console.log("failed: " + JSON.stringify(err));
7668});
7669tlsServer.getProtocol().then((data: string) => {
7670  console.log(data);
7671}).catch((err: BusinessError) => {
7672  console.error("failed" + err);
7673});
7674```
7675
7676### getLocalAddress<sup>12+</sup>
7677
7678getLocalAddress(): Promise\<NetAddress\>
7679
7680获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。
7681
7682> **说明:**
7683> 在TLSSocketServer通信连接成功之后,才可调用此方法。
7684
7685**系统能力**:SystemCapability.Communication.NetStack
7686
7687**返回值:**
7688
7689| 类型            | 说明                                                 |
7690|  -------------- |  --------------------------------------------------- |
7691| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
7692
7693**错误码:**
7694
7695| 错误码ID | 错误信息                                    |
7696| -------- | ------------------------------------------- |
7697| 2300002  | System internal error.                      |
7698| 2301009  | Bad file descriptor.                            |
7699| 2303188  | Socket operation on non-socket. |
7700
7701**示例:**
7702
7703```ts
7704import { socket } from '@kit.NetworkKit';
7705import { BusinessError } from '@kit.BasicServicesKit';
7706
7707let tlsServer: socket.TLSSocket = socket.constructTLSSocketServerInstance();
7708tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
7709  console.info("Get success: " + JSON.stringify(localAddress));
7710}).catch((err: BusinessError) => {
7711  console.error("Get failed, error: " + JSON.stringify(err));
7712})
7713```
7714
7715### on('connect')<sup>10+</sup>
7716
7717on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void
7718
7719订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
7720
7721> **说明:**
7722> listen方法调用成功后,才可调用此方法。
7723
7724**系统能力**:SystemCapability.Communication.NetStack
7725
7726**参数:**
7727
7728| 参数名   | 类型                                                    | 必填 | 说明                                  |
7729| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
7730| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
7731| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是   | 回调函数。失败时返回错误码、错误信息。    |
7732
7733**错误码:**
7734
7735| 错误码ID | 错误信息         |
7736| -------- | ---------------- |
7737| 401      | Parameter error. |
7738
7739**示例:**
7740
7741```ts
7742import { socket } from '@kit.NetworkKit';
7743import { BusinessError } from '@kit.BasicServicesKit';
7744
7745let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7746let netAddress: socket.NetAddress = {
7747  address: '192.168.xx.xxx',
7748  port: 8080
7749}
7750let tlsSecureOptions: socket.TLSSecureOptions = {
7751  key: "xxxx",
7752  cert: "xxxx",
7753  ca: ["xxxx"],
7754  password: "xxxx",
7755  protocols: socket.Protocol.TLSv12,
7756  useRemoteCipherPrefer: true,
7757  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7758  cipherSuite: "AES256-SHA256"
7759}
7760let tlsConnectOptions: socket.TLSConnectOptions = {
7761  address: netAddress,
7762  secureOptions: tlsSecureOptions,
7763  ALPNProtocols: ["spdy/1", "http/1.1"]
7764}
7765tlsServer.listen(tlsConnectOptions).then(() => {
7766  console.log("listen callback success");
7767}).catch((err: BusinessError) => {
7768  console.log("failed: " + JSON.stringify(err));
7769});
7770tlsServer.on('connect', (data: socket.TLSSocketConnection) => {
7771  console.log(JSON.stringify(data))
7772});
7773```
7774
7775### off('connect')<sup>10+</sup>
7776
7777off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void
7778
7779取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
7780
7781> **说明:**
7782> listen方法调用成功后,才可调用此方法。
7783> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7784
7785**系统能力**:SystemCapability.Communication.NetStack
7786
7787**参数:**
7788
7789| 参数名   | 类型                                                    | 必填 | 说明                                  |
7790| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
7791| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
7792| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否   | 回调函数。失败时返回错误码、错误信息。      |
7793
7794**错误码:**
7795
7796| 错误码ID | 错误信息         |
7797| -------- | ---------------- |
7798| 401      | Parameter error. |
7799
7800**示例:**
7801
7802```ts
7803import { socket } from '@kit.NetworkKit';
7804import { BusinessError } from '@kit.BasicServicesKit';
7805
7806let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7807let netAddress: socket.NetAddress = {
7808  address: '192.168.xx.xxx',
7809  port: 8080
7810}
7811let tlsSecureOptions: socket.TLSSecureOptions = {
7812  key: "xxxx",
7813  cert: "xxxx",
7814  ca: ["xxxx"],
7815  password: "xxxx",
7816  protocols: socket.Protocol.TLSv12,
7817  useRemoteCipherPrefer: true,
7818  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7819  cipherSuite: "AES256-SHA256"
7820}
7821let tlsConnectOptions: socket.TLSConnectOptions = {
7822  address: netAddress,
7823  secureOptions: tlsSecureOptions,
7824  ALPNProtocols: ["spdy/1", "http/1.1"]
7825}
7826tlsServer.listen(tlsConnectOptions).then(() => {
7827  console.log("listen callback success");
7828}).catch((err: BusinessError) => {
7829  console.log("failed: " + JSON.stringify(err));
7830});
7831
7832let callback = (data: socket.TLSSocketConnection) => {
7833  console.log('on connect message: ' + JSON.stringify(data));
7834}
7835tlsServer.on('connect', callback);
7836// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7837tlsServer.off('connect', callback);
7838tlsServer.off('connect');
7839```
7840
7841### on('error')<sup>10+</sup>
7842
7843on(type: 'error', callback: ErrorCallback): void
7844
7845订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
7846
7847> **说明:**
7848> listen方法调用成功后,才可调用此方法。
7849
7850**系统能力**:SystemCapability.Communication.NetStack
7851
7852**参数:**
7853
7854| 参数名   | 类型          | 必填 | 说明                                 |
7855| -------- | ------------- | ---- | ------------------------------------ |
7856| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
7857| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。     |
7858
7859**错误码:**
7860
7861| 错误码ID | 错误信息         |
7862| -------- | ---------------- |
7863| 401      | Parameter error. |
7864
7865**示例:**
7866
7867```ts
7868import { socket } from '@kit.NetworkKit';
7869import { BusinessError } from '@kit.BasicServicesKit';
7870
7871let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7872let netAddress: socket.NetAddress = {
7873  address: '192.168.xx.xxx',
7874  port: 8080
7875}
7876let tlsSecureOptions: socket.TLSSecureOptions = {
7877  key: "xxxx",
7878  cert: "xxxx",
7879  ca: ["xxxx"],
7880  password: "xxxx",
7881  protocols: socket.Protocol.TLSv12,
7882  useRemoteCipherPrefer: true,
7883  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7884  cipherSuite: "AES256-SHA256"
7885}
7886let tlsConnectOptions: socket.TLSConnectOptions = {
7887  address: netAddress,
7888  secureOptions: tlsSecureOptions,
7889  ALPNProtocols: ["spdy/1", "http/1.1"]
7890}
7891tlsServer.listen(tlsConnectOptions).then(() => {
7892  console.log("listen callback success");
7893}).catch((err: BusinessError) => {
7894  console.log("failed: " + JSON.stringify(err));
7895});
7896tlsServer.on('error', (err: BusinessError) => {
7897  console.log("on error, err:" + JSON.stringify(err))
7898});
7899```
7900
7901### off('error')<sup>10+</sup>
7902
7903off(type: 'error', callback?: ErrorCallback): void
7904
7905取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
7906
7907> **说明:**
7908> listen方法调用成功后,才可调用此方法。
7909> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7910
7911**系统能力**:SystemCapability.Communication.NetStack
7912
7913**参数:**
7914
7915| 参数名   | 类型          | 必填 | 说明                                 |
7916| -------- | ------------- | ---- | ------------------------------------ |
7917| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
7918| callback | ErrorCallback | 否   | 回调函数。失败时返回错误码、错误信息。     |
7919
7920**错误码:**
7921
7922| 错误码ID | 错误信息         |
7923| -------- | ---------------- |
7924| 401      | Parameter error. |
7925
7926**示例:**
7927
7928```ts
7929import { socket } from '@kit.NetworkKit';
7930import { BusinessError } from '@kit.BasicServicesKit';
7931
7932let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7933let netAddress: socket.NetAddress = {
7934  address: '192.168.xx.xxx',
7935  port: 8080
7936}
7937let tlsSecureOptions: socket.TLSSecureOptions = {
7938  key: "xxxx",
7939  cert: "xxxx",
7940  ca: ["xxxx"],
7941  password: "xxxx",
7942  protocols: socket.Protocol.TLSv12,
7943  useRemoteCipherPrefer: true,
7944  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7945  cipherSuite: "AES256-SHA256"
7946}
7947let tlsConnectOptions: socket.TLSConnectOptions = {
7948  address: netAddress,
7949  secureOptions: tlsSecureOptions,
7950  ALPNProtocols: ["spdy/1", "http/1.1"]
7951}
7952tlsServer.listen(tlsConnectOptions).then(() => {
7953  console.log("listen callback success");
7954}).catch((err: BusinessError) => {
7955  console.log("failed: " + JSON.stringify(err));
7956});
7957
7958let callback = (err: BusinessError) => {
7959  console.log("on error, err:" + JSON.stringify(err));
7960}
7961tlsServer.on('error', callback);
7962// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
7963tlsServer.off('error', callback);
7964tlsServer.off('error');
7965```
7966
7967## TLSSocketConnection<sup>10+</sup>
7968
7969TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。
7970
7971> **说明:**
7972> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。
7973
7974**系统能力**:SystemCapability.Communication.NetStack
7975
7976### 属性
7977
7978| 名称     | 类型   | 必填 | 说明                                  |
7979| -------- | ------ | ---- | ------------------------------------- |
7980| clientId | number | 是   | 客户端与TLSSocketServer建立连接的id。 |
7981
7982### send<sup>10+</sup>
7983
7984send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void
7985
7986在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。
7987
7988**系统能力**:SystemCapability.Communication.NetStack
7989
7990**参数:**
7991
7992| 参数名   | 类型                  | 必填 | 说明                                             |
7993| -------- | --------------------- | ---- | ------------------------------------------------ |
7994| data     | string \| ArrayBuffer                | 是   | TLSSocketServer发送数据所需要的参数。            |
7995| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
7996
7997**错误码:**
7998
7999| 错误码ID | 错误信息                               |
8000| -------- | -------------------------------------- |
8001| 401      | Parameter error.                       |
8002| 2303501  | SSL is null.                           |
8003| 2303503  | An error occurred when writing data on the TLS socket.|
8004| 2303505  | An error occurred in the TLS system call.|
8005| 2303506  | Failed to close the TLS connection.    |
8006| 2300002  | System internal error.                 |
8007
8008**示例:**
8009
8010```ts
8011import { socket } from '@kit.NetworkKit';
8012import { BusinessError } from '@kit.BasicServicesKit';
8013
8014let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8015let netAddress: socket.NetAddress = {
8016  address: '192.168.xx.xxx',
8017  port: 8080
8018}
8019let tlsSecureOptions: socket.TLSSecureOptions = {
8020  key: "xxxx",
8021  cert: "xxxx",
8022  ca: ["xxxx"],
8023  password: "xxxx",
8024  protocols: socket.Protocol.TLSv12,
8025  useRemoteCipherPrefer: true,
8026  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8027  cipherSuite: "AES256-SHA256"
8028}
8029let tlsConnectOptions: socket.TLSConnectOptions = {
8030  address: netAddress,
8031  secureOptions: tlsSecureOptions,
8032  ALPNProtocols: ["spdy/1", "http/1.1"]
8033}
8034tlsServer.listen(tlsConnectOptions).then(() => {
8035  console.log("listen callback success");
8036}).catch((err: BusinessError) => {
8037  console.log("failed" + err);
8038});
8039
8040tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8041  client.send('Hello, client!', (err: BusinessError) => {
8042    if (err) {
8043      console.log('send fail');
8044      return;
8045    }
8046    console.log('send success');
8047  });
8048});
8049```
8050
8051### send<sup>10+</sup>
8052
8053send(data: string \| ArrayBuffer): Promise\<void\>
8054
8055在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
8056
8057**系统能力**:SystemCapability.Communication.NetStack
8058
8059**参数:**
8060
8061| 参数名 | 类型   | 必填 | 说明                                  |
8062| ------ | ------ | ---- | ------------------------------------- |
8063| data   | string \| ArrayBuffer | 是   | TLSSocketServer发送数据所需要的参数。 |
8064
8065**返回值:**
8066
8067| 类型            | 说明                                                      |
8068| --------------- | --------------------------------------------------------- |
8069| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
8070
8071**错误码:**
8072
8073| 错误码ID | 错误信息                               |
8074| -------- | -------------------------------------- |
8075| 401      | Parameter error.                       |
8076| 2303501  | SSL is null.                           |
8077| 2303503  | An error occurred when writing data on the TLS socket.|
8078| 2303505  | An error occurred in the TLS system call.|
8079| 2303506  | Failed to close the TLS connection.    |
8080| 2300002  | System internal error.                 |
8081
8082**示例:**
8083
8084```ts
8085import { socket } from '@kit.NetworkKit';
8086import { BusinessError } from '@kit.BasicServicesKit';
8087
8088let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8089let netAddress: socket.NetAddress = {
8090  address: '192.168.xx.xxx',
8091  port: 8080
8092}
8093let tlsSecureOptions: socket.TLSSecureOptions = {
8094  key: "xxxx",
8095  cert: "xxxx",
8096  ca: ["xxxx"],
8097  password: "xxxx",
8098  protocols: socket.Protocol.TLSv12,
8099  useRemoteCipherPrefer: true,
8100  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8101  cipherSuite: "AES256-SHA256"
8102}
8103let tlsConnectOptions: socket.TLSConnectOptions = {
8104  address: netAddress,
8105  secureOptions: tlsSecureOptions,
8106  ALPNProtocols: ["spdy/1", "http/1.1"]
8107}
8108tlsServer.listen(tlsConnectOptions).then(() => {
8109  console.log("listen callback success");
8110}).catch((err: BusinessError) => {
8111  console.log("failed" + err);
8112});
8113
8114tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8115  client.send('Hello, client!').then(() => {
8116    console.log('send success');
8117  }).catch((err: BusinessError) => {
8118    console.log('send fail');
8119  });
8120});
8121```
8122
8123### close<sup>10+</sup>
8124
8125close(callback: AsyncCallback\<void\>): void
8126
8127在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。
8128
8129**系统能力**:SystemCapability.Communication.NetStack
8130
8131**参数:**
8132
8133| 参数名   | 类型                  | 必填 | 说明                                             |
8134| -------- | --------------------- | ---- | ------------------------------------------------ |
8135| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
8136
8137**错误码:**
8138
8139| 错误码ID | 错误信息                               |
8140| -------- | -------------------------------------- |
8141| 401      | Parameter error.                       |
8142| 2303501  | SSL is null.                           |
8143| 2303505  | An error occurred in the TLS system call. |
8144| 2303506  | Failed to close the TLS connection.    |
8145| 2300002  | System internal error.                 |
8146
8147**示例:**
8148
8149```ts
8150import { socket } from '@kit.NetworkKit';
8151import { BusinessError } from '@kit.BasicServicesKit';
8152
8153let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8154let netAddress: socket.NetAddress = {
8155  address: '192.168.xx.xxx',
8156  port: 8080
8157}
8158let tlsSecureOptions: socket.TLSSecureOptions = {
8159  key: "xxxx",
8160  cert: "xxxx",
8161  ca: ["xxxx"],
8162  password: "xxxx",
8163  protocols: socket.Protocol.TLSv12,
8164  useRemoteCipherPrefer: true,
8165  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8166  cipherSuite: "AES256-SHA256"
8167}
8168let tlsConnectOptions: socket.TLSConnectOptions = {
8169  address: netAddress,
8170  secureOptions: tlsSecureOptions,
8171  ALPNProtocols: ["spdy/1", "http/1.1"]
8172}
8173tlsServer.listen(tlsConnectOptions).then(() => {
8174  console.log("listen callback success");
8175}).catch((err: BusinessError) => {
8176  console.log("failed" + err);
8177});
8178
8179tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8180  client.close((err: BusinessError) => {
8181    if (err) {
8182      console.log('close fail');
8183      return;
8184    }
8185    console.log('close success');
8186  });
8187});
8188```
8189
8190### close<sup>10+</sup>
8191
8192close(): Promise\<void\>
8193
8194在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。
8195
8196**系统能力**:SystemCapability.Communication.NetStack
8197
8198**返回值:**
8199
8200| 类型            | 说明                                                      |
8201| --------------- | --------------------------------------------------------- |
8202| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 |
8203
8204**错误码:**
8205
8206| 错误码ID | 错误信息                               |
8207| -------- | -------------------------------------- |
8208| 2303501  | SSL is null.                           |
8209| 2303505  | An error occurred in the TLS system call. |
8210| 2303506  | Failed to close the TLS connection.    |
8211| 2300002  | System internal error.                 |
8212
8213**示例:**
8214
8215```ts
8216import { socket } from '@kit.NetworkKit';
8217import { BusinessError } from '@kit.BasicServicesKit';
8218
8219let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8220let netAddress: socket.NetAddress = {
8221  address: '192.168.xx.xxx',
8222  port: 8080
8223}
8224let tlsSecureOptions: socket.TLSSecureOptions = {
8225  key: "xxxx",
8226  cert: "xxxx",
8227  ca: ["xxxx"],
8228  password: "xxxx",
8229  protocols: socket.Protocol.TLSv12,
8230  useRemoteCipherPrefer: true,
8231  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8232  cipherSuite: "AES256-SHA256"
8233}
8234let tlsConnectOptions: socket.TLSConnectOptions = {
8235  address: netAddress,
8236  secureOptions: tlsSecureOptions,
8237  ALPNProtocols: ["spdy/1", "http/1.1"]
8238}
8239tlsServer.listen(tlsConnectOptions).then(() => {
8240  console.log("listen callback success");
8241}).catch((err: BusinessError) => {
8242  console.log("failed" + err);
8243});
8244tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8245  client.close().then(() => {
8246    console.log('close success');
8247  }).catch((err: BusinessError) => {
8248    console.log('close fail');
8249  });
8250});
8251```
8252
8253### getRemoteAddress<sup>10+</sup>
8254
8255getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
8256
8257在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
8258
8259**系统能力**:SystemCapability.Communication.NetStack
8260
8261**参数:**
8262
8263| 参数名   | 类型                                        | 必填 | 说明                                                         |
8264| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ |
8265| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 |
8266
8267**错误码:**
8268
8269| 错误码ID | 错误信息                        |
8270| -------- | ------------------------------- |
8271| 401      | Parameter error.                |
8272| 2303188  | Socket operation on non-socket. |
8273| 2300002  | System internal error.          |
8274
8275**示例:**
8276
8277```ts
8278import { socket } from '@kit.NetworkKit';
8279import { BusinessError } from '@kit.BasicServicesKit';
8280
8281let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8282let netAddress: socket.NetAddress = {
8283  address: '192.168.xx.xxx',
8284  port: 8080
8285}
8286let tlsSecureOptions: socket.TLSSecureOptions = {
8287  key: "xxxx",
8288  cert: "xxxx",
8289  ca: ["xxxx"],
8290  password: "xxxx",
8291  protocols: socket.Protocol.TLSv12,
8292  useRemoteCipherPrefer: true,
8293  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8294  cipherSuite: "AES256-SHA256"
8295}
8296let tlsConnectOptions: socket.TLSConnectOptions = {
8297  address: netAddress,
8298  secureOptions: tlsSecureOptions,
8299  ALPNProtocols: ["spdy/1", "http/1.1"]
8300}
8301tlsServer.listen(tlsConnectOptions).then(() => {
8302  console.log("listen callback success");
8303}).catch((err: BusinessError) => {
8304  console.log("failed" + err);
8305});
8306tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8307  client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
8308    if (err) {
8309      console.log('getRemoteAddress fail');
8310      return;
8311    }
8312    console.log('getRemoteAddress success:' + JSON.stringify(data));
8313  });
8314});
8315```
8316
8317### getRemoteAddress<sup>10+</sup>
8318
8319getRemoteAddress(): Promise\<NetAddress\>
8320
8321在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
8322
8323**系统能力**:SystemCapability.Communication.NetStack
8324
8325**返回值:**
8326
8327| 类型                                 | 说明                                                         |
8328|  ----------------------------------- |  ----------------------------------------------------------- |
8329| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
8330
8331**错误码:**
8332
8333| 错误码ID | 错误信息                        |
8334| -------- | ------------------------------- |
8335| 2303188  | Socket operation on non-socket. |
8336| 2300002  | System internal error.          |
8337
8338**示例:**
8339
8340```ts
8341import { socket } from '@kit.NetworkKit';
8342import { BusinessError } from '@kit.BasicServicesKit';
8343
8344let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8345let netAddress: socket.NetAddress = {
8346  address: '192.168.xx.xxx',
8347  port: 8080
8348}
8349let tlsSecureOptions: socket.TLSSecureOptions = {
8350  key: "xxxx",
8351  cert: "xxxx",
8352  ca: ["xxxx"],
8353  password: "xxxx",
8354  protocols: socket.Protocol.TLSv12,
8355  useRemoteCipherPrefer: true,
8356  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8357  cipherSuite: "AES256-SHA256"
8358}
8359let tlsConnectOptions: socket.TLSConnectOptions = {
8360  address: netAddress,
8361  secureOptions: tlsSecureOptions,
8362  ALPNProtocols: ["spdy/1", "http/1.1"]
8363}
8364tlsServer.listen(tlsConnectOptions).then(() => {
8365  console.log("listen callback success");
8366}).catch((err: BusinessError) => {
8367  console.log("failed" + err);
8368});
8369tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8370  client.getRemoteAddress().then((data: socket.NetAddress) => {
8371    console.log('getRemoteAddress success:' + JSON.stringify(data));
8372  }).catch((err: BusinessError) => {
8373    console.error("failed" + err);
8374  });
8375});
8376```
8377
8378### getRemoteCertificate<sup>10+</sup>
8379
8380getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
8381
8382在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。
8383
8384**系统能力**:SystemCapability.Communication.NetStack
8385
8386**参数:**
8387
8388| 参数名   | 类型                                                  | 必填 | 说明                                                 |
8389| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- |
8390| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,返回对端的证书。失败返回错误码、错误信息。 |
8391
8392**错误码:**
8393
8394| 错误码ID | 错误信息               |
8395| -------- | ---------------------- |
8396| 401      | Parameter error.       |
8397| 2303501  | SSL is null.           |
8398| 2300002  | System internal error. |
8399
8400**示例:**
8401
8402```ts
8403import { socket } from '@kit.NetworkKit';
8404import { BusinessError } from '@kit.BasicServicesKit';
8405import { util } from '@kit.ArkTS';
8406
8407let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8408let netAddress: socket.NetAddress = {
8409  address: '192.168.xx.xxx',
8410  port: 8080
8411}
8412let tlsSecureOptions: socket.TLSSecureOptions = {
8413  key: "xxxx",
8414  cert: "xxxx",
8415  ca: ["xxxx"],
8416  password: "xxxx",
8417  protocols: socket.Protocol.TLSv12,
8418  useRemoteCipherPrefer: true,
8419  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8420  cipherSuite: "AES256-SHA256"
8421}
8422let tlsConnectOptions: socket.TLSConnectOptions = {
8423  address: netAddress,
8424  secureOptions: tlsSecureOptions,
8425  ALPNProtocols: ["spdy/1", "http/1.1"]
8426}
8427tlsServer.listen(tlsConnectOptions).then(() => {
8428  console.log("listen callback success");
8429}).catch((err: BusinessError) => {
8430  console.log("failed" + err);
8431});
8432tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8433  client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
8434    if (err) {
8435      console.log("getRemoteCertificate callback error: " + err);
8436    } else {
8437      const decoder = util.TextDecoder.create();
8438      const str = decoder.decodeWithStream(data.data);
8439      console.log("getRemoteCertificate callback: " + str);
8440    }
8441  });
8442});
8443```
8444
8445### getRemoteCertificate<sup>10+</sup>
8446
8447getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
8448
8449在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。
8450
8451**系统能力**:SystemCapability.Communication.NetStack
8452
8453**返回值:**
8454
8455| 类型                                            | 说明                                                         |
8456| ----------------------------------------------- | ------------------------------------------------------------ |
8457| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 |
8458
8459**错误码:**
8460
8461| 错误码ID | 错误信息               |
8462| -------- | ---------------------- |
8463| 2303501  | SSL is null.           |
8464| 2300002  | System internal error. |
8465
8466**示例:**
8467
8468```ts
8469import { socket } from '@kit.NetworkKit';
8470import { BusinessError } from '@kit.BasicServicesKit';
8471import { util } from '@kit.ArkTS';
8472
8473let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8474let netAddress: socket.NetAddress = {
8475  address: '192.168.xx.xxx',
8476  port: 8080
8477}
8478let tlsSecureOptions: socket.TLSSecureOptions = {
8479  key: "xxxx",
8480  cert: "xxxx",
8481  ca: ["xxxx"],
8482  password: "xxxx",
8483  protocols: socket.Protocol.TLSv12,
8484  useRemoteCipherPrefer: true,
8485  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8486  cipherSuite: "AES256-SHA256"
8487}
8488let tlsConnectOptions: socket.TLSConnectOptions = {
8489  address: netAddress,
8490  secureOptions: tlsSecureOptions,
8491  ALPNProtocols: ["spdy/1", "http/1.1"]
8492}
8493tlsServer.listen(tlsConnectOptions).then(() => {
8494  console.log("listen callback success");
8495}).catch((err: BusinessError) => {
8496  console.log("failed" + err);
8497});
8498tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8499  client.getRemoteCertificate().then((data: socket.X509CertRawData) => {
8500    const decoder = util.TextDecoder.create();
8501    const str = decoder.decodeWithStream(data.data);
8502    console.log("getRemoteCertificate success: " + str);
8503  }).catch((err: BusinessError) => {
8504    console.error("failed" + err);
8505  });
8506});
8507```
8508
8509### getCipherSuite<sup>10+</sup>
8510
8511getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
8512
8513在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
8514
8515**系统能力**:SystemCapability.Communication.NetStack
8516
8517**参数:**
8518
8519| 参数名   | 类型                             | 必填 | 说明                                                         |
8520| -------- | -------------------------------- | ---- | ------------------------------------------------------------ |
8521| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 |
8522
8523**错误码:**
8524
8525| 错误码ID | 错误信息                               |
8526| -------- | -------------------------------------- |
8527| 401      | Parameter error.                       |
8528| 2303501  | SSL is null.                           |
8529| 2303502  | An error occurred when reading data on the TLS socket.|
8530| 2303505  | An error occurred in the TLS system call.|
8531| 2300002  | System internal error.                 |
8532
8533**示例:**
8534
8535```ts
8536import { socket } from '@kit.NetworkKit';
8537import { BusinessError } from '@kit.BasicServicesKit';
8538
8539let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8540let netAddress: socket.NetAddress = {
8541  address: '192.168.xx.xxx',
8542  port: 8080
8543}
8544let tlsSecureOptions: socket.TLSSecureOptions = {
8545  key: "xxxx",
8546  cert: "xxxx",
8547  ca: ["xxxx"],
8548  password: "xxxx",
8549  protocols: socket.Protocol.TLSv12,
8550  useRemoteCipherPrefer: true,
8551  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8552  cipherSuite: "AES256-SHA256"
8553}
8554let tlsConnectOptions: socket.TLSConnectOptions = {
8555  address: netAddress,
8556  secureOptions: tlsSecureOptions,
8557  ALPNProtocols: ["spdy/1", "http/1.1"]
8558}
8559tlsServer.listen(tlsConnectOptions).then(() => {
8560  console.log("listen callback success");
8561}).catch((err: BusinessError) => {
8562  console.log("failed" + err);
8563});
8564tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8565  client.getCipherSuite((err: BusinessError, data: Array<string>) => {
8566    if (err) {
8567      console.log("getCipherSuite callback error = " + err);
8568    } else {
8569      console.log("getCipherSuite callback = " + data);
8570    }
8571  });
8572});
8573```
8574
8575### getCipherSuite<sup>10+</sup>
8576
8577getCipherSuite(): Promise\<Array\<string\>\>
8578
8579在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
8580
8581**系统能力**:SystemCapability.Communication.NetStack
8582
8583**返回值:**
8584
8585| 类型                       | 说明                                                         |
8586| -------------------------- | ------------------------------------------------------------ |
8587| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
8588
8589**错误码:**
8590
8591| 错误码ID | 错误信息                               |
8592| -------- | -------------------------------------- |
8593| 2303501  | SSL is null.                           |
8594| 2303502  | An error occurred when reading data on the TLS socket.|
8595| 2303505  | An error occurred in the TLS system call. |
8596| 2300002  | System internal error.                 |
8597
8598**示例:**
8599
8600```ts
8601import { socket } from '@kit.NetworkKit';
8602import { BusinessError } from '@kit.BasicServicesKit';
8603
8604let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8605let netAddress: socket.NetAddress = {
8606  address: '192.168.xx.xxx',
8607  port: 8080
8608}
8609let tlsSecureOptions: socket.TLSSecureOptions = {
8610  key: "xxxx",
8611  cert: "xxxx",
8612  ca: ["xxxx"],
8613  password: "xxxx",
8614  protocols: socket.Protocol.TLSv12,
8615  useRemoteCipherPrefer: true,
8616  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8617  cipherSuite: "AES256-SHA256"
8618}
8619let tlsConnectOptions: socket.TLSConnectOptions = {
8620  address: netAddress,
8621  secureOptions: tlsSecureOptions,
8622  ALPNProtocols: ["spdy/1", "http/1.1"]
8623}
8624tlsServer.listen(tlsConnectOptions).then(() => {
8625  console.log("listen callback success");
8626}).catch((err: BusinessError) => {
8627  console.log("failed" + err);
8628});
8629tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8630  client.getCipherSuite().then((data: Array<string>) => {
8631    console.log('getCipherSuite success:' + JSON.stringify(data));
8632  }).catch((err: BusinessError) => {
8633    console.error("failed" + err);
8634  });
8635});
8636```
8637
8638### getSignatureAlgorithms<sup>10+</sup>
8639
8640getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
8641
8642在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。
8643
8644**系统能力**:SystemCapability.Communication.NetStack
8645
8646**参数:**
8647
8648| 参数名   | 类型                             | 必填 | 说明                               |
8649| -------- | -------------------------------- | ---- | ---------------------------------- |
8650| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回双方支持的签名算法。 |
8651
8652**错误码:**
8653
8654| 错误码ID | 错误信息               |
8655| -------- | ---------------------- |
8656| 401      | Parameter error.       |
8657| 2303501  | SSL is null.           |
8658| 2300002  | System internal error. |
8659
8660**示例:**
8661
8662```ts
8663import { socket } from '@kit.NetworkKit';
8664import { BusinessError } from '@kit.BasicServicesKit';
8665
8666let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8667let netAddress: socket.NetAddress = {
8668  address: '192.168.xx.xxx',
8669  port: 8080
8670}
8671let tlsSecureOptions: socket.TLSSecureOptions = {
8672  key: "xxxx",
8673  cert: "xxxx",
8674  ca: ["xxxx"],
8675  password: "xxxx",
8676  protocols: socket.Protocol.TLSv12,
8677  useRemoteCipherPrefer: true,
8678  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8679  cipherSuite: "AES256-SHA256"
8680}
8681let tlsConnectOptions: socket.TLSConnectOptions = {
8682  address: netAddress,
8683  secureOptions: tlsSecureOptions,
8684  ALPNProtocols: ["spdy/1", "http/1.1"]
8685}
8686tlsServer.listen(tlsConnectOptions).then(() => {
8687  console.log("listen callback success");
8688}).catch((err: BusinessError) => {
8689  console.log("failed" + err);
8690});
8691tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8692  client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
8693    if (err) {
8694      console.log("getSignatureAlgorithms callback error = " + err);
8695    } else {
8696      console.log("getSignatureAlgorithms callback = " + data);
8697    }
8698  });
8699});
8700```
8701
8702### getSignatureAlgorithms<sup>10+</sup>
8703
8704getSignatureAlgorithms(): Promise\<Array\<string\>\>
8705
8706在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。
8707
8708**系统能力**:SystemCapability.Communication.NetStack
8709
8710**返回值:**
8711
8712| 类型                       | 说明                                          |
8713| -------------------------- | --------------------------------------------- |
8714| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
8715
8716**错误码:**
8717
8718| 错误码ID | 错误信息               |
8719| -------- | ---------------------- |
8720| 2303501  | SSL is null.           |
8721| 2300002  | System internal error. |
8722
8723**示例:**
8724
8725```ts
8726import { socket } from '@kit.NetworkKit';
8727import { BusinessError } from '@kit.BasicServicesKit';
8728
8729let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8730let netAddress: socket.NetAddress = {
8731  address: '192.168.xx.xxx',
8732  port: 8080
8733}
8734let tlsSecureOptions: socket.TLSSecureOptions = {
8735  key: "xxxx",
8736  cert: "xxxx",
8737  ca: ["xxxx"],
8738  password: "xxxx",
8739  protocols: socket.Protocol.TLSv12,
8740  useRemoteCipherPrefer: true,
8741  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8742  cipherSuite: "AES256-SHA256"
8743}
8744let tlsConnectOptions: socket.TLSConnectOptions = {
8745  address: netAddress,
8746  secureOptions: tlsSecureOptions,
8747  ALPNProtocols: ["spdy/1", "http/1.1"]
8748}
8749tlsServer.listen(tlsConnectOptions).then(() => {
8750  console.log("listen callback success");
8751}).catch((err: BusinessError) => {
8752  console.log("failed" + err);
8753});
8754tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8755  client.getSignatureAlgorithms().then((data: Array<string>) => {
8756    console.log("getSignatureAlgorithms success" + data);
8757  }).catch((err: BusinessError) => {
8758    console.error("failed" + err);
8759  });
8760});
8761```
8762
8763### getLocalAddress<sup>12+</sup>
8764
8765getLocalAddress(): Promise\<NetAddress\>
8766
8767获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。
8768
8769> **说明:**
8770> 在TLSSocketServer通信连接成功之后,才可调用此方法。
8771
8772**系统能力**:SystemCapability.Communication.NetStack
8773
8774**返回值:**
8775
8776| 类型            | 说明                                                 |
8777|  -------------- |  --------------------------------------------------- |
8778| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
8779
8780**错误码:**
8781
8782| 错误码ID | 错误信息                                    |
8783| -------- | ------------------------------------------- |
8784| 2300002  | System internal error.                      |
8785| 2301009  | Bad file descriptor.                            |
8786| 2303188  | Socket operation on non-socket. |
8787
8788**示例:**
8789
8790```ts
8791import { socket } from '@kit.NetworkKit';
8792import { BusinessError } from '@kit.BasicServicesKit';
8793
8794let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8795let netAddress: socket.NetAddress = {
8796  address: '192.168.xx.xxx',
8797  port: 8080
8798}
8799let tlsSecureOptions: socket.TLSSecureOptions = {
8800  key: "xxxx",
8801  cert: "xxxx",
8802  ca: ["xxxx"],
8803  password: "xxxx",
8804  protocols: socket.Protocol.TLSv12,
8805  useRemoteCipherPrefer: true,
8806  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8807  cipherSuite: "AES256-SHA256"
8808}
8809let tlsConnectOptions: socket.TLSConnectOptions = {
8810  address: netAddress,
8811  secureOptions: tlsSecureOptions,
8812  ALPNProtocols: ["spdy/1", "http/1.1"]
8813}
8814tlsServer.listen(tlsConnectOptions).then(() => {
8815  console.info("listen callback success");
8816}).catch((err: BusinessError) => {
8817  console.error("failed" + err);
8818});
8819
8820tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8821  client.getLocalAddress().then((localAddress: socket.NetAddress) => {
8822    console.info("Family IP Port: " + JSON.stringify(localAddress));
8823  }).catch((err: BusinessError) => {
8824    console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err));
8825  })
8826});
8827```
8828
8829### on('message')<sup>10+</sup>
8830
8831on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
8832
8833订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
8834
8835**系统能力**:SystemCapability.Communication.NetStack
8836
8837**参数:**
8838
8839| 参数名   | 类型                                                         | 必填 | 说明                                      |
8840| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
8841| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
8842| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。                               |
8843
8844**错误码:**
8845
8846| 错误码ID | 错误信息         |
8847| -------- | ---------------- |
8848| 401      | Parameter error. |
8849
8850**示例:**
8851
8852```ts
8853import { socket } from '@kit.NetworkKit';
8854import { BusinessError } from '@kit.BasicServicesKit';
8855
8856let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8857let netAddress: socket.NetAddress = {
8858  address: '192.168.xx.xxx',
8859  port: 8080
8860}
8861let tlsSecureOptions: socket.TLSSecureOptions = {
8862  key: "xxxx",
8863  cert: "xxxx",
8864  ca: ["xxxx"],
8865  password: "xxxx",
8866  protocols: socket.Protocol.TLSv12,
8867  useRemoteCipherPrefer: true,
8868  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8869  cipherSuite: "AES256-SHA256"
8870}
8871let tlsConnectOptions: socket.TLSConnectOptions = {
8872  address: netAddress,
8873  secureOptions: tlsSecureOptions,
8874  ALPNProtocols: ["spdy/1", "http/1.1"]
8875}
8876tlsServer.listen(tlsConnectOptions).then(() => {
8877  console.log("listen callback success");
8878}).catch((err: BusinessError) => {
8879  console.log("failed" + err);
8880});
8881
8882tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8883  client.on('message', (value: socket.SocketMessageInfo) => {
8884    let messageView = '';
8885    for (let i: number = 0; i < value.message.byteLength; i++) {
8886      let uint8Array = new Uint8Array(value.message) 
8887      let messages = uint8Array[i]
8888      let message = String.fromCharCode(messages);
8889      messageView += message;
8890    }
8891    console.log('on message message: ' + JSON.stringify(messageView));
8892    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
8893  });
8894});
8895```
8896
8897### off('message')<sup>10+</sup>
8898
8899off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
8900
8901取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
8902
8903**系统能力**:SystemCapability.Communication.NetStack
8904
8905**参数:**
8906
8907| 参数名   | 类型                                                         | 必填 | 说明                                      |
8908| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
8909| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
8910| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。  |
8911
8912**错误码:**
8913
8914| 错误码ID | 错误信息         |
8915| -------- | ---------------- |
8916| 401      | Parameter error. |
8917
8918**示例:**
8919
8920```ts
8921import { socket } from '@kit.NetworkKit';
8922import { BusinessError } from '@kit.BasicServicesKit';
8923
8924let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8925let netAddress: socket.NetAddress = {
8926  address: '192.168.xx.xxx',
8927  port: 8080
8928}
8929let tlsSecureOptions: socket.TLSSecureOptions = {
8930  key: "xxxx",
8931  cert: "xxxx",
8932  ca: ["xxxx"],
8933  password: "xxxx",
8934  protocols: socket.Protocol.TLSv12,
8935  useRemoteCipherPrefer: true,
8936  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8937  cipherSuite: "AES256-SHA256"
8938}
8939let tlsConnectOptions: socket.TLSConnectOptions = {
8940  address: netAddress,
8941  secureOptions: tlsSecureOptions,
8942  ALPNProtocols: ["spdy/1", "http/1.1"]
8943}
8944tlsServer.listen(tlsConnectOptions).then(() => {
8945  console.log("listen callback success");
8946}).catch((err: BusinessError) => {
8947  console.log("failed" + err);
8948});
8949
8950let callback = (value: socket.SocketMessageInfo) => {
8951  let messageView = '';
8952  for (let i: number = 0; i < value.message.byteLength; i++) {
8953    let uint8Array = new Uint8Array(value.message) 
8954    let messages = uint8Array[i]
8955    let message = String.fromCharCode(messages);
8956    messageView += message;
8957  }
8958  console.log('on message message: ' + JSON.stringify(messageView));
8959  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
8960}
8961tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8962  client.on('message', callback);
8963  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8964  client.off('message', callback);
8965  client.off('message');
8966});
8967```
8968
8969### on('close')<sup>10+</sup>
8970
8971on(type: 'close', callback: Callback\<void\>): void
8972
8973订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
8974
8975**系统能力**:SystemCapability.Communication.NetStack
8976
8977**参数:**
8978
8979| 参数名   | 类型             | 必填 | 说明                                |
8980| -------- | ---------------- | ---- | ----------------------------------- |
8981| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
8982| callback | Callback\<void\> | 是   | 回调函数。成功时返回空,失败时返回错误码、错误信息。    |
8983
8984**错误码:**
8985
8986| 错误码ID | 错误信息         |
8987| -------- | ---------------- |
8988| 401      | Parameter error. |
8989
8990**示例:**
8991
8992```ts
8993import { socket } from '@kit.NetworkKit';
8994import { BusinessError } from '@kit.BasicServicesKit';
8995
8996let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8997let netAddress: socket.NetAddress = {
8998  address: '192.168.xx.xxx',
8999  port: 8080
9000}
9001let tlsSecureOptions: socket.TLSSecureOptions = {
9002  key: "xxxx",
9003  cert: "xxxx",
9004  ca: ["xxxx"],
9005  password: "xxxx",
9006  protocols: socket.Protocol.TLSv12,
9007  useRemoteCipherPrefer: true,
9008  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9009  cipherSuite: "AES256-SHA256"
9010}
9011let tlsConnectOptions: socket.TLSConnectOptions = {
9012  address: netAddress,
9013  secureOptions: tlsSecureOptions,
9014  ALPNProtocols: ["spdy/1", "http/1.1"]
9015}
9016tlsServer.listen(tlsConnectOptions).then(() => {
9017  console.log("listen callback success");
9018}).catch((err: BusinessError) => {
9019  console.log("failed" + err);
9020});
9021tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9022  client.on('close', () => {
9023    console.log("on close success")
9024  });
9025});
9026```
9027
9028### off('close')<sup>10+</sup>
9029
9030off(type: 'close', callback?: Callback\<void\>): void
9031
9032取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
9033
9034**系统能力**:SystemCapability.Communication.NetStack
9035
9036**参数:**
9037
9038| 参数名   | 类型             | 必填 | 说明                                |
9039| -------- | ---------------- | ---- | ----------------------------------- |
9040| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
9041| callback | Callback\<void\> | 否   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                         |
9042
9043**错误码:**
9044
9045| 错误码ID | 错误信息         |
9046| -------- | ---------------- |
9047| 401      | Parameter error. |
9048
9049**示例:**
9050
9051```ts
9052import { socket } from '@kit.NetworkKit';
9053import { BusinessError } from '@kit.BasicServicesKit';
9054
9055let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9056let netAddress: socket.NetAddress = {
9057  address: '192.168.xx.xxx',
9058  port: 8080
9059}
9060let tlsSecureOptions: socket.TLSSecureOptions = {
9061  key: "xxxx",
9062  cert: "xxxx",
9063  ca: ["xxxx"],
9064  password: "xxxx",
9065  protocols: socket.Protocol.TLSv12,
9066  useRemoteCipherPrefer: true,
9067  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9068  cipherSuite: "AES256-SHA256"
9069}
9070let tlsConnectOptions: socket.TLSConnectOptions = {
9071  address: netAddress,
9072  secureOptions: tlsSecureOptions,
9073  ALPNProtocols: ["spdy/1", "http/1.1"]
9074}
9075tlsServer.listen(tlsConnectOptions).then(() => {
9076  console.log("listen callback success");
9077}).catch((err: BusinessError) => {
9078  console.log("failed" + err);
9079});
9080
9081let callback = () => {
9082  console.log("on close success");
9083}
9084tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9085  client.on('close', callback);
9086  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
9087  client.off('close', callback);
9088  client.off('close');
9089});
9090```
9091
9092### on('error')<sup>10+</sup>
9093
9094on(type: 'error', callback: ErrorCallback): void
9095
9096订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
9097
9098**系统能力**:SystemCapability.Communication.NetStack
9099
9100**参数:**
9101
9102| 参数名   | 类型          | 必填 | 说明                                 |
9103| -------- | ------------- | ---- | ------------------------------------ |
9104| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
9105| callback | ErrorCallback | 是   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                        |
9106
9107**错误码:**
9108
9109| 错误码ID | 错误信息         |
9110| -------- | ---------------- |
9111| 401      | Parameter error. |
9112
9113**示例:**
9114
9115```ts
9116import { socket } from '@kit.NetworkKit';
9117import { BusinessError } from '@kit.BasicServicesKit';
9118
9119let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9120let netAddress: socket.NetAddress = {
9121  address: '192.168.xx.xxx',
9122  port: 8080
9123}
9124let tlsSecureOptions: socket.TLSSecureOptions = {
9125  key: "xxxx",
9126  cert: "xxxx",
9127  ca: ["xxxx"],
9128  password: "xxxx",
9129  protocols: socket.Protocol.TLSv12,
9130  useRemoteCipherPrefer: true,
9131  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9132  cipherSuite: "AES256-SHA256"
9133}
9134let tlsConnectOptions: socket.TLSConnectOptions = {
9135  address: netAddress,
9136  secureOptions: tlsSecureOptions,
9137  ALPNProtocols: ["spdy/1", "http/1.1"]
9138}
9139tlsServer.listen(tlsConnectOptions).then(() => {
9140  console.log("listen callback success");
9141}).catch((err: BusinessError) => {
9142  console.log("failed" + err);
9143});
9144
9145tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9146  client.on('error', (err: BusinessError) => {
9147    console.log("on error, err:" + JSON.stringify(err))
9148  });
9149});
9150```
9151
9152### off('error')<sup>10+</sup>
9153
9154off(type: 'error', callback?: ErrorCallback): void
9155
9156取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
9157
9158**系统能力**:SystemCapability.Communication.NetStack
9159
9160**参数:**
9161
9162| 参数名   | 类型          | 必填 | 说明                                 |
9163| -------- | ------------- | ---- | ------------------------------------ |
9164| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
9165| callback | ErrorCallback | 否   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                        |
9166
9167**错误码:**
9168
9169| 错误码ID | 错误信息         |
9170| -------- | ---------------- |
9171| 401      | Parameter error. |
9172
9173**示例:**
9174
9175```ts
9176import { socket } from '@kit.NetworkKit';
9177import { BusinessError } from '@kit.BasicServicesKit';
9178
9179let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9180let netAddress: socket.NetAddress = {
9181  address: '192.168.xx.xxx',
9182  port: 8080
9183}
9184let tlsSecureOptions: socket.TLSSecureOptions = {
9185  key: "xxxx",
9186  cert: "xxxx",
9187  ca: ["xxxx"],
9188  password: "xxxx",
9189  protocols: socket.Protocol.TLSv12,
9190  useRemoteCipherPrefer: true,
9191  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9192  cipherSuite: "AES256-SHA256"
9193}
9194let tlsConnectOptions: socket.TLSConnectOptions = {
9195  address: netAddress,
9196  secureOptions: tlsSecureOptions,
9197  ALPNProtocols: ["spdy/1", "http/1.1"]
9198}
9199tlsServer.listen(tlsConnectOptions).then(() => {
9200  console.log("listen callback success");
9201}).catch((err: BusinessError) => {
9202  console.log("failed" + err);
9203});
9204
9205let callback = (err: BusinessError) => {
9206  console.log("on error, err:" + JSON.stringify(err));
9207}
9208tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9209  client.on('error', callback);
9210  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
9211  client.off('error', callback);
9212  client.off('error');
9213});
9214```
9215