• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.net.socket (Socket连接)
2
3本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。
4
5> **说明:**
6>
7> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8> 本模块API使用时建议放在worker线程或者taskpool中做网络操作,否则可能会导致UI线程卡顿。
9
10## 导入模块
11
12```ts
13import { socket } from '@kit.NetworkKit';
14```
15
16## socket.constructUDPSocketInstance
17
18constructUDPSocketInstance(): UDPSocket
19
20创建一个UDPSocket对象。
21
22**系统能力**:SystemCapability.Communication.NetStack
23
24**返回值:**
25
26| 类型                               | 说明                    |
27|  --------------------------------- |  ---------------------- |
28| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 |
29
30**示例:**
31
32```ts
33import { socket } from '@kit.NetworkKit';
34let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
35```
36
37## UDPSocket
38
39UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。
40
41### bind
42
43bind(address: NetAddress, callback: AsyncCallback\<void\>): void
44
45绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。
46
47**需要权限**:ohos.permission.INTERNET
48
49**系统能力**:SystemCapability.Communication.NetStack
50
51**参数:**
52
53| 参数名   | 类型                               | 必填 | 说明                                                   |
54| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
55| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
56| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。        |
57
58**错误码:**
59
60| 错误码ID | 错误信息                 |
61| ------- | ----------------------- |
62| 401     | Parameter error.        |
63| 201     | Permission denied.      |
64
65**示例:**
66
67```ts
68import { socket } from '@kit.NetworkKit';
69import { BusinessError } from '@kit.BasicServicesKit';
70
71let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
72let bindAddr: socket.NetAddress = {
73  address: '192.168.xx.xxx',
74  port: 1234
75}
76udp.bind(bindAddr, (err: BusinessError) => {
77  if (err) {
78    console.log('bind fail');
79    return;
80  }
81  console.log('bind success');
82});
83```
84
85### bind
86
87bind(address: NetAddress): Promise\<void\>
88
89绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。
90
91**需要权限**:ohos.permission.INTERNET
92
93**系统能力**:SystemCapability.Communication.NetStack
94
95**参数:**
96
97| 参数名  | 类型                               | 必填 | 说明                                                   |
98| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
99| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
100
101**错误码:**
102
103| 错误码ID | 错误信息                 |
104| ------- | ----------------------- |
105| 401     | Parameter error.        |
106| 201     | Permission denied.      |
107
108**返回值:**
109
110| 类型            | 说明                                       |
111|  -------------- |  ----------------------------------------- |
112| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 |
113
114**示例:**
115
116```ts
117import { socket } from '@kit.NetworkKit';
118import { BusinessError } from '@kit.BasicServicesKit';
119
120let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
121let bindAddr: socket.NetAddress = {
122  address: '192.168.xx.xxx',
123  port: 8080
124}
125udp.bind(bindAddr).then(() => {
126  console.log('bind success');
127}).catch((err: BusinessError) => {
128  console.log('bind fail');
129});
130```
131
132### send
133
134send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void
135
136通过UDPSocket连接发送数据。使用callback方式作为异步方法。
137
138发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
139
140**需要权限**:ohos.permission.INTERNET
141
142**系统能力**:SystemCapability.Communication.NetStack
143
144**参数:**
145
146| 参数名   | 类型                                     | 必填 | 说明                                                         |
147| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
148| options  | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
149| callback | AsyncCallback\<void\>                    | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。                                                  |
150
151**错误码:**
152
153| 错误码ID | 错误信息                 |
154| ------- | ----------------------- |
155| 401     | Parameter error.        |
156| 201     | Permission denied.      |
157| 2301206 | Socks5 failed to connect to the proxy server.  |
158| 2301207 | Socks5 username or password is invalid.        |
159| 2301208 | Socks5 failed to connect to the remote server. |
160| 2301209 | Socks5 failed to negotiate the authentication method. |
161| 2301210 | Socks5 failed to send the message.             |
162| 2301211 | Socks5 failed to receive the message.          |
163| 2301212 | Socks5 serialization error.                    |
164| 2301213 | Socks5 deserialization error.                  |
165
166**示例:**
167
168```ts
169import { socket } from '@kit.NetworkKit';
170import { BusinessError } from '@kit.BasicServicesKit';
171
172let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
173let bindAddr: socket.NetAddress = {
174  address: '192.168.xx.xxx',  // 本端地址
175  port: 1234
176}
177udp.bind(bindAddr, (err: BusinessError) => {
178  if (err) {
179    console.log('bind fail');
180    return;
181  }
182  console.log('bind success');
183});
184let netAddress: socket.NetAddress = {
185  address: '192.168.xx.xxx',  // 对端地址
186  port: 8080
187}
188let sendOptions: socket.UDPSendOptions = {
189  data: 'Hello, server!',
190  address: netAddress
191}
192udp.send(sendOptions, (err: BusinessError) => {
193  if (err) {
194    console.log('send fail');
195    return;
196  }
197  console.log('send success');
198});
199```
200
201**示例(设置socket代理):**
202
203```ts
204import { socket } from '@kit.NetworkKit';
205import { BusinessError } from '@kit.BasicServicesKit';
206
207let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
208let bindAddr: socket.NetAddress = {
209  address: '192.168.xx.xxx',  // 本端地址
210  port: 1234
211}
212udp.bind(bindAddr, (err: BusinessError) => {
213  if (err) {
214    console.log('bind fail');
215    return;
216  }
217  console.log('bind success');
218});
219let netAddress: socket.NetAddress = {
220  address: '192.168.xx.xxx',  // 对端地址
221  port: 8080
222}
223let socks5Server: socket.NetAddress = {
224  address: '192.168.xx.xxx',
225  port: 8080
226}
227let sendOptions: socket.UDPSendOptions = {
228  data: 'Hello, server!',
229  address: netAddress,
230  proxy: socket.ProxyOptions = {
231    type : 1,
232    address: socks5Server,
233    username: "xxx",
234    password: "xxx"
235  }
236}
237udp.send(sendOptions, (err: BusinessError) => {
238  if (err) {
239    console.log('send fail');
240    return;
241  }
242  console.log('send success');
243});
244```
245
246### send
247
248send(options: UDPSendOptions): Promise\<void\>
249
250通过UDPSocket连接发送数据。使用Promise方式作为异步方法。
251
252发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
253
254**需要权限**:ohos.permission.INTERNET
255
256**系统能力**:SystemCapability.Communication.NetStack
257
258**参数:**
259
260| 参数名  | 类型                                     | 必填 | 说明                                                         |
261| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
262| options | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
263
264**错误码:**
265
266| 错误码ID | 错误信息                 |
267| ------- | ----------------------- |
268| 401     | Parameter error.        |
269| 201     | Permission denied.      |
270| 2301206 | Socks5 failed to connect to the proxy server.  |
271| 2301207 | Socks5 username or password is invalid.        |
272| 2301208 | Socks5 failed to connect to the remote server. |
273| 2301209 | Socks5 failed to negotiate the authentication method. |
274| 2301210 | Socks5 failed to send the message.             |
275| 2301211 | Socks5 failed to receive the message.          |
276| 2301212 | Socks5 serialization error.                    |
277| 2301213 | Socks5 deserialization error.                  |
278
279**返回值:**
280
281| 类型            | 说明                                           |
282|  -------------- |  --------------------------------------------- |
283| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 |
284
285**示例:**
286
287```ts
288import { socket } from '@kit.NetworkKit';
289import { BusinessError } from '@kit.BasicServicesKit';
290
291let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
292let bindAddr: socket.NetAddress = {
293  address: '192.168.xx.xxx', // 本端地址
294  port: 8080
295}
296udp.bind(bindAddr).then(() => {
297  console.log('bind success');
298}).catch((err: BusinessError) => {
299  console.log('bind fail');
300  return;
301});
302let netAddress: socket.NetAddress = {
303  address: '192.168.xx.xxx', // 对端地址
304  port: 8080
305}
306let sendOptions: socket.UDPSendOptions = {
307  data: 'Hello, server!',
308  address: netAddress
309}
310udp.send(sendOptions).then(() => {
311  console.log('send success');
312}).catch((err: BusinessError) => {
313  console.log('send fail');
314});
315```
316
317**示例(设置socket代理):**
318
319```ts
320import { socket } from '@kit.NetworkKit';
321import { BusinessError } from '@kit.BasicServicesKit';
322
323let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
324let bindAddr: socket.NetAddress = {
325  address: '192.168.xx.xxx', // 本端地址
326  port: 8080
327}
328udp.bind(bindAddr).then(() => {
329  console.log('bind success');
330}).catch((err: BusinessError) => {
331  console.log('bind fail');
332  return;
333});
334let netAddress: socket.NetAddress = {
335  address: '192.168.xx.xxx', // 对端地址
336  port: 8080
337}
338let socks5Server: socket.NetAddress = {
339  address: '192.168.xx.xxx',
340  port: 8080
341}
342let sendOptions: socket.UDPSendOptions = {
343  data: 'Hello, server!',
344  address: netAddress,
345  proxy: socket.ProxyOptions = {
346    type : 1,
347    address: socks5Server,
348    username: "xxx",
349    password: "xxx"
350  }
351}
352udp.send(sendOptions).then(() => {
353  console.log('send success');
354}).catch((err: BusinessError) => {
355  console.log('send fail');
356});
357```
358
359### close
360
361close(callback: AsyncCallback\<void\>): void
362
363关闭UDPSocket连接。使用callback方式作为异步方法。
364
365**需要权限**:ohos.permission.INTERNET
366
367**系统能力**:SystemCapability.Communication.NetStack
368
369**参数:**
370
371| 参数名   | 类型                  | 必填 | 说明       |
372| -------- | --------------------- | ---- | ---------- |
373| callback | AsyncCallback\<void\> | 是   | 回调函数。关闭UDPSocket连接后触发回调函数。 |
374
375**错误码:**
376
377| 错误码ID | 错误信息                 |
378| ------- | ----------------------- |
379| 201     | Permission denied.      |
380
381**示例:**
382
383```ts
384import { socket } from '@kit.NetworkKit';
385import { BusinessError } from '@kit.BasicServicesKit';
386
387let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
388udp.close((err: BusinessError) => {
389  if (err) {
390    console.log('close fail');
391    return;
392  }
393  console.log('close success');
394})
395```
396
397### close
398
399close(): Promise\<void\>
400
401关闭UDPSocket连接。使用Promise方式作为异步方法。
402
403**需要权限**:ohos.permission.INTERNET
404
405**系统能力**:SystemCapability.Communication.NetStack
406
407**错误码:**
408
409| 错误码ID | 错误信息                 |
410| ------- | ----------------------- |
411| 201     | Permission denied.      |
412
413**返回值:**
414
415| 类型            | 说明                                       |
416|  -------------- |  ----------------------------------------- |
417| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 |
418
419**示例:**
420
421```ts
422import { socket } from '@kit.NetworkKit';
423import { BusinessError } from '@kit.BasicServicesKit';
424
425let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
426udp.close().then(() => {
427  console.log('close success');
428}).catch((err: BusinessError) => {
429  console.log('close fail');
430});
431```
432
433### getState
434
435getState(callback: AsyncCallback\<SocketStateBase\>): void
436
437获取UDPSocket状态。使用callback方式作为异步方法。
438
439> **说明:**
440> bind方法调用成功后,才可调用此方法。
441
442**需要权限**:ohos.permission.INTERNET
443
444**系统能力**:SystemCapability.Communication.NetStack
445
446**参数:**
447
448| 参数名   | 类型                                                   | 必填 | 说明       |
449| -------- | ------------------------------------------------------ | ---- | ---------- |
450| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 |
451
452**错误码:**
453
454| 错误码ID | 错误信息                 |
455| ------- | ----------------------- |
456| 201     | Permission denied.      |
457
458**示例:**
459
460```ts
461import { socket } from '@kit.NetworkKit';
462import { BusinessError } from '@kit.BasicServicesKit';
463
464let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
465let bindAddr: socket.NetAddress = {
466  address: '192.168.xx.xxx',
467  port: 8080
468}
469udp.bind(bindAddr, (err: BusinessError) => {
470  if (err) {
471    console.log('bind fail');
472    return;
473  }
474  console.log('bind success');
475  udp.getState((err: BusinessError, data: socket.SocketStateBase) => {
476    if (err) {
477      console.log('getState fail');
478      return;
479    }
480    console.log('getState success:' + JSON.stringify(data));
481  })
482})
483```
484
485### getState
486
487getState(): Promise\<SocketStateBase\>
488
489获取UDPSocket状态。使用Promise方式作为异步方法。
490
491> **说明:**
492> bind方法调用成功后,才可调用此方法。
493
494**需要权限**:ohos.permission.INTERNET
495
496**系统能力**:SystemCapability.Communication.NetStack
497
498**错误码:**
499
500| 错误码ID | 错误信息                 |
501| ------- | ----------------------- |
502| 201     | Permission denied.      |
503
504**返回值:**
505
506| 类型                                             | 说明                                       |
507|  ----------------------------------------------- |  ----------------------------------------- |
508| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 |
509
510**示例:**
511
512```ts
513import { socket } from '@kit.NetworkKit';
514import { BusinessError } from '@kit.BasicServicesKit';
515
516let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
517let bindAddr: socket.NetAddress = {
518  address: '192.168.xx.xxx',
519  port: 8080
520}
521udp.bind(bindAddr, (err: BusinessError) => {
522  if (err) {
523    console.log('bind fail');
524    return;
525  }
526  console.log('bind success');
527  udp.getState().then((data: socket.SocketStateBase) => {
528    console.log('getState success:' + JSON.stringify(data));
529  }).catch((err: BusinessError) => {
530    console.log('getState fail' + JSON.stringify(err));
531  });
532});
533```
534
535### setExtraOptions
536
537setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void
538
539设置UDPSocket连接的其他属性。使用callback方式作为异步方法。
540
541> **说明:**
542> bind方法调用成功后,才可调用此方法。
543
544**需要权限**:ohos.permission.INTERNET
545
546**系统能力**:SystemCapability.Communication.NetStack
547
548**参数:**
549
550| 参数名   | 类型                                     | 必填 | 说明                                                         |
551| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
552| options  | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
553| callback | AsyncCallback\<void\>                    | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。                    |
554
555**错误码:**
556
557| 错误码ID | 错误信息                 |
558| ------- | ----------------------- |
559| 401     | Parameter error.        |
560| 201     | Permission denied.      |
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, (err: BusinessError) => {
575  if (err) {
576    console.log('bind fail');
577    return;
578  }
579  console.log('bind success');
580  let udpextraoptions: socket.UDPExtraOptions = {
581    receiveBufferSize: 6000000,
582    sendBufferSize: 2000000,
583    reuseAddress: false,
584    socketTimeout: 6000,
585    broadcast: true
586  }
587  udp.setExtraOptions(udpextraoptions, (err: BusinessError) => {
588    if (err) {
589      console.log('setExtraOptions fail');
590      return;
591    }
592    console.log('setExtraOptions success');
593  })
594})
595```
596
597### setExtraOptions
598
599setExtraOptions(options: UDPExtraOptions): Promise\<void\>
600
601设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。
602
603> **说明:**
604> bind方法调用成功后,才可调用此方法。
605
606**需要权限**:ohos.permission.INTERNET
607
608**系统能力**:SystemCapability.Communication.NetStack
609
610**参数:**
611
612| 参数名  | 类型                                     | 必填 | 说明                                                         |
613| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
614| options | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
615
616**返回值:**
617
618| 类型            | 说明                                                 |
619|  -------------- |  --------------------------------------------------- |
620| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 |
621
622**错误码:**
623
624| 错误码ID | 错误信息                 |
625| ------- | ----------------------- |
626| 401     | Parameter error.        |
627| 201     | Permission denied.      |
628
629**示例:**
630
631```ts
632import { socket } from '@kit.NetworkKit';
633import { BusinessError } from '@kit.BasicServicesKit';
634
635let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
636
637let bindAddr: socket.NetAddress = {
638  address: '192.168.xx.xxx',
639  port: 8080
640}
641udp.bind(bindAddr, (err: BusinessError) => {
642  if (err) {
643    console.log('bind fail');
644    return;
645  }
646  console.log('bind success');
647  let udpextraoptions: socket.UDPExtraOptions = {
648    receiveBufferSize: 6000000,
649    sendBufferSize: 2000000,
650    reuseAddress: false,
651    socketTimeout: 6000,
652    broadcast: true
653  }
654  udp.setExtraOptions(udpextraoptions).then(() => {
655    console.log('setExtraOptions success');
656  }).catch((err: BusinessError) => {
657    console.log('setExtraOptions fail');
658  });
659})
660```
661
662### getLocalAddress<sup>12+</sup>
663
664getLocalAddress(): Promise\<NetAddress\>
665
666获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。
667
668> **说明:**
669> bind方法调用成功后,才可调用此方法。
670
671**系统能力**:SystemCapability.Communication.NetStack
672
673**返回值:**
674
675| 类型            | 说明                                                 |
676|  -------------- |  --------------------------------------------------- |
677| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
678
679**错误码:**
680
681| 错误码ID | 错误信息                                    |
682| -------- | ------------------------------------------- |
683| 2300002  | System internal error.                      |
684| 2301009  | Bad file descriptor.                            |
685| 2303188  | Socket operation on non-socket. |
686
687**示例:**
688
689```ts
690import { socket } from '@kit.NetworkKit';
691import { BusinessError } from '@kit.BasicServicesKit';
692
693let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
694
695let bindAddr: socket.NetAddress = {
696  address: '192.168.xx.xxx',
697  port: 8080
698}
699udp.bind(bindAddr).then(() => {
700  console.info('bind success');
701  udp.getLocalAddress().then((localAddress: socket.NetAddress) => {
702        console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress));
703      }).catch((err: BusinessError) => {
704        console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err));
705      })
706}).catch((err: BusinessError) => {
707  console.error('bind fail');
708});
709```
710
711### on('message')
712
713on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
714
715订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
716
717**系统能力**:SystemCapability.Communication.NetStack
718
719**参数:**
720
721| 参数名   | 类型                                                         | 必填 | 说明                                      |
722| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
723| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
724| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。       |
725
726**示例:**
727
728```ts
729import { socket } from '@kit.NetworkKit';
730import { BusinessError } from '@kit.BasicServicesKit';
731
732let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
733
734let messageView = '';
735udp.on('message', (value: socket.SocketMessageInfo) => {
736  for (let i: number = 0; i < value.message.byteLength; i++) {
737    let uint8Array = new Uint8Array(value.message)
738    let messages = uint8Array[i]
739    let message = String.fromCharCode(messages);
740    messageView += message;
741  }
742  console.log('on message message: ' + JSON.stringify(messageView));
743  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
744});
745```
746
747### off('message')
748
749off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
750
751取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
752
753**系统能力**:SystemCapability.Communication.NetStack
754
755**参数:**
756
757| 参数名   | 类型                                                         | 必填 | 说明                                      |
758| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
759| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
760| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。返回取消订阅某类事件后UDPSocket连接的状态信息。                              |
761
762**示例:**
763
764```ts
765import { socket } from '@kit.NetworkKit';
766import { BusinessError } from '@kit.BasicServicesKit';
767
768let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
769let messageView = '';
770let callback = (value: socket.SocketMessageInfo) => {
771  for (let i: number = 0; i < value.message.byteLength; i++) {
772    let uint8Array = new Uint8Array(value.message)
773    let messages = uint8Array[i]
774    let message = String.fromCharCode(messages);
775    messageView += message;
776  }
777  console.log('on message message: ' + JSON.stringify(messageView));
778  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
779}
780udp.on('message', callback);
781// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
782udp.off('message', callback);
783udp.off('message');
784```
785
786### on('listening' | 'close')
787
788on(type: 'listening' | 'close', callback: Callback\<void\>): void
789
790订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
791
792**系统能力**:SystemCapability.Communication.NetStack
793
794**参数:**
795
796| 参数名   | 类型             | 必填 | 说明                                                         |
797| -------- | ---------------- | ---- | ------------------------------------------------------------ |
798| type     | string           | 是   | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
799| callback | Callback\<void\> | 是   | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。           |
800
801**示例:**
802
803```ts
804import { socket } from '@kit.NetworkKit';
805import { BusinessError } from '@kit.BasicServicesKit';
806
807let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
808udp.on('listening', () => {
809  console.log("on listening success");
810});
811udp.on('close', () => {
812  console.log("on close success");
813});
814```
815
816### off('listening' | 'close')
817
818off(type: 'listening' | 'close', callback?: Callback\<void\>): void
819
820取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
821
822**系统能力**:SystemCapability.Communication.NetStack
823
824**参数:**
825
826| 参数名   | 类型             | 必填 | 说明                                                         |
827| -------- | ---------------- | ---- | ------------------------------------------------------------ |
828| type     | string           | 是   | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
829| callback | Callback\<void\> | 否   | 回调函数。取消订阅UDPSocket连接的数据包消息事件或关闭事件后触发回调函数。     |
830
831**示例:**
832
833```ts
834import { socket } from '@kit.NetworkKit';
835import { BusinessError } from '@kit.BasicServicesKit';
836
837let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
838let callback1 = () => {
839  console.log("on listening, success");
840}
841udp.on('listening', callback1);
842// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
843udp.off('listening', callback1);
844udp.off('listening');
845let callback2 = () => {
846  console.log("on close, success");
847}
848udp.on('close', callback2);
849// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
850udp.off('close', callback2);
851udp.off('close');
852```
853
854### on('error')
855
856on(type: 'error', callback: ErrorCallback): void
857
858订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
859
860**系统能力**:SystemCapability.Communication.NetStack
861
862**参数:**
863
864| 参数名   | 类型          | 必填 | 说明                                 |
865| -------- | ------------- | ---- | ------------------------------------ |
866| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
867| callback | ErrorCallback | 是   | 回调函数。UDPSocket连接发生error事件后触发回调函数。                      |
868
869**示例:**
870
871```ts
872import { socket } from '@kit.NetworkKit';
873import { BusinessError } from '@kit.BasicServicesKit';
874
875let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
876udp.on('error', (err: BusinessError) => {
877  console.log("on error, err:" + JSON.stringify(err))
878});
879```
880
881### off('error')
882
883off(type: 'error', callback?: ErrorCallback): void
884
885取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
886
887**系统能力**:SystemCapability.Communication.NetStack
888
889**参数:**
890
891| 参数名   | 类型          | 必填 | 说明                                 |
892| -------- | ------------- | ---- | ------------------------------------ |
893| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
894| callback | ErrorCallback | 否   | 回调函数。UDPSocket连接发生error事件后。      |
895
896**示例:**
897
898```ts
899import { socket } from '@kit.NetworkKit';
900import { BusinessError } from '@kit.BasicServicesKit';
901
902let udp: socket.UDPSocket = socket.constructUDPSocketInstance();
903let callback = (err: BusinessError) => {
904  console.log("on error, err:" + JSON.stringify(err));
905}
906udp.on('error', callback);
907// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
908udp.off('error', callback);
909udp.off('error');
910```
911
912## NetAddress
913
914目标地址信息。
915
916**系统能力**:SystemCapability.Communication.NetStack
917
918| 名称  | 类型   | 必填 | 说明                                                         |
919| ------- | ------ | ---- | ------------------------------------------------------------ |
920| address<sup>11+</sup> | string | 是   | 本地绑定的ip地址。                                           |
921| port    | number | 否   | 端口号 ,范围0~65535。如果不指定系统随机分配端口。           |
922| family  | number | 否   | 网络协议类型,可选类型:<br />- 1:IPv4。默认为1。<br />- 2:IPv6。地址为IPV6类型,该字段必须被显式指定为2。<br />- 3:Domain<sup>18+</sup>。地址为Domain类型,该字段必须被显式指定为3。|
923
924## ProxyOptions<sup>18+</sup>
925
926Socket代理信息。
927
928**系统能力**:SystemCapability.Communication.NetStack
929
930| 名称  | 类型   | 必填 | 说明                                                         |
931| ------- | ------ | ---- | ------------------------------------------------------------ |
932| type    | [ProxyTypes](#proxytypes18) | 是   | 代理类型。                                 |
933| address | [NetAddress](#netaddress) | 是   | 代理地址信息。                             |
934| username  | string | 否   | 指定用户名,如果使用用户密码验证方式。  |
935| password  | string | 否   | 指定密码,如果使用用户密码验证方式。 |
936
937## ProxyTypes<sup>18+</sup>
938
939Socket代理类型。
940
941**系统能力**:SystemCapability.Communication.NetStack
942
943| 名称      |    值    | 说明                |
944| --------- | --------- |------------------ |
945| NONE    | 0 | 不使用代理。 |
946| SOCKS5  | 1 | 使用Socks5代理。 |
947
948## UDPSendOptions
949
950UDPSocket发送参数。
951
952**系统能力**:SystemCapability.Communication.NetStack
953
954| 名称  | 类型                               | 必填 | 说明           |
955| ------- | ---------------------------------- | ---- | -------------- |
956| data    | string \| ArrayBuffer                          | 是   | 发送的数据。   |
957| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
958| proxy<sup>18+</sup>   | [ProxyOptions](#proxyoptions18) | 否   | 使用的代理信息,默认不使用代理。 |
959
960## UDPExtraOptions
961
962UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。
963
964**系统能力**:SystemCapability.Communication.NetStack
965
966| 名称            | 类型    | 必填 | 说明                             |
967| ----------------- | ------- | ---- | -------------------------------- |
968| broadcast         | boolean | 否   | 是否可以发送广播。默认为false。true:可发送广播;false:不可发送广播。  |
969
970## SocketMessageInfo<sup>11+</sup>
971
972socket连接信息
973
974**系统能力**:SystemCapability.Communication.NetStack
975
976| 名称        | 类型   | 必填 | 说明                                  |
977| ---------- | ------ | ---- | ------------------------------------- |
978| message    | ArrayBuffer | 是   | 接收的事件消息。 |
979| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是   | socket连接信息。 |
980
981## SocketStateBase
982
983Socket的状态信息。
984
985**系统能力**:SystemCapability.Communication.NetStack
986
987| 名称      | 类型    | 必填 | 说明       |
988| ----------- | ------- | ---- | ---------- |
989| isBound     | boolean | 是   | 是否绑定。true:绑定;false:不绑定。 |
990| isClose     | boolean | 是   | 是否关闭。true:关闭;false:打开。 |
991| isConnected | boolean | 是   | 是否连接。true:连接;false:断开。 |
992
993## SocketRemoteInfo
994
995Socket的连接信息。
996
997**系统能力**:SystemCapability.Communication.NetStack
998
999| 名称  | 类型   | 必填 | 说明                                                         |
1000| ------- | ------ | ---- | ------------------------------------------------------------ |
1001| address | string | 是   | 本地绑定的ip地址。                                           |
1002| family  | 'IPv4' \| 'IPv6' | 是   | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 |
1003| port    | number | 是   | 端口号,范围0~65535。                                        |
1004| size    | number | 是   | 服务器响应信息的字节长度。                                   |
1005
1006## UDP 错误码说明
1007
1008UDP 其余错误码映射形式为:2301000 + Linux内核错误码。
1009
1010错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
1011
1012## socket.constructMulticastSocketInstance<sup>11+</sup>
1013
1014constructMulticastSocketInstance(): MulticastSocket
1015
1016创建一个MulticastSocket对象。
1017
1018**系统能力**:SystemCapability.Communication.NetStack
1019
1020**返回值:**
1021
1022| 类型                               | 说明                    |
1023| ----------------------------------- | ----------------------------- |
1024| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 |
1025
1026**示例:**
1027
1028```ts
1029import { socket } from '@kit.NetworkKit';
1030let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1031```
1032## MulticastSocket<sup>11+</sup>
1033
1034MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。
1035
1036### addMembership<sup>11+</sup>
1037
1038addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void
1039
1040加入多播组。使用callback方法作为异步方法。
1041
1042> **说明:**
1043> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1044> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
1045
1046**需要权限**:ohos.permission.INTERNET
1047
1048**系统能力**:SystemCapability.Communication.NetStack
1049
1050**参数:**
1051
1052| 参数名             | 类型                           | 必填 | 说明                                       |
1053| ----------------- | ----------------------------- | ---- | ----------------------------------------- |
1054| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
1055| callback          | AsyncCallback\<void\>         |  是  | 回调函数。失败返回错误码、错误信息。                                 |
1056
1057**错误码:**
1058
1059| 错误码ID | 错误信息                 |
1060| ------- | ----------------------- |
1061| 401     | Parameter error.        |
1062| 201     | Permission denied.      |
1063| 2301022 | Invalid argument.       |
1064| 2301088 | Not a socket.           |
1065| 2301098 | Address in use.         |
1066
1067**示例:**
1068
1069```ts
1070import { socket } from '@kit.NetworkKit';
1071
1072let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1073let addr: socket.NetAddress = {
1074  address: '239.255.0.1',
1075  port: 8080
1076}
1077multicast.addMembership(addr, (err: Object) => {
1078  if (err) {
1079    console.log('add membership fail, err: ' + JSON.stringify(err));
1080    return;
1081  }
1082  console.log('add membership success');
1083})
1084```
1085
1086### addMembership<sup>11+</sup>
1087
1088addMembership(multicastAddress: NetAddress): Promise\<void\>
1089
1090加入多播组。使用Promise方法作为异步方法。
1091
1092> **说明:**
1093> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1094> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。
1095
1096**需要权限**:ohos.permission.INTERNET
1097
1098**系统能力**:SystemCapability.Communication.NetStack
1099
1100**参数:**
1101
1102| 参数名             | 类型                           | 必填 | 说明                                           |
1103| ----------------- | ----------------------------- | ---- | --------------------------------------------  |
1104| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。 |
1105
1106**返回值:**
1107
1108| 类型            | 说明                                               |
1109|  -------------- |  -----------------------------------------------  |
1110| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 |
1111
1112**错误码:**
1113
1114| 错误码ID | 错误信息                 |
1115| ------- | ----------------------- |
1116| 401     | Parameter error.        |
1117| 201     | Permission denied.      |
1118| 2301088 | Not a socket.           |
1119| 2301098 | Address in use.         |
1120
1121**示例:**
1122
1123```ts
1124import { socket } from '@kit.NetworkKit';
1125
1126let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1127let addr: socket.NetAddress = {
1128  address: '239.255.0.1',
1129  port: 8080
1130}
1131multicast.addMembership(addr).then(() => {
1132  console.log('addMembership success');
1133}).catch((err: Object) => {
1134  console.log('addMembership fail');
1135});
1136```
1137
1138### dropMembership<sup>11+</sup>
1139
1140dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void
1141
1142退出多播组。使用callback方法作为异步方法。
1143
1144> **说明:**
1145> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1146> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
1147
1148**需要权限**:ohos.permission.INTERNET
1149
1150**系统能力**:SystemCapability.Communication.NetStack
1151
1152**参数:**
1153
1154| 参数名             | 类型                           | 必填 | 说明                                         |
1155| ----------------- | ----------------------------- | ---- | ------------------------------------------- |
1156| multicastAddress  | [NetAddress](#netaddress)     |  是  | 目标地址信息,参考[NetAddress](#netaddress)。   |
1157| callback          | AsyncCallback\<void\>         |  是  | 回调函数。失败返回错误码、错误信息。|
1158
1159**错误码:**
1160
1161| 错误码ID | 错误信息                 |
1162| ------- | ----------------------- |
1163| 401     | Parameter error.        |
1164| 201     | Permission denied.      |
1165| 2301088 | Not a socket.           |
1166| 2301098 | Address in use.         |
1167
1168**示例:**
1169
1170```ts
1171import { socket } from '@kit.NetworkKit';
1172
1173let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1174let addr: socket.NetAddress = {
1175  address: '239.255.0.1',
1176  port: 8080
1177}
1178multicast.dropMembership(addr, (err: Object) => {
1179  if (err) {
1180    console.log('drop membership fail, err: ' + JSON.stringify(err));
1181    return;
1182  }
1183  console.log('drop membership success');
1184})
1185```
1186
1187### dropMembership<sup>11+</sup>
1188
1189dropMembership(multicastAddress: NetAddress): Promise\<void\>
1190
1191退出多播组。使用Promise方法作为异步方法。
1192
1193> **说明:**
1194> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。
1195> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。
1196
1197**需要权限**:ohos.permission.INTERNET
1198
1199**系统能力**:SystemCapability.Communication.NetStack
1200
1201**参数:**
1202
1203| 参数名             | 类型                                   | 必填 | 说明                                           |
1204| ----------------- | ------------------------------------- | ---- | --------------------------------------------  |
1205| multicastAddress  | [NetAddress](#netaddress) |  是  | 目标地址信息,参考[NetAddress](#netaddress)。     |
1206
1207**返回值:**
1208
1209| 类型            | 说明                                              |
1210|  -------------- |  ----------------------------------------------- |
1211| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 |
1212
1213**错误码:**
1214
1215| 错误码ID | 错误信息                 |
1216| ------- | ----------------------- |
1217| 401     | Parameter error.        |
1218| 201     | Permission denied.      |
1219| 2301088 | Not a socket.           |
1220| 2301098 | Address in use.         |
1221
1222**示例:**
1223
1224```ts
1225import { socket } from '@kit.NetworkKit';
1226
1227let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1228let addr: socket.NetAddress = {
1229  address: '239.255.0.1',
1230  port: 8080
1231}
1232multicast.dropMembership(addr).then(() => {
1233  console.log('drop membership success');
1234}).catch((err: Object) => {
1235  console.log('drop membership fail');
1236});
1237```
1238
1239### setMulticastTTL<sup>11+</sup>
1240
1241setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void
1242
1243设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。
1244
1245> **说明:**
1246> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1247> 范围为 0~255,默认值为 1 。
1248> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1249> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1250
1251**系统能力**:SystemCapability.Communication.NetStack
1252
1253**参数:**
1254
1255| 参数名         | 类型                   | 必填 | 说明                         |
1256| ------------- | --------------------- | ---- | ----------------------------- |
1257| ttl           | number                |  是  | ttl设置数值,类型为数字number。 |
1258| callback      | AsyncCallback\<void\> |  是  | 回调函数。失败返回错误码、错误信息。    |
1259
1260**错误码:**
1261
1262| 错误码ID | 错误信息                 |
1263| ------- | ----------------------- |
1264| 401     | Parameter error.        |
1265| 2301022 | Invalid argument.       |
1266| 2301088 | Not a socket.           |
1267
1268**示例:**
1269
1270```ts
1271import { socket } from '@kit.NetworkKit';
1272
1273let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1274let ttl = 8
1275multicast.setMulticastTTL(ttl, (err: Object) => {
1276  if (err) {
1277    console.log('set ttl fail, err: ' + JSON.stringify(err));
1278    return;
1279  }
1280  console.log('set ttl success');
1281})
1282```
1283
1284### setMulticastTTL<sup>11+</sup>
1285
1286setMulticastTTL(ttl: number): Promise\<void\>
1287
1288设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。
1289
1290> **说明:**
1291> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1292> 范围为 0~255,默认值为 1 。
1293> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1294> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1295
1296**系统能力**:SystemCapability.Communication.NetStack
1297
1298**参数:**
1299
1300| 参数名         | 类型                   | 必填 | 说明                           |
1301| ------------- | ---------------------- | ---- | ------------------------------ |
1302| ttl           | number                 |  是  | ttl设置数值,类型为数字Number。 |
1303
1304**返回值:**
1305
1306| 类型            | 说明                                             |
1307|  -------------- |  ---------------------------------------------- |
1308| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 |
1309
1310**错误码:**
1311
1312| 错误码ID | 错误信息                 |
1313| ------- | ----------------------- |
1314| 401     | Parameter error.        |
1315| 2301022 | Invalid argument.       |
1316| 2301088 | Not a socket.           |
1317
1318**示例:**
1319
1320```ts
1321import { socket } from '@kit.NetworkKit';
1322
1323let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1324multicast.setMulticastTTL(8).then(() => {
1325  console.log('set ttl success');
1326}).catch((err: Object) => {
1327  console.log('set ttl failed');
1328});
1329```
1330
1331### getMulticastTTL<sup>11+</sup>
1332
1333getMulticastTTL(callback: AsyncCallback\<number\>): void
1334
1335获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。
1336
1337> **说明:**
1338> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1339> 范围为 0~255,默认值为 1 。
1340> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1341> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1342
1343**系统能力**:SystemCapability.Communication.NetStack
1344
1345**参数:**
1346
1347| 参数名         | 类型                     | 必填 | 说明                         |
1348| ------------- | ----------------------- | ---- | --------------------------- |
1349| callback      | AsyncCallback\<number\> |  是  | 回调函数。失败返回错误码、错误信息。  |
1350
1351**错误码:**
1352
1353| 错误码ID | 错误信息                 |
1354| ------- | ----------------------- |
1355| 401     | Parameter error.        |
1356| 2301088 | Not a socket.           |
1357
1358**示例:**
1359
1360```ts
1361import { socket } from '@kit.NetworkKit';
1362
1363let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1364multicast.getMulticastTTL((err: Object, value: Number) => {
1365  if (err) {
1366    console.log('set ttl fail, err: ' + JSON.stringify(err));
1367    return;
1368  }
1369  console.log('set ttl success, value: ' + JSON.stringify(value));
1370})
1371```
1372
1373### getMulticastTTL<sup>11+</sup>
1374
1375getMulticastTTL(): Promise\<number\>
1376
1377获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。
1378
1379> **说明:**
1380> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。
1381> 范围为 0~255,默认值为 1 。
1382> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。
1383> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1384
1385**系统能力**:SystemCapability.Communication.NetStack
1386
1387**返回值:**
1388
1389| 类型               | 说明                        |
1390| ----------------   | --------------------------- |
1391| Promise\<number\> | 以Promise形式返回当前TTL数值。 |
1392
1393**错误码:**
1394
1395| 错误码ID | 错误信息                |
1396| ------- | ----------------------- |
1397| 401     | Parameter error.        |
1398| 2301088 | Not a socket.           |
1399
1400**示例:**
1401
1402```ts
1403import { socket } from '@kit.NetworkKit';
1404
1405let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1406multicast.getMulticastTTL().then((value: Number) => {
1407  console.log('ttl: ', JSON.stringify(value));
1408}).catch((err: Object) => {
1409  console.log('set ttl failed');
1410});
1411```
1412
1413### setLoopbackMode<sup>11+</sup>
1414
1415setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void
1416
1417设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1418
1419> **说明:**
1420> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1421> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1422> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1423
1424**系统能力**:SystemCapability.Communication.NetStack
1425
1426**参数:**
1427
1428| 参数名         | 类型                  | 必填 | 说明                         |
1429| ------------- | --------------------- | ---- | ---------------------------- |
1430| flag          | boolean               |  是  | ttl设置数值,类型为boolen 。  |
1431| callback      | AsyncCallback\<void\> |  是  | 回调函数。失败返回错误码、错误信息。    |
1432
1433**错误码:**
1434
1435| 错误码ID | 错误信息                 |
1436| ------- | ----------------------- |
1437| 401     | Parameter error.        |
1438| 2301088 | Not a socket.           |
1439
1440**示例:**
1441
1442```ts
1443import { socket } from '@kit.NetworkKit';
1444
1445let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1446multicast.setLoopbackMode(false, (err: Object) => {
1447  if (err) {
1448    console.log('set loopback mode fail, err: ' + JSON.stringify(err));
1449    return;
1450  }
1451  console.log('set loopback mode success');
1452})
1453```
1454
1455### setLoopbackMode<sup>11+</sup>
1456
1457setLoopbackMode(flag: boolean): Promise\<void\>
1458
1459设置多播通信中的环回模式标志位。使用callback方法作为异步方法。
1460
1461> **说明:**
1462> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。
1463> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。
1464> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1465
1466**系统能力**:SystemCapability.Communication.NetStack
1467
1468**参数:**
1469
1470| 参数名         | 类型                   | 必填 | 说明                             |
1471| ------------- | ---------------------- | ---- | -------------------------------- |
1472| flag          | boolean                |  是  | 环回模式标志位,类型为数字boolean。|
1473
1474**返回值:**
1475
1476| 类型            | 说明                                             |
1477|  -------------- |  ---------------------------------------------- |
1478| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 |
1479
1480**错误码:**
1481
1482| 错误码ID | 错误信息                |
1483| ------- | ----------------------- |
1484| 401     | Parameter error.        |
1485| 2301088 | Not a socket.           |
1486
1487**示例:**
1488
1489```ts
1490import { socket } from '@kit.NetworkKit';
1491
1492let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1493multicast.setLoopbackMode(false).then(() => {
1494  console.log('set loopback mode success');
1495}).catch((err: Object) => {
1496  console.log('set loopback mode failed');
1497});
1498```
1499
1500### getLoopbackMode<sup>11+</sup>
1501
1502getLoopbackMode(callback: AsyncCallback\<boolean\>): void
1503
1504获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1505
1506> **说明:**
1507> 用于获取当前环回模式开启或关闭的状态。
1508> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1509> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1510
1511**系统能力**:SystemCapability.Communication.NetStack
1512
1513**参数:**
1514
1515| 参数名         | 类型                     | 必填 | 说明                         |
1516| ------------- | ----------------------- | ---- | --------------------------- |
1517| callback      | AsyncCallback\<number\> |  是  | 回调函数。失败返回错误码、错误信息。  |
1518
1519**错误码:**
1520
1521| 错误码ID | 错误信息                |
1522| ------- | ----------------------- |
1523| 401     | Parameter error.        |
1524| 2301088 | Not a socket.           |
1525
1526**示例:**
1527
1528```ts
1529import { socket } from '@kit.NetworkKit';
1530
1531let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1532multicast.getLoopbackMode((err: Object, value: Boolean) => {
1533  if (err) {
1534    console.log('get loopback mode fail, err: ' + JSON.stringify(err));
1535    return;
1536  }
1537  console.log('get loopback mode success, value: ' + JSON.stringify(value));
1538})
1539```
1540
1541### getLoopbackMode<sup>11+</sup>
1542
1543getLoopbackMode(): Promise\<boolean\>
1544
1545获取多播通信中的环回模式状态。使用Promise方法作为异步方法。
1546
1547> **说明:**
1548> 用于获取当前环回模式开启或关闭的状态。
1549> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。
1550> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。
1551
1552**系统能力**:SystemCapability.Communication.NetStack
1553
1554**返回值:**
1555
1556| 类型                | 说明                        |
1557| ----------------  | --------------------------- |
1558| Promise\<boolean\> | 以Promise形式返回当前TTL数值。 |
1559
1560**错误码:**
1561
1562| 错误码ID | 错误信息                |
1563| ------- | ----------------------- |
1564| 401     | Parameter error.        |
1565| 2301088 | Not a socket.           |
1566
1567**示例:**
1568
1569```ts
1570import { socket } from '@kit.NetworkKit';
1571
1572let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance();
1573multicast.getLoopbackMode().then((value: Boolean) => {
1574  console.log('loopback mode: ', JSON.stringify(value));
1575}).catch((err: Object) => {
1576  console.log('get loopback mode failed');
1577});
1578```
1579
1580## socket.constructTCPSocketInstance<sup>7+</sup>
1581
1582constructTCPSocketInstance(): TCPSocket
1583
1584创建一个TCPSocket对象。
1585
1586**系统能力**:SystemCapability.Communication.NetStack
1587
1588**返回值:**
1589
1590| 类型                               | 说明                    |
1591| --------------------------------- | ---------------------- |
1592| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 |
1593
1594**示例:**
1595
1596```ts
1597import { socket } from '@kit.NetworkKit';
1598let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1599```
1600
1601## TCPSocket
1602
1603TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。
1604
1605### bind
1606
1607bind(address: NetAddress, callback: AsyncCallback\<void\>): void
1608
1609绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用callback方法作为异步方法。
1610
1611> **说明:**
1612> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1613> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1614> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1615
1616**需要权限**:ohos.permission.INTERNET
1617
1618**系统能力**:SystemCapability.Communication.NetStack
1619
1620**参数:**
1621
1622| 参数名   | 类型                               | 必填 | 说明                                                   |
1623| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1624| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1625| callback | AsyncCallback\<void\>              | 是   | 回调函数。失败返回错误、错误信息。                   |
1626
1627**错误码:**
1628
1629| 错误码ID | 错误信息                 |
1630| ------- | ----------------------- |
1631| 401     | Parameter error.        |
1632| 201     | Permission denied.      |
1633
1634**示例:**
1635
1636```ts
1637import { socket } from '@kit.NetworkKit';
1638import { BusinessError } from '@kit.BasicServicesKit';
1639
1640let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1641let bindAddr: socket.NetAddress = {
1642  address: '192.168.xx.xxx',
1643  port: 8080
1644}
1645tcp.bind(bindAddr, (err: BusinessError) => {
1646  if (err) {
1647    console.log('bind fail');
1648    return;
1649  }
1650  console.log('bind success');
1651})
1652```
1653
1654### bind
1655
1656bind(address: NetAddress): Promise\<void\>
1657
1658绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用Promise方法作为异步方法。
1659
1660> **说明:**
1661> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。
1662> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。
1663> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。
1664
1665**需要权限**:ohos.permission.INTERNET
1666
1667**系统能力**:SystemCapability.Communication.NetStack
1668
1669**参数:**
1670
1671| 参数名  | 类型                               | 必填 | 说明                                                   |
1672| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1673| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1674
1675**返回值:**
1676
1677| 类型            | 说明                                                     |
1678| --------------- | ------------------------------------------------------- |
1679| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 |
1680
1681**错误码:**
1682
1683| 错误码ID | 错误信息                 |
1684| ------- | ----------------------- |
1685| 401     | Parameter error.        |
1686| 201     | Permission denied.      |
1687
1688**示例:**
1689
1690```ts
1691import { socket } from '@kit.NetworkKit';
1692import { BusinessError } from '@kit.BasicServicesKit';
1693
1694let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1695let bindAddr: socket.NetAddress = {
1696  address: '192.168.xx.xxx',
1697  port: 8080
1698}
1699tcp.bind(bindAddr).then(() => {
1700  console.log('bind success');
1701}).catch((err: BusinessError) => {
1702  console.log('bind fail');
1703});
1704```
1705
1706### connect
1707
1708connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void
1709
1710连接到指定的IP地址和端口。使用callback方法作为异步方法。
1711
1712> **说明:**
1713> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接
1714
1715**需要权限**:ohos.permission.INTERNET
1716
1717**系统能力**:SystemCapability.Communication.NetStack
1718
1719**参数:**
1720
1721| 参数名   | 类型                                     | 必填 | 说明                                                         |
1722| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1723| options  | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1724| callback | AsyncCallback\<void\>                    | 是   | 回调函数。失败返回错误码、错误信息。                      |
1725
1726**错误码:**
1727
1728| 错误码ID | 错误信息                 |
1729| ------- | ----------------------- |
1730| 401     | Parameter error.        |
1731| 201     | Permission denied.      |
1732| 2301206 | Socks5 failed to connect to the proxy server.  |
1733| 2301207 | Socks5 username or password is invalid.        |
1734| 2301208 | Socks5 failed to connect to the remote server. |
1735| 2301209 | Socks5 failed to negotiate the authentication method. |
1736| 2301210 | Socks5 failed to send the message.             |
1737| 2301211 | Socks5 failed to receive the message.          |
1738| 2301212 | Socks5 serialization error.                    |
1739| 2301213 | Socks5 deserialization error.                  |
1740
1741**示例:**
1742
1743```ts
1744import { socket } from '@kit.NetworkKit';
1745import { BusinessError } from '@kit.BasicServicesKit';
1746
1747let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1748let netAddress: socket.NetAddress = {
1749  address: '192.168.xx.xxx',
1750  port: 8080
1751}
1752let tcpconnectoptions: socket.TCPConnectOptions = {
1753  address: netAddress,
1754  timeout: 6000
1755}
1756tcp.connect(tcpconnectoptions, (err: BusinessError) => {
1757  if (err) {
1758    console.log('connect fail');
1759    return;
1760  }
1761  console.log('connect success');
1762})
1763```
1764
1765**示例(设置socket代理):**
1766
1767```ts
1768import { socket } from '@kit.NetworkKit';
1769import { BusinessError } from '@kit.BasicServicesKit';
1770
1771let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1772let netAddress: socket.NetAddress = {
1773  address: '192.168.xx.xxx',
1774  port: 8080
1775}
1776let socks5Server: socket.NetAddress = {
1777  address: '192.168.xx.xxx',
1778  port: 8080
1779}
1780let tcpconnectoptions: socket.TCPConnectOptions = {
1781  address: netAddress,
1782  timeout: 6000,
1783  proxy: socket.ProxyOptions = {
1784    type : 1,
1785    address: socks5Server,
1786    username: "xxx",
1787    password: "xxx"
1788  }
1789}
1790tcp.connect(tcpconnectoptions, (err: BusinessError) => {
1791  if (err) {
1792    console.log('connect fail');
1793    return;
1794  }
1795  console.log('connect success');
1796})
1797```
1798
1799### connect
1800
1801connect(options: TCPConnectOptions): Promise\<void\>
1802
1803连接到指定的IP地址和端口。使用promise方法作为异步方法。
1804
1805> **说明:**
1806> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。
1807
1808**需要权限**:ohos.permission.INTERNET
1809
1810**系统能力**:SystemCapability.Communication.NetStack
1811
1812**参数:**
1813
1814| 参数名  | 类型                                     | 必填 | 说明                                                         |
1815| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
1816| options | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
1817
1818**返回值:**
1819
1820| 类型            | 说明                                                       |
1821| -------------- | --------------------------------------------------------- |
1822| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 |
1823
1824**错误码:**
1825
1826| 错误码ID | 错误信息                 |
1827| ------- | ----------------------- |
1828| 401     | Parameter error.        |
1829| 201     | Permission denied.      |
1830| 2301206 | Socks5 failed to connect to the proxy server.  |
1831| 2301207 | Socks5 username or password is invalid.        |
1832| 2301208 | Socks5 failed to connect to the remote server. |
1833| 2301209 | Socks5 failed to negotiate the authentication method. |
1834| 2301210 | Socks5 failed to send the message.             |
1835| 2301211 | Socks5 failed to receive the message.          |
1836| 2301212 | Socks5 serialization error.                    |
1837| 2301213 | Socks5 deserialization error.                  |
1838
1839**示例:**
1840
1841```ts
1842import { socket } from '@kit.NetworkKit';
1843import { BusinessError } from '@kit.BasicServicesKit';
1844
1845let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1846let netAddress: socket.NetAddress = {
1847  address: '192.168.xx.xxx',
1848  port: 8080
1849}
1850let tcpconnectoptions: socket.TCPConnectOptions = {
1851  address: netAddress,
1852  timeout: 6000
1853}
1854tcp.connect(tcpconnectoptions).then(() => {
1855  console.log('connect success')
1856}).catch((err: BusinessError) => {
1857  console.log('connect fail');
1858});
1859```
1860
1861**示例(设置socket代理):**
1862
1863```ts
1864import { socket } from '@kit.NetworkKit';
1865import { BusinessError } from '@kit.BasicServicesKit';
1866
1867let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1868let netAddress: socket.NetAddress = {
1869  address: '192.168.xx.xxx',
1870  port: 8080
1871}
1872let socks5Server: socket.NetAddress = {
1873  address: '192.168.xx.xxx',
1874  port: 8080
1875}
1876let tcpconnectoptions: socket.TCPConnectOptions = {
1877  address: netAddress,
1878  timeout: 6000,
1879  proxy: socket.ProxyOptions = {
1880    type : 1,
1881    address: socks5Server,
1882    username: "xxx",
1883    password: "xxx"
1884  }
1885}
1886tcp.connect(tcpconnectoptions).then(() => {
1887  console.log('connect success')
1888}).catch((err: BusinessError) => {
1889  console.log('connect fail');
1890});
1891```
1892
1893### send
1894
1895send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
1896
1897通过TCPSocket连接发送数据。使用callback方式作为异步方法。
1898
1899> **说明:**
1900> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
1901
1902**需要权限**:ohos.permission.INTERNET
1903
1904**系统能力**:SystemCapability.Communication.NetStack
1905
1906**参数:**
1907
1908| 参数名   | 类型                                    | 必填 | 说明                                                         |
1909| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1910| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
1911| callback | AsyncCallback\<void\>                   | 是   | 回调函数。失败返回错误码、错误信息。                           |
1912
1913**错误码:**
1914
1915| 错误码ID | 错误信息                 |
1916| ------- | ----------------------- |
1917| 401     | Parameter error.        |
1918| 201     | Permission denied.      |
1919
1920**示例:**
1921
1922```ts
1923import { socket } from '@kit.NetworkKit';
1924import { BusinessError } from '@kit.BasicServicesKit';
1925
1926let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1927let netAddress: socket.NetAddress = {
1928  address: '192.168.xx.xxx',
1929  port: 8080
1930}
1931let tcpconnectoptions: socket.TCPConnectOptions = {
1932  address: netAddress,
1933  timeout: 6000
1934}
1935tcp.connect(tcpconnectoptions, () => {
1936  console.log('connect success');
1937  let tcpSendOptions: socket.TCPSendOptions = {
1938    data: 'Hello, server!'
1939  }
1940  tcp.send(tcpSendOptions, (err: BusinessError) => {
1941    if (err) {
1942      console.log('send fail');
1943      return;
1944    }
1945    console.log('send success');
1946  })
1947})
1948```
1949
1950### send
1951
1952send(options: TCPSendOptions): Promise\<void\>
1953
1954通过TCPSocket连接发送数据。使用Promise方式作为异步方法。
1955
1956> **说明:**
1957> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。
1958
1959**需要权限**:ohos.permission.INTERNET
1960
1961**系统能力**:SystemCapability.Communication.NetStack
1962
1963**参数:**
1964
1965| 参数名  | 类型                                    | 必填 | 说明                                                         |
1966| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
1967| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
1968
1969**返回值:**
1970
1971| 类型            | 说明                                               |
1972| -------------- | ------------------------------------------------- |
1973| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 |
1974
1975**错误码:**
1976
1977| 错误码ID | 错误信息                 |
1978| ------- | ----------------------- |
1979| 401     | Parameter error.        |
1980| 201     | Permission denied.      |
1981
1982**示例:**
1983
1984```ts
1985import { socket } from '@kit.NetworkKit';
1986import { BusinessError } from '@kit.BasicServicesKit';
1987
1988let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
1989let netAddress: socket.NetAddress = {
1990  address: '192.168.xx.xxx',
1991  port: 8080
1992}
1993let tcpconnectoptions: socket.TCPConnectOptions = {
1994  address: netAddress,
1995  timeout: 6000
1996}
1997tcp.connect(tcpconnectoptions, () => {
1998  console.log('connect success');
1999  let tcpSendOptions: socket.TCPSendOptions = {
2000    data: 'Hello, server!'
2001  }
2002  tcp.send(tcpSendOptions).then(() => {
2003    console.log('send success');
2004  }).catch((err: BusinessError) => {
2005    console.log('send fail');
2006  });
2007})
2008```
2009
2010### close
2011
2012close(callback: AsyncCallback\<void\>): void
2013
2014关闭TCPSocket连接。使用callback方式作为异步方法。
2015
2016**需要权限**:ohos.permission.INTERNET
2017
2018**系统能力**:SystemCapability.Communication.NetStack
2019
2020**参数:**
2021
2022| 参数名   | 类型                  | 必填 | 说明       |
2023| -------- | --------------------- | ---- | ---------- |
2024| callback | AsyncCallback\<void\> | 是   | 回调函数。失败返回错误码、错误信息。 |
2025
2026**错误码:**
2027
2028| 错误码ID | 错误信息                 |
2029| ------- | ----------------------- |
2030| 201     | Permission denied.      |
2031
2032**示例:**
2033
2034```ts
2035import { socket } from '@kit.NetworkKit';
2036import { BusinessError } from '@kit.BasicServicesKit';
2037
2038let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2039
2040tcp.close((err: BusinessError) => {
2041  if (err) {
2042    console.log('close fail');
2043    return;
2044  }
2045  console.log('close success');
2046})
2047```
2048
2049### close
2050
2051close(): Promise\<void\>
2052
2053关闭TCPSocket连接。使用Promise方式作为异步方法。
2054
2055**需要权限**:ohos.permission.INTERNET
2056
2057**系统能力**:SystemCapability.Communication.NetStack
2058
2059**返回值:**
2060
2061| 类型            | 说明                                       |
2062| -------------- | ----------------------------------------- |
2063| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 |
2064
2065**错误码:**
2066
2067| 错误码ID | 错误信息                 |
2068| ------- | ----------------------- |
2069| 201     | Permission denied.      |
2070
2071**示例:**
2072
2073```ts
2074import { socket } from '@kit.NetworkKit';
2075
2076let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2077
2078tcp.close().then(() => {
2079  console.log('close success');
2080}).catch((err: BusinessError) => {
2081  console.log('close fail');
2082});
2083```
2084
2085### getRemoteAddress
2086
2087getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
2088
2089获取对端Socket地址。使用callback方式作为异步方法。
2090
2091> **说明:**
2092> connect方法调用成功后,才可调用此方法。
2093
2094**需要权限**:ohos.permission.INTERNET
2095
2096**系统能力**:SystemCapability.Communication.NetStack
2097
2098**参数:**
2099
2100| 参数名   | 类型                                              | 必填 | 说明       |
2101| -------- | ------------------------------------------------- | ---- | ---------- |
2102| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 |
2103
2104**错误码:**
2105
2106| 错误码ID | 错误信息                 |
2107| ------- | ----------------------- |
2108| 201     | Permission denied.      |
2109
2110**示例:**
2111
2112```ts
2113import { socket } from '@kit.NetworkKit';
2114import { BusinessError } from '@kit.BasicServicesKit';
2115
2116let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2117let netAddress: socket.NetAddress = {
2118  address: '192.168.xx.xxx',
2119  port: 8080
2120}
2121let tcpconnectoptions: socket.TCPConnectOptions = {
2122  address: netAddress,
2123  timeout: 6000
2124}
2125tcp.connect(tcpconnectoptions, () => {
2126  console.log('connect success');
2127  tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
2128    if (err) {
2129      console.log('getRemoteAddressfail');
2130      return;
2131    }
2132    console.log('getRemoteAddresssuccess:' + JSON.stringify(data));
2133  })
2134});
2135```
2136
2137### getRemoteAddress
2138
2139getRemoteAddress(): Promise\<NetAddress\>
2140
2141获取对端Socket地址。使用Promise方式作为异步方法。
2142
2143> **说明:**
2144> connect方法调用成功后,才可调用此方法。
2145
2146**需要权限**:ohos.permission.INTERNET
2147
2148**系统能力**:SystemCapability.Communication.NetStack
2149
2150**返回值:**
2151
2152| 类型                                        | 说明                                        |
2153| ------------------------------------------ | ------------------------------------------ |
2154| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 |
2155
2156**错误码:**
2157
2158| 错误码ID | 错误信息                 |
2159| ------- | ----------------------- |
2160| 201     | Permission denied.      |
2161
2162**示例:**
2163
2164```ts
2165import { socket } from '@kit.NetworkKit';
2166import { BusinessError } from '@kit.BasicServicesKit';
2167
2168let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2169let netAddress: socket.NetAddress = {
2170  address: '192.168.xx.xxx',
2171  port: 8080
2172}
2173let tcpconnectoptions: socket.TCPConnectOptions = {
2174  address: netAddress,
2175  timeout: 6000
2176}
2177tcp.connect(tcpconnectoptions).then(() => {
2178  console.log('connect success');
2179  tcp.getRemoteAddress().then(() => {
2180    console.log('getRemoteAddress success');
2181  }).catch((err: BusinessError) => {
2182    console.log('getRemoteAddressfail');
2183  });
2184}).catch((err: BusinessError) => {
2185  console.log('connect fail');
2186});
2187```
2188
2189### getState
2190
2191getState(callback: AsyncCallback\<SocketStateBase\>): void
2192
2193获取TCPSocket状态。使用callback方式作为异步方法。
2194
2195> **说明:**
2196> bind或connect方法调用成功后,才可调用此方法。
2197
2198**需要权限**:ohos.permission.INTERNET
2199
2200**系统能力**:SystemCapability.Communication.NetStack
2201
2202**参数:**
2203
2204| 参数名   | 类型                                                   | 必填 | 说明       |
2205| -------- | ------------------------------------------------------ | ---- | ---------- |
2206| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 |
2207
2208**错误码:**
2209
2210| 错误码ID | 错误信息                 |
2211| ------- | ----------------------- |
2212| 201     | Permission denied.      |
2213
2214**示例:**
2215
2216```ts
2217import { socket } from '@kit.NetworkKit';
2218import { BusinessError } from '@kit.BasicServicesKit';
2219
2220let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2221let netAddress: socket.NetAddress = {
2222  address: '192.168.xx.xxx',
2223  port: 8080
2224}
2225let tcpconnectoptions: socket.TCPConnectOptions = {
2226  address: netAddress,
2227  timeout: 6000
2228}
2229tcp.connect(tcpconnectoptions, () => {
2230  console.log('connect success');
2231  tcp.getState((err: BusinessError, data: socket.SocketStateBase) => {
2232    if (err) {
2233      console.log('getState fail');
2234      return;
2235    }
2236    console.log('getState success:' + JSON.stringify(data));
2237  });
2238});
2239```
2240
2241### getState
2242
2243getState(): Promise\<SocketStateBase\>
2244
2245获取TCPSocket状态。使用Promise方式作为异步方法。
2246
2247> **说明:**
2248> bind或connect方法调用成功后,才可调用此方法。
2249
2250**需要权限**:ohos.permission.INTERNET
2251
2252**系统能力**:SystemCapability.Communication.NetStack
2253
2254**返回值:**
2255
2256| 类型                                             | 说明                                       |
2257| ----------------------------------------------- | ----------------------------------------- |
2258| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 |
2259
2260**错误码:**
2261
2262| 错误码ID | 错误信息                 |
2263| ------- | ----------------------- |
2264| 201     | Permission denied.      |
2265
2266**示例:**
2267
2268```ts
2269import { socket } from '@kit.NetworkKit';
2270import { BusinessError } from '@kit.BasicServicesKit';
2271
2272let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2273let netAddress: socket.NetAddress = {
2274  address: '192.168.xx.xxx',
2275  port: 8080
2276}
2277let tcpconnectoptions: socket.TCPConnectOptions = {
2278  address: netAddress,
2279  timeout: 6000
2280}
2281tcp.connect(tcpconnectoptions).then(() => {
2282  console.log('connect success');
2283  tcp.getState().then(() => {
2284    console.log('getState success');
2285  }).catch((err: BusinessError) => {
2286    console.log('getState fail');
2287  });
2288}).catch((err: BusinessError) => {
2289  console.log('connect fail');
2290});
2291```
2292
2293### getSocketFd<sup>10+</sup>
2294
2295getSocketFd(callback: AsyncCallback\<number\>): void
2296
2297获取TCPSocket的文件描述符。使用callback方式作为异步方法。
2298
2299> **说明:**
2300> bind或connect方法调用成功后,才可调用此方法。
2301
2302**系统能力**:SystemCapability.Communication.NetStack
2303
2304**参数:**
2305
2306| 参数名   | 类型                                                   | 必填 | 说明       |
2307| -------- | ------------------------------------------------------ | ---- | ---------- |
2308| callback | AsyncCallback\<number\> | 是   | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 |
2309
2310**示例:**
2311
2312```ts
2313import { socket } from '@kit.NetworkKit';
2314import { BusinessError } from '@kit.BasicServicesKit';
2315
2316let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2317let bindAddr: socket.NetAddress = {
2318  address: '0.0.0.0'
2319}
2320tcp.bind(bindAddr)
2321let netAddress: socket.NetAddress = {
2322  address: '192.168.xx.xxx',
2323  port: 8080
2324}
2325let tcpconnectoptions: socket.TCPConnectOptions = {
2326  address: netAddress,
2327  timeout: 6000
2328}
2329tcp.connect(tcpconnectoptions)
2330tcp.getSocketFd((err: BusinessError, data: number) => {
2331  console.info("getSocketFd failed: " + err);
2332  console.info("tunenlfd: " + data);
2333})
2334```
2335### getSocketFd<sup>10+</sup>
2336
2337getSocketFd(): Promise\<number\>
2338
2339获取TCPSocket的文件描述符。使用Promise方式作为异步方法。
2340
2341> **说明:**
2342> bind或connect方法调用成功后,才可调用此方法。
2343
2344**系统能力**:SystemCapability.Communication.NetStack
2345
2346**返回值:**
2347
2348| 类型                                             | 说明                                       |
2349| ----------------------------------------------- | ----------------------------------------- |
2350| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
2351
2352**示例:**
2353
2354```ts
2355import { socket } from '@kit.NetworkKit';
2356import { BusinessError } from '@kit.BasicServicesKit';
2357
2358let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2359let bindAddr: socket.NetAddress = {
2360  address: '0.0.0.0'
2361}
2362tcp.bind(bindAddr)
2363let netAddress: socket.NetAddress = {
2364  address: '192.168.xx.xxx',
2365  port: 8080
2366}
2367let tcpconnectoptions: socket.TCPConnectOptions = {
2368  address: netAddress,
2369  timeout: 6000
2370}
2371tcp.connect(tcpconnectoptions)
2372tcp.getSocketFd().then((data: number) => {
2373  console.info("tunenlfd: " + data);
2374})
2375```
2376
2377### setExtraOptions
2378
2379setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
2380
2381设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
2382
2383> **说明:**
2384> bind或connect方法调用成功后,才可调用此方法。
2385
2386**需要权限**:ohos.permission.INTERNET
2387
2388**系统能力**:SystemCapability.Communication.NetStack
2389
2390**参数:**
2391
2392| 参数名   | 类型                                      | 必填 | 说明                                                         |
2393| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2394| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2395| callback | AsyncCallback\<void\>                     | 是   | 回调函数。失败时返回错误码、错误信息。               |
2396
2397**错误码:**
2398
2399| 错误码ID | 错误信息                 |
2400| ------- | ----------------------- |
2401| 401     | Parameter error.        |
2402| 201     | Permission denied.      |
2403
2404**示例:**
2405
2406```ts
2407import { socket } from '@kit.NetworkKit';
2408import { BusinessError } from '@kit.BasicServicesKit';
2409
2410let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2411let netAddress: socket.NetAddress = {
2412  address: '192.168.xx.xxx',
2413  port: 8080
2414}
2415let tcpconnectoptions: socket.TCPConnectOptions = {
2416  address: netAddress,
2417  timeout: 6000
2418}
2419
2420interface SocketLinger {
2421  on: boolean;
2422  linger: number;
2423}
2424
2425tcp.connect(tcpconnectoptions, () => {
2426  console.log('connect success');
2427  let tcpExtraOptions: socket.TCPExtraOptions = {
2428    keepAlive: true,
2429    OOBInline: true,
2430    TCPNoDelay: true,
2431    socketLinger: { on: true, linger: 10 } as SocketLinger,
2432    receiveBufferSize: 1000,
2433    sendBufferSize: 1000,
2434    reuseAddress: true,
2435    socketTimeout: 3000
2436  }
2437  tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
2438    if (err) {
2439      console.log('setExtraOptions fail');
2440      return;
2441    }
2442    console.log('setExtraOptions success');
2443  });
2444});
2445```
2446
2447### setExtraOptions
2448
2449setExtraOptions(options: TCPExtraOptions): Promise\<void\>
2450
2451设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
2452
2453> **说明:**
2454> bind或connect方法调用成功后,才可调用此方法。
2455
2456**需要权限**:ohos.permission.INTERNET
2457
2458**系统能力**:SystemCapability.Communication.NetStack
2459
2460**参数:**
2461
2462| 参数名  | 类型                                      | 必填 | 说明                                                         |
2463| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
2464| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
2465
2466**返回值:**
2467
2468| 类型            | 说明                                                 |
2469| -------------- | --------------------------------------------------- |
2470| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 |
2471
2472**错误码:**
2473
2474| 错误码ID | 错误信息                 |
2475| ------- | ----------------------- |
2476| 401     | Parameter error.        |
2477| 201     | Permission denied.      |
2478
2479**示例:**
2480
2481```ts
2482import { socket } from '@kit.NetworkKit';
2483import { BusinessError } from '@kit.BasicServicesKit';
2484
2485let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2486let netAddress: socket.NetAddress = {
2487  address: '192.168.xx.xxx',
2488  port: 8080
2489}
2490let tcpconnectoptions: socket.TCPConnectOptions = {
2491  address: netAddress,
2492  timeout: 6000
2493}
2494
2495interface SocketLinger {
2496  on: boolean;
2497  linger: number;
2498}
2499
2500tcp.connect(tcpconnectoptions, () => {
2501  console.log('connect success');
2502  let tcpExtraOptions: socket.TCPExtraOptions = {
2503    keepAlive: true,
2504    OOBInline: true,
2505    TCPNoDelay: true,
2506    socketLinger: { on: true, linger: 10 } as SocketLinger,
2507    receiveBufferSize: 1000,
2508    sendBufferSize: 1000,
2509    reuseAddress: true,
2510    socketTimeout: 3000
2511  }
2512  tcp.setExtraOptions(tcpExtraOptions).then(() => {
2513    console.log('setExtraOptions success');
2514  }).catch((err: BusinessError) => {
2515    console.log('setExtraOptions fail');
2516  });
2517});
2518```
2519
2520### getLocalAddress<sup>12+</sup>
2521
2522getLocalAddress(): Promise\<NetAddress\>
2523
2524获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。
2525
2526> **说明:**
2527> bind方法调用成功后,才可调用此方法。
2528
2529**系统能力**:SystemCapability.Communication.NetStack
2530
2531**返回值:**
2532
2533| 类型            | 说明                                                 |
2534|  -------------- |  --------------------------------------------------- |
2535| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
2536
2537**错误码:**
2538
2539| 错误码ID | 错误信息                                    |
2540| -------- | ------------------------------------------- |
2541| 2300002  | System internal error.                      |
2542| 2301009  | Bad file descriptor.                            |
2543| 2303188  | Socket operation on non-socket. |
2544
2545**示例:**
2546
2547```ts
2548import { socket } from '@kit.NetworkKit';
2549import { BusinessError } from '@kit.BasicServicesKit';
2550
2551let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2552let bindAddr: socket.NetAddress = {
2553  address: '192.168.xx.xxx',
2554  family: 1,
2555  port: 8080
2556}
2557tcp.bind(bindAddr).then(() => {
2558  tcp.getLocalAddress().then((localAddress: socket.NetAddress) => {
2559    console.info("SUCCESS! Address:" + JSON.stringify(localAddress));
2560  }).catch((err: BusinessError) => {
2561    console.error("FAILED! Error:" + JSON.stringify(err));
2562  })
2563}).catch((err: BusinessError) => {
2564  console.error('bind fail');
2565});
2566```
2567
2568### on('message')
2569
2570on(type: 'message', callback: Callback<SocketMessageInfo\>): void
2571
2572订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2573
2574**系统能力**:SystemCapability.Communication.NetStack
2575
2576**参数:**
2577
2578| 参数名   | 类型                                                         | 必填 | 说明                                      |
2579| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2580| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
2581| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。返回TCPSocket连接信息。                          |
2582
2583**示例:**
2584
2585```ts
2586import { socket } from '@kit.NetworkKit';
2587import { BusinessError } from '@kit.BasicServicesKit';
2588
2589let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2590let messageView = '';
2591tcp.on('message', (value: socket.SocketMessageInfo) => {
2592  for (let i: number = 0; i < value.message.byteLength; i++) {
2593    let uint8Array = new Uint8Array(value.message)
2594    let messages = uint8Array[i]
2595    let message = String.fromCharCode(messages);
2596    messageView += message;
2597  }
2598  console.log('on message message: ' + JSON.stringify(messageView));
2599  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2600});
2601```
2602
2603### off('message')
2604
2605off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
2606
2607取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
2608
2609**系统能力**:SystemCapability.Communication.NetStack
2610
2611**参数:**
2612
2613| 参数名   | 类型                                                         | 必填 | 说明                                      |
2614| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
2615| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
2616| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。取消订阅TCPSocket连接的接收消息事件时触发回调函数。                             |
2617
2618**示例:**
2619
2620```ts
2621import { socket } from '@kit.NetworkKit';
2622import { BusinessError } from '@kit.BasicServicesKit';
2623
2624let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2625let messageView = '';
2626let callback = (value: socket.SocketMessageInfo) => {
2627  for (let i: number = 0; i < value.message.byteLength; i++) {
2628    let uint8Array = new Uint8Array(value.message)
2629    let messages = uint8Array[i]
2630    let message = String.fromCharCode(messages);
2631    messageView += message;
2632  }
2633  console.log('on message message: ' + JSON.stringify(messageView));
2634  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
2635}
2636tcp.on('message', callback);
2637// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2638tcp.off('message', callback);
2639tcp.off('message');
2640```
2641
2642### on('connect' | 'close')
2643
2644on(type: 'connect' | 'close', callback: Callback\<void\>): void
2645
2646订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2647
2648**系统能力**:SystemCapability.Communication.NetStack
2649
2650**参数:**
2651
2652| 参数名   | 类型             | 必填 | 说明                                                         |
2653| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2654| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2655| callback | Callback\<void\> | 是   | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。            |
2656
2657**示例:**
2658
2659```ts
2660import { socket } from '@kit.NetworkKit';
2661import { BusinessError } from '@kit.BasicServicesKit';
2662
2663let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2664tcp.on('connect', () => {
2665  console.log("on connect success")
2666});
2667tcp.on('close', () => {
2668  console.log("on close success")
2669});
2670```
2671
2672### off('connect' | 'close')
2673
2674off(type: 'connect' | 'close', callback?: Callback\<void\>): void
2675
2676取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
2677
2678**系统能力**:SystemCapability.Communication.NetStack
2679
2680**参数:**
2681
2682| 参数名   | 类型             | 必填 | 说明                                                         |
2683| -------- | ---------------- | ---- | ------------------------------------------------------------ |
2684| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
2685| callback | Callback\<void\> | 否   | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。                        |
2686
2687**示例:**
2688
2689```ts
2690import { socket } from '@kit.NetworkKit';
2691import { BusinessError } from '@kit.BasicServicesKit';
2692
2693let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2694let callback1 = () => {
2695  console.log("on connect success");
2696}
2697tcp.on('connect', callback1);
2698// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2699tcp.off('connect', callback1);
2700tcp.off('connect');
2701let callback2 = () => {
2702  console.log("on close success");
2703}
2704tcp.on('close', callback2);
2705// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2706tcp.off('close', callback2);
2707tcp.off('close');
2708```
2709
2710### on('error')
2711
2712on(type: 'error', callback: ErrorCallback): void
2713
2714订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2715
2716**系统能力**:SystemCapability.Communication.NetStack
2717
2718**参数:**
2719
2720| 参数名   | 类型          | 必填 | 说明                                 |
2721| -------- | ------------- | ---- | ------------------------------------ |
2722| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2723| callback | ErrorCallback | 是   | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。                           |
2724
2725**示例:**
2726
2727```ts
2728import { socket } from '@kit.NetworkKit';
2729import { BusinessError } from '@kit.BasicServicesKit';
2730
2731let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2732tcp.on('error', (err: BusinessError) => {
2733  console.log("on error, err:" + JSON.stringify(err))
2734});
2735```
2736
2737### off('error')
2738
2739off(type: 'error', callback?: ErrorCallback): void
2740
2741取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
2742
2743**系统能力**:SystemCapability.Communication.NetStack
2744
2745**参数:**
2746
2747| 参数名   | 类型          | 必填 | 说明                                 |
2748| -------- | ------------- | ---- | ------------------------------------ |
2749| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2750| callback | ErrorCallback | 否   | 回调函数。TCPSocket连接取消订阅的某类error事件触发时调用回调函数。                           |
2751
2752**示例:**
2753
2754```ts
2755import { socket } from '@kit.NetworkKit';
2756import { BusinessError } from '@kit.BasicServicesKit';
2757
2758let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
2759let callback = (err: BusinessError) => {
2760  console.log("on error, err:" + JSON.stringify(err));
2761}
2762tcp.on('error', callback);
2763// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2764tcp.off('error', callback);
2765tcp.off('error');
2766```
2767
2768## TCPConnectOptions
2769
2770TCPSocket连接的参数。
2771
2772**系统能力**:SystemCapability.Communication.NetStack
2773
2774| 名称  | 类型                               | 必填 | 说明                       |
2775| ------- | ---------------------------------- | ---- | -------------------------- |
2776| address | [NetAddress](#netaddress) | 是   | 绑定的地址以及端口。       |
2777| timeout | number                             | 否   | 超时时间,单位毫秒(ms)。 |
2778| proxy<sup>18+</sup>   | [ProxyOptions](#proxyoptions18) | 否   | 使用的代理信息,默认不使用代理。 |
2779
2780## TCPSendOptions
2781
2782TCPSocket发送请求的参数。
2783
2784**系统能力**:SystemCapability.Communication.NetStack
2785
2786| 名称   | 类型   | 必填 | 说明                                                         |
2787| -------- | ------ | ---- | ------------------------------------------------------------ |
2788| data     | string\| ArrayBuffer  | 是   | 发送的数据。                                                 |
2789| encoding | string | 否   | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 |
2790
2791## TCPExtraOptions
2792
2793TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。
2794
2795**系统能力**:SystemCapability.Communication.NetStack
2796
2797| 名称            | 类型    | 必填 | 说明                                                         |
2798| ----------------- | ------- | ---- | ------------------------------------------------------------ |
2799| keepAlive         | boolean | 否   | 是否保持连接。默认为false。true:保持连接;false:断开连接。                                  |
2800| OOBInline         | boolean | 否   | 是否为OOB内联。默认为false。true:是OOB内联;false:不是OOB内联。                                 |
2801| TCPNoDelay        | boolean | 否   | TCPSocket连接是否无时延。默认为false。true:无时延;false:有时延。                       |
2802| socketLinger      | \{on:boolean, linger:number\}  | 否   | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 |
2803
2804## socket.constructTCPSocketServerInstance<sup>10+</sup>
2805
2806constructTCPSocketServerInstance(): TCPSocketServer
2807
2808创建一个TCPSocketServer对象。
2809
2810**系统能力**:SystemCapability.Communication.NetStack
2811
2812**返回值:**
2813
2814| 类型                                | 说明                          |
2815|  ---------------------------------- |  ---------------------------- |
2816| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 |
2817
2818**示例:**
2819
2820```ts
2821import { socket } from '@kit.NetworkKit';
2822let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2823```
2824
2825## TCPSocketServer<sup>10+</sup>
2826
2827TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。
2828
2829### listen<sup>10+</sup>
2830
2831listen(address: NetAddress, callback: AsyncCallback\<void\>): void
2832
2833绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。
2834
2835> **说明:**
2836> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2837
2838**需要权限**:ohos.permission.INTERNET
2839
2840**系统能力**:SystemCapability.Communication.NetStack
2841
2842**参数:**
2843
2844| 参数名   | 类型                      | 必填 | 说明                                          |
2845| -------- | ------------------------- | ---- | --------------------------------------------- |
2846| address  | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2847| callback | AsyncCallback\<void\>     | 是   | 回调函数。失败时返回错误码、错误信息。    |
2848
2849**错误码:**
2850
2851| 错误码ID | 错误信息                                    |
2852| -------- | ------------------------------------------- |
2853| 401      | Parameter error.                            |
2854| 201      | Permission denied.                          |
2855| 2300002  | System internal error.                      |
2856| 2303109  | Bad file number.                            |
2857| 2303111  | Resource temporarily unavailable. Try again.|
2858| 2303198  | Address already in use.                     |
2859| 2303199  | Cannot assign requested address.            |
2860
2861**示例:**
2862
2863```ts
2864import { socket } from '@kit.NetworkKit';
2865import { BusinessError } from '@kit.BasicServicesKit';
2866
2867let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2868let listenAddr: socket.NetAddress = {
2869  address:  '192.168.xx.xxx',
2870  port: 8080,
2871  family: 1
2872}
2873tcpServer.listen(listenAddr, (err: BusinessError) => {
2874  if (err) {
2875    console.log("listen fail");
2876    return;
2877  }
2878  console.log("listen success");
2879})
2880```
2881
2882### listen<sup>10+</sup>
2883
2884listen(address: NetAddress): Promise\<void\>
2885
2886绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
2887
2888> **说明:**
2889> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。
2890
2891**需要权限**:ohos.permission.INTERNET
2892
2893**系统能力**:SystemCapability.Communication.NetStack
2894
2895**参数:**
2896
2897| 参数名  | 类型                      | 必填 | 说明                                          |
2898| ------- | ------------------------- | ---- | --------------------------------------------- |
2899| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
2900
2901**返回值:**
2902
2903| 类型            | 说明                                                         |
2904|  -------------- |  ----------------------------------------------------------- |
2905| Promise\<void\> | 以Promise形式返回, 成功返回空,失败返回错误码错误信息。|
2906
2907**错误码:**
2908
2909| 错误码ID | 错误信息                                    |
2910| -------- | ------------------------------------------- |
2911| 401      | Parameter error.                            |
2912| 201      | Permission denied.                          |
2913| 2300002  | System internal error.                      |
2914| 2303109  | Bad file number.                            |
2915| 2303111  | Resource temporarily unavailable. Try again.|
2916| 2303198  | Address already in use.                     |
2917| 2303199  | Cannot assign requested address.            |
2918
2919**示例:**
2920
2921```ts
2922import { socket } from '@kit.NetworkKit';
2923import { BusinessError } from '@kit.BasicServicesKit';
2924
2925let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2926let listenAddr: socket.NetAddress = {
2927  address:  '192.168.xx.xxx',
2928  port: 8080,
2929  family: 1
2930}
2931tcpServer.listen(listenAddr).then(() => {
2932  console.log('listen success');
2933}).catch((err: BusinessError) => {
2934  console.log('listen fail');
2935});
2936```
2937
2938### getState<sup>10+</sup>
2939
2940getState(callback: AsyncCallback\<SocketStateBase\>): void
2941
2942获取TCPSocketServer状态。使用callback方式作为异步方法。
2943
2944> **说明:**
2945> listen方法调用成功后,才可调用此方法。
2946
2947**需要权限**:ohos.permission.INTERNET
2948
2949**系统能力**:SystemCapability.Communication.NetStack
2950
2951**参数:**
2952
2953| 参数名   | 类型                                               | 必填 | 说明       |
2954| -------- | -------------------------------------------------- | ---- | ---------- |
2955| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
2956
2957**错误码:**
2958
2959| 错误码ID | 错误信息                        |
2960| -------- | ------------------------------- |
2961| 401      | Parameter error.                |
2962| 201      | Permission denied.              |
2963| 2300002  | System internal error.          |
2964| 2303188  | Socket operation on non-socket. |
2965
2966**示例:**
2967
2968```ts
2969import { socket } from '@kit.NetworkKit';
2970import { BusinessError } from '@kit.BasicServicesKit';
2971
2972let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
2973let listenAddr: socket.NetAddress = {
2974  address:  '192.168.xx.xxx',
2975  port: 8080,
2976  family: 1
2977}
2978tcpServer.listen(listenAddr, (err: BusinessError) => {
2979  if (err) {
2980    console.log("listen fail");
2981    return;
2982  }
2983  console.log("listen success");
2984})
2985tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
2986  if (err) {
2987    console.log('getState fail');
2988    return;
2989  }
2990  console.log('getState success:' + JSON.stringify(data));
2991})
2992```
2993
2994### getState<sup>10+</sup>
2995
2996getState(): Promise\<SocketStateBase\>
2997
2998获取TCPSocketServer状态。使用Promise方式作为异步方法。
2999
3000> **说明:**
3001> listen方法调用成功后,才可调用此方法。
3002
3003**需要权限**:ohos.permission.INTERNET
3004
3005**系统能力**:SystemCapability.Communication.NetStack
3006
3007**返回值:**
3008
3009| 类型                                         | 说明                                       |
3010|  ------------------------------------------- |  ----------------------------------------- |
3011| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 |
3012
3013**错误码:**
3014
3015| 错误码ID | 错误信息                        |
3016| -------- | ------------------------------- |
3017| 201      | Permission denied.              |
3018| 2300002  | System internal error.          |
3019| 2303188  | Socket operation on non-socket. |
3020
3021**示例:**
3022
3023```ts
3024import { socket } from '@kit.NetworkKit';
3025import { BusinessError } from '@kit.BasicServicesKit';
3026
3027let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3028let listenAddr: socket.NetAddress = {
3029  address:  '192.168.xx.xxx',
3030  port: 8080,
3031  family: 1
3032}
3033tcpServer.listen(listenAddr, (err: BusinessError) => {
3034  if (err) {
3035    console.log("listen fail");
3036    return;
3037  }
3038  console.log("listen success");
3039})
3040tcpServer.getState().then((data: socket.SocketStateBase) => {
3041  console.log('getState success' + JSON.stringify(data));
3042}).catch((err: BusinessError) => {
3043  console.log('getState fail');
3044});
3045```
3046
3047### setExtraOptions<sup>10+</sup>
3048
3049setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
3050
3051设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。
3052
3053> **说明:**
3054> listen方法调用成功后,才可调用此方法。
3055
3056**需要权限**:ohos.permission.INTERNET
3057
3058**系统能力**:SystemCapability.Communication.NetStack
3059
3060**参数:**
3061
3062| 参数名   | 类型                                | 必填 | 说明                                                         |
3063| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
3064| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
3065| callback | AsyncCallback\<void\>               | 是   | 回调函数。失败时返回错误码、错误信息。                |
3066
3067**错误码:**
3068
3069| 错误码ID | 错误信息                        |
3070| -------- | ------------------------------- |
3071| 401      | Parameter error.                |
3072| 201      | Permission denied.              |
3073| 2300002  | System internal error.          |
3074| 2303188  | Socket operation on non-socket. |
3075
3076**示例:**
3077
3078```ts
3079import { socket } from '@kit.NetworkKit';
3080import { BusinessError } from '@kit.BasicServicesKit';
3081
3082let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3083let listenAddr: socket.NetAddress = {
3084  address:  '192.168.xx.xxx',
3085  port: 8080,
3086  family: 1
3087}
3088tcpServer.listen(listenAddr, (err: BusinessError) => {
3089  if (err) {
3090    console.log("listen fail");
3091    return;
3092  }
3093  console.log("listen success");
3094})
3095
3096interface SocketLinger {
3097  on: boolean;
3098  linger: number;
3099}
3100
3101let tcpExtraOptions: socket.TCPExtraOptions = {
3102  keepAlive: true,
3103  OOBInline: true,
3104  TCPNoDelay: true,
3105  socketLinger: { on: true, linger: 10 } as SocketLinger,
3106  receiveBufferSize: 1000,
3107  sendBufferSize: 1000,
3108  reuseAddress: true,
3109  socketTimeout: 3000
3110}
3111tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
3112  if (err) {
3113    console.log('setExtraOptions fail');
3114    return;
3115  }
3116  console.log('setExtraOptions success');
3117});
3118```
3119
3120### setExtraOptions<sup>10+</sup>
3121
3122setExtraOptions(options: TCPExtraOptions): Promise\<void\>
3123
3124设置TCPSocketServer连接的其他属性,使用Promise方式作为异步方法。
3125
3126> **说明:**
3127> listen方法调用成功后,才可调用此方法。
3128
3129**需要权限**:ohos.permission.INTERNET
3130
3131**系统能力**:SystemCapability.Communication.NetStack
3132
3133**参数:**
3134
3135| 参数名  | 类型                                | 必填 | 说明                                                         |
3136| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ |
3137| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocketServer连接的其他属性。 |
3138
3139**返回值:**
3140
3141| 类型            | 说明                                                       |
3142|  -------------- |  --------------------------------------------------------- |
3143| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
3144
3145**错误码:**
3146
3147| 错误码ID | 错误信息                        |
3148| -------- | ------------------------------- |
3149| 401      | Parameter error.                |
3150| 201      | Permission denied.              |
3151| 2300002  | System internal error.          |
3152| 2303188  | Socket operation on non-socket. |
3153
3154**示例:**
3155
3156```ts
3157import { socket } from '@kit.NetworkKit';
3158import { BusinessError } from '@kit.BasicServicesKit';
3159
3160let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3161let listenAddr: socket.NetAddress = {
3162  address:  '192.168.xx.xxx',
3163  port: 8080,
3164  family: 1
3165}
3166
3167interface SocketLinger {
3168  on: boolean;
3169  linger: number;
3170}
3171
3172tcpServer.listen(listenAddr, (err: BusinessError) => {
3173  if (err) {
3174    console.log("listen fail");
3175    return;
3176  }
3177  console.log("listen success");
3178})
3179
3180let tcpExtraOptions: socket.TCPExtraOptions = {
3181  keepAlive: true,
3182  OOBInline: true,
3183  TCPNoDelay: true,
3184  socketLinger: { on: true, linger: 10 } as SocketLinger,
3185  receiveBufferSize: 1000,
3186  sendBufferSize: 1000,
3187  reuseAddress: true,
3188  socketTimeout: 3000
3189}
3190tcpServer.setExtraOptions(tcpExtraOptions).then(() => {
3191  console.log('setExtraOptions success');
3192}).catch((err: BusinessError) => {
3193  console.log('setExtraOptions fail');
3194});
3195```
3196
3197### getLocalAddress<sup>12+</sup>
3198
3199getLocalAddress(): Promise\<NetAddress\>
3200
3201获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。
3202
3203> **说明:**
3204> listen方法调用成功后,才可调用此方法。
3205
3206**系统能力**:SystemCapability.Communication.NetStack
3207
3208**返回值:**
3209
3210| 类型            | 说明                                                 |
3211|  -------------- |  --------------------------------------------------- |
3212| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
3213
3214**错误码:**
3215
3216| 错误码ID | 错误信息                                    |
3217| -------- | ------------------------------------------- |
3218| 2300002  | System internal error.                      |
3219| 2301009  | Bad file descriptor.                            |
3220| 2303188  | Socket operation on non-socket. |
3221
3222**示例:**
3223
3224```ts
3225import { socket } from '@kit.NetworkKit';
3226import { BusinessError } from '@kit.BasicServicesKit';
3227
3228let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3229let listenAddr: socket.NetAddress = {
3230  address: '192.168.xx.xxx',
3231  port: 8080,
3232  family: 1
3233}
3234tcpServer.listen(listenAddr).then(() => {
3235  tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
3236    console.info("SUCCESS! Address:" + JSON.stringify(localAddress));
3237  }).catch((err: BusinessError) => {
3238    console.error("FerrorAILED! Error:" + JSON.stringify(err));
3239  })
3240}).catch((err: BusinessError) => {
3241  console.error('listen fail');
3242});
3243```
3244
3245### on('connect')<sup>10+</sup>
3246
3247on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void
3248
3249订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
3250
3251> **说明:**
3252> listen方法调用成功后,才可调用此方法。
3253
3254**系统能力**:SystemCapability.Communication.NetStack
3255
3256**参数:**
3257
3258| 参数名   | 类型                            | 必填 | 说明                                  |
3259| -------- | ------------------------------- | ---- | ------------------------------------- |
3260| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
3261| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是   | 回调函数。失败时返回错误码、错误信息。       |
3262
3263**错误码:**
3264
3265| 错误码ID | 错误信息         |
3266| -------- | ---------------- |
3267| 401      | Parameter error. |
3268
3269**示例:**
3270
3271```ts
3272import { socket } from '@kit.NetworkKit';
3273
3274let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3275
3276let listenAddr: socket.NetAddress = {
3277  address:  '192.168.xx.xxx',
3278  port: 8080,
3279  family: 1
3280}
3281tcpServer.listen(listenAddr, (err: BusinessError) => {
3282  if (err) {
3283    console.log("listen fail");
3284    return;
3285  }
3286  console.log("listen success");
3287  tcpServer.on('connect', (data: socket.TCPSocketConnection) => {
3288    console.log(JSON.stringify(data))
3289  });
3290})
3291```
3292
3293### off('connect')<sup>10+</sup>
3294
3295off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void
3296
3297取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。
3298
3299**系统能力**:SystemCapability.Communication.NetStack
3300
3301**参数:**
3302
3303| 参数名   | 类型                            | 必填 | 说明                                  |
3304| -------- | ------------------------------- | ---- | ------------------------------------- |
3305| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
3306| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否   | 回调函数。失败时返回错误码、错误信息。 |
3307
3308**错误码:**
3309
3310| 错误码ID | 错误信息         |
3311| -------- | ---------------- |
3312| 401      | Parameter error. |
3313
3314**示例:**
3315
3316```ts
3317import { socket } from '@kit.NetworkKit';
3318
3319let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3320
3321let listenAddr: socket.NetAddress = {
3322  address:  '192.168.xx.xxx',
3323  port: 8080,
3324  family: 1
3325}
3326tcpServer.listen(listenAddr, (err: BusinessError) => {
3327  if (err) {
3328    console.log("listen fail");
3329    return;
3330  }
3331  console.log("listen success");
3332  let callback = (data: socket.TCPSocketConnection) => {
3333    console.log('on connect message: ' + JSON.stringify(data));
3334  }
3335  tcpServer.on('connect', callback);
3336  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3337  tcpServer.off('connect', callback);
3338  tcpServer.off('connect');
3339})
3340```
3341
3342### on('error')<sup>10+</sup>
3343
3344on(type: 'error', callback: ErrorCallback): void
3345
3346订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3347
3348> **说明:**
3349> listen方法调用成功后,才可调用此方法。
3350
3351**系统能力**:SystemCapability.Communication.NetStack
3352
3353**参数:**
3354
3355| 参数名   | 类型          | 必填 | 说明                                 |
3356| -------- | ------------- | ---- | ------------------------------------ |
3357| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3358| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。|
3359
3360**错误码:**
3361
3362| 错误码ID | 错误信息         |
3363| -------- | ---------------- |
3364| 401      | Parameter error. |
3365
3366**示例:**
3367
3368```ts
3369import { socket } from '@kit.NetworkKit';
3370import { BusinessError } from '@kit.BasicServicesKit';
3371
3372let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3373
3374let listenAddr: socket.NetAddress = {
3375  address:  '192.168.xx.xxx',
3376  port: 8080,
3377  family: 1
3378}
3379tcpServer.listen(listenAddr, (err: BusinessError) => {
3380  if (err) {
3381    console.log("listen fail");
3382    return;
3383  }
3384  console.log("listen success");
3385  tcpServer.on('error', (err: BusinessError) => {
3386    console.log("on error, err:" + JSON.stringify(err))
3387  });
3388})
3389```
3390
3391### off('error')<sup>10+</sup>
3392
3393off(type: 'error', callback?: ErrorCallback): void
3394
3395取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。
3396
3397**系统能力**:SystemCapability.Communication.NetStack
3398
3399**参数:**
3400
3401| 参数名   | 类型          | 必填 | 说明                                 |
3402| -------- | ------------- | ---- | ------------------------------------ |
3403| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3404| callback | ErrorCallback | 否   | 回调函数。失败时返回错误码、错误信息。                           |
3405
3406**错误码:**
3407
3408| 错误码ID | 错误信息         |
3409| -------- | ---------------- |
3410| 401      | Parameter error. |
3411
3412**示例:**
3413
3414```ts
3415import { socket } from '@kit.NetworkKit';
3416import { BusinessError } from '@kit.BasicServicesKit';
3417
3418let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3419
3420let listenAddr: socket.NetAddress = {
3421  address:  '192.168.xx.xxx',
3422  port: 8080,
3423  family: 1
3424}
3425tcpServer.listen(listenAddr, (err: BusinessError) => {
3426  if (err) {
3427    console.log("listen fail");
3428    return;
3429  }
3430  console.log("listen success");
3431  let callback = (err: BusinessError) => {
3432    console.log("on error, err:" + JSON.stringify(err));
3433  }
3434  tcpServer.on('error', callback);
3435  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3436  tcpServer.off('error', callback);
3437  tcpServer.off('error');
3438})
3439```
3440
3441## TCPSocketConnection<sup>10+</sup>
3442
3443TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。
3444
3445> **说明:**
3446> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。
3447
3448**系统能力**:SystemCapability.Communication.NetStack
3449
3450### 属性
3451
3452| 名称     | 类型   | 必填 | 说明                                      |
3453| -------- | ------ | ---- | ----------------------------------------- |
3454| clientId | number | 是   | 客户端与TCPSocketServer建立连接的id。 |
3455
3456### send<sup>10+</sup>
3457
3458send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
3459
3460通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。
3461
3462> **说明:**
3463> 与客户端建立连接后,才可调用此方法。
3464
3465**需要权限**:ohos.permission.INTERNET
3466
3467**系统能力**:SystemCapability.Communication.NetStack
3468
3469**参数:**
3470
3471| 参数名   | 类型                              | 必填 | 说明                                                         |
3472| -------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3473| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3474| callback | AsyncCallback\<void\>             | 是   | 回调函数。失败时返回错误码、错误信息。             |
3475
3476**错误码:**
3477
3478| 错误码ID | 错误信息               |
3479| -------- | ---------------------- |
3480| 401      | Parameter error.       |
3481| 201      | Permission denied.     |
3482| 2300002  | System internal error. |
3483
3484**示例:**
3485
3486```ts
3487import { socket } from '@kit.NetworkKit';
3488
3489let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3490
3491tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3492  let tcpSendOption: socket.TCPSendOptions = {
3493    data: 'Hello, client!'
3494  }
3495  client.send(tcpSendOption, () => {
3496    console.log('send success');
3497  });
3498});
3499```
3500
3501### send<sup>10+</sup>
3502
3503send(options: TCPSendOptions): Promise\<void\>
3504
3505通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。
3506
3507> **说明:**
3508> 与客户端建立连接后,才可调用此方法。
3509
3510**需要权限**:ohos.permission.INTERNET
3511
3512**系统能力**:SystemCapability.Communication.NetStack
3513
3514**参数:**
3515
3516| 参数名  | 类型                              | 必填 | 说明                                                         |
3517| ------- | --------------------------------- | ---- | ------------------------------------------------------------ |
3518| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocketConnection发送请求的参数。 |
3519
3520**返回值:**
3521
3522| 类型            | 说明                                                         |
3523|  -------------- |  ----------------------------------------------------------- |
3524| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
3525
3526**错误码:**
3527
3528| 错误码ID | 错误信息               |
3529| -------- | ---------------------- |
3530| 401      | Parameter error.       |
3531| 201      | Permission denied.     |
3532| 2300002  | System internal error. |
3533
3534**示例:**
3535
3536```ts
3537import { socket } from '@kit.NetworkKit';
3538import { BusinessError } from '@kit.BasicServicesKit';
3539
3540let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3541
3542tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3543  let tcpSendOption: socket.TCPSendOptions = {
3544    data: 'Hello, client!'
3545  }
3546  client.send(tcpSendOption).then(() => {
3547    console.log('send success');
3548  }).catch((err: BusinessError) => {
3549    console.log('send fail');
3550  });
3551});
3552```
3553
3554### close<sup>10+</sup>
3555
3556close(callback: AsyncCallback\<void\>): void
3557
3558关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。
3559
3560**需要权限**:ohos.permission.INTERNET
3561
3562**系统能力**:SystemCapability.Communication.NetStack
3563
3564**参数:**
3565
3566| 参数名   | 类型                  | 必填 | 说明       |
3567| -------- | --------------------- | ---- | ---------- |
3568| callback | AsyncCallback\<void\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
3569
3570**错误码:**
3571
3572| 错误码ID | 错误信息               |
3573| -------- | ---------------------- |
3574| 401      | Parameter error.       |
3575| 201      | Permission denied.     |
3576| 2300002  | System internal error. |
3577
3578**示例:**
3579
3580```ts
3581import { socket } from '@kit.NetworkKit';
3582import { BusinessError } from '@kit.BasicServicesKit';
3583
3584let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3585
3586tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3587  client.close((err: BusinessError) => {
3588    if (err) {
3589      console.log('close fail');
3590      return;
3591    }
3592    console.log('close success');
3593  });
3594});
3595```
3596
3597### close<sup>10+</sup>
3598
3599close(): Promise\<void\>
3600
3601关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。
3602
3603**需要权限**:ohos.permission.INTERNET
3604
3605**系统能力**:SystemCapability.Communication.NetStack
3606
3607**返回值:**
3608
3609| 类型            | 说明                                         |
3610|  -------------- |  ------------------------------------------- |
3611| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
3612
3613**错误码:**
3614
3615| 错误码ID | 错误信息               |
3616| -------- | ---------------------- |
3617| 201      | Permission denied.     |
3618| 2300002  | System internal error. |
3619
3620**示例:**
3621
3622```ts
3623import { socket } from '@kit.NetworkKit';
3624
3625let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3626tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3627  client.close().then(() => {
3628  	console.log('close success');
3629  }).catch((err: BusinessError) => {
3630  	console.log('close fail');
3631  });
3632});
3633```
3634
3635### getRemoteAddress<sup>10+</sup>
3636
3637getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
3638
3639获取对端Socket地址。使用callback方式作为异步方法。
3640
3641> **说明:**
3642> 与客户端建立连接后,才可调用此方法。
3643
3644**需要权限**:ohos.permission.INTERNET
3645
3646**系统能力**:SystemCapability.Communication.NetStack
3647
3648**参数:**
3649
3650| 参数名   | 类型                                     | 必填 | 说明       |
3651| -------- | ---------------------------------------- | ---- | ---------- |
3652| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。失败时返回错误码、错误信息。 |
3653
3654**错误码:**
3655
3656| 错误码ID | 错误信息                        |
3657| -------- | ------------------------------- |
3658| 401      | Parameter error.                |
3659| 201      | Permission denied.              |
3660| 2300002  | System internal error.          |
3661| 2303188  | Socket operation on non-socket. |
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.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
3672    if (err) {
3673      console.log('getRemoteAddress fail');
3674      return;
3675    }
3676    console.log('getRemoteAddress success:' + JSON.stringify(data));
3677  });
3678});
3679```
3680
3681### getRemoteAddress<sup>10+</sup>
3682
3683getRemoteAddress(): Promise\<NetAddress\>
3684
3685获取对端Socket地址。使用Promise方式作为异步方法。
3686
3687> **说明:**
3688> 与客户端建立连接后,才可调用此方法。
3689
3690**需要权限**:ohos.permission.INTERNET
3691
3692**系统能力**:SystemCapability.Communication.NetStack
3693
3694**返回值:**
3695
3696| 类型                               | 说明                                        |
3697|  --------------------------------- |  ------------------------------------------ |
3698| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 |
3699
3700**错误码:**
3701
3702| 错误码ID | 错误信息                        |
3703| -------- | ------------------------------- |
3704| 201      | Permission denied.              |
3705| 2300002  | System internal error.          |
3706| 2303188  | Socket operation on non-socket. |
3707
3708**示例:**
3709
3710```ts
3711import { socket } from '@kit.NetworkKit';
3712import { BusinessError } from '@kit.BasicServicesKit';
3713
3714let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3715tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3716  client.getRemoteAddress().then(() => {
3717    console.log('getRemoteAddress success');
3718  }).catch((err: BusinessError) => {
3719    console.log('getRemoteAddress fail');
3720  });
3721});
3722```
3723
3724### getLocalAddress<sup>12+</sup>
3725
3726getLocalAddress(): Promise\<NetAddress\>
3727
3728获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。
3729
3730**系统能力**:SystemCapability.Communication.NetStack
3731
3732**返回值:**
3733
3734| 类型            | 说明                                                 |
3735|  -------------- |  --------------------------------------------------- |
3736| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
3737
3738**错误码:**
3739
3740| 错误码ID | 错误信息                                    |
3741| -------- | ------------------------------------------- |
3742| 2300002  | System internal error.                      |
3743| 2301009  | Bad file descriptor.                            |
3744| 2303188  | Socket operation on non-socket. |
3745
3746**示例:**
3747
3748```ts
3749import { socket } from '@kit.NetworkKit';
3750import { BusinessError } from '@kit.BasicServicesKit';
3751
3752let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3753let listenAddr: socket.NetAddress = {
3754  address: "192.168.xx.xx",
3755  port: 8080,
3756  family: 1
3757}
3758tcpServer.listen(listenAddr, (err: BusinessError) => {
3759  let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
3760  let netAddress: socket.NetAddress = {
3761    address: "192.168.xx.xx",
3762    port: 8080
3763  }
3764  let options: socket.TCPConnectOptions = {
3765    address: netAddress,
3766    timeout: 6000
3767  }
3768  tcp.connect(options, (err: BusinessError) => {
3769    if (err) {
3770      console.error('connect fail');
3771      return;
3772    }
3773    console.info('connect success!');
3774  })
3775  tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3776    client.getLocalAddress().then((localAddress: socket.NetAddress) => {
3777      console.info("Family IP Port: " + JSON.stringify(localAddress));
3778    }).catch((err: BusinessError) => {
3779      console.error('Error:' + JSON.stringify(err));
3780    });
3781  })
3782})
3783```
3784
3785### on('message')<sup>10+</sup>
3786
3787on(type: 'message', callback: Callback<SocketMessageInfo\>): void
3788
3789订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
3790
3791**系统能力**:SystemCapability.Communication.NetStack
3792
3793**参数:**
3794
3795| 参数名   | 类型                                                         | 必填 | 说明                                      |
3796| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
3797| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
3798| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。失败时返回错误码、错误信息。         |
3799
3800**错误码:**
3801
3802| 错误码ID | 错误信息         |
3803| -------- | ---------------- |
3804| 401      | Parameter error. |
3805
3806**示例:**
3807
3808```ts
3809import { socket } from '@kit.NetworkKit';
3810import { BusinessError } from '@kit.BasicServicesKit';
3811
3812let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3813
3814tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3815  client.on('message', (value: socket.SocketMessageInfo) => {
3816    let messageView = '';
3817    for (let i: number = 0; i < value.message.byteLength; i++) {
3818      let uint8Array = new Uint8Array(value.message)
3819      let messages = uint8Array[i]
3820      let message = String.fromCharCode(messages);
3821      messageView += message;
3822    }
3823    console.log('on message message: ' + JSON.stringify(messageView));
3824    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
3825  });
3826});
3827```
3828
3829### off('message')<sup>10+</sup>
3830
3831off(type: 'message', callback?: Callback<SocketMessageInfo\>): void
3832
3833取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
3834
3835**系统能力**:SystemCapability.Communication.NetStack
3836
3837**参数:**
3838
3839| 参数名   | 类型                                                         | 必填 | 说明                                      |
3840| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
3841| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
3842| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。失败时返回错误码、错误信息。        |
3843
3844**错误码:**
3845
3846| 错误码ID | 错误信息         |
3847| -------- | ---------------- |
3848| 401      | Parameter error. |
3849
3850**示例:**
3851
3852```ts
3853import { socket } from '@kit.NetworkKit';
3854import { BusinessError } from '@kit.BasicServicesKit';
3855
3856let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3857let callback = (value: socket.SocketMessageInfo) => {
3858  let messageView = '';
3859  for (let i: number = 0; i < value.message.byteLength; i++) {
3860    let uint8Array = new Uint8Array(value.message)
3861    let messages = uint8Array[i]
3862    let message = String.fromCharCode(messages);
3863    messageView += message;
3864  }
3865  console.log('on message message: ' + JSON.stringify(messageView));
3866  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
3867}
3868tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3869  client.on('message', callback);
3870  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3871  client.off('message', callback);
3872  client.off('message');
3873});
3874```
3875
3876### on('close')<sup>10+</sup>
3877
3878on(type: 'close', callback: Callback\<void\>): void
3879
3880订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
3881
3882**系统能力**:SystemCapability.Communication.NetStack
3883
3884**参数:**
3885
3886| 参数名   | 类型             | 必填 | 说明                                |
3887| -------- | ---------------- | ---- | ----------------------------------- |
3888| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
3889| callback | Callback\<void\> | 是   | 回调函数。失败时返回错误码、错误信息。        |
3890
3891**错误码:**
3892
3893| 错误码ID | 错误信息         |
3894| -------- | ---------------- |
3895| 401      | Parameter error. |
3896
3897**示例:**
3898
3899```ts
3900import { socket } from '@kit.NetworkKit';
3901import { BusinessError } from '@kit.BasicServicesKit';
3902
3903let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3904tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3905  client.on('close', () => {
3906    console.log("on close success")
3907  });
3908});
3909```
3910
3911### off('close')<sup>10+</sup>
3912
3913off(type: 'close', callback?: Callback\<void\>): void
3914
3915取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。
3916
3917**系统能力**:SystemCapability.Communication.NetStack
3918
3919**参数:**
3920
3921| 参数名   | 类型             | 必填 | 说明                                |
3922| -------- | ---------------- | ---- | ----------------------------------- |
3923| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
3924| callback | Callback\<void\> | 否   | 回调函数。失败时返回错误码、错误信息。    |
3925
3926**错误码:**
3927
3928| 错误码ID | 错误信息         |
3929| -------- | ---------------- |
3930| 401      | Parameter error. |
3931
3932**示例:**
3933
3934```ts
3935import { socket } from '@kit.NetworkKit';
3936
3937let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3938let callback = () => {
3939  console.log("on close success");
3940}
3941tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3942  client.on('close', callback);
3943  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
3944  client.off('close', callback);
3945  client.off('close');
3946});
3947```
3948
3949### on('error')<sup>10+</sup>
3950
3951on(type: 'error', callback: ErrorCallback): void
3952
3953订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
3954
3955**系统能力**:SystemCapability.Communication.NetStack
3956
3957**参数:**
3958
3959| 参数名   | 类型          | 必填 | 说明                                 |
3960| -------- | ------------- | ---- | ------------------------------------ |
3961| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3962| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。    |
3963
3964**错误码:**
3965
3966| 错误码ID | 错误信息         |
3967| -------- | ---------------- |
3968| 401      | Parameter error. |
3969
3970**示例:**
3971
3972```ts
3973import { socket } from '@kit.NetworkKit';
3974import { BusinessError } from '@kit.BasicServicesKit';
3975
3976let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
3977tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
3978  client.on('error', (err: BusinessError) => {
3979    console.log("on error, err:" + JSON.stringify(err))
3980  });
3981});
3982```
3983
3984### off('error')<sup>10+</sup>
3985
3986off(type: 'error', callback?: ErrorCallback): void
3987
3988取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。
3989
3990**系统能力**:SystemCapability.Communication.NetStack
3991
3992**参数:**
3993
3994| 参数名   | 类型          | 必填 | 说明                                 |
3995| -------- | ------------- | ---- | ------------------------------------ |
3996| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
3997| callback | ErrorCallback | 否   | 回调函数。失败时返回错误码、错误信息。  |
3998
3999**错误码:**
4000
4001| 错误码ID | 错误信息         |
4002| -------- | ---------------- |
4003| 401      | Parameter error. |
4004
4005**示例:**
4006
4007```ts
4008import { socket } from '@kit.NetworkKit';
4009import { BusinessError } from '@kit.BasicServicesKit';
4010
4011let callback = (err: BusinessError) => {
4012  console.log("on error, err:" + JSON.stringify(err));
4013}
4014let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance();
4015tcpServer.on('connect', (client: socket.TCPSocketConnection) => {
4016  client.on('error', callback);
4017  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4018  client.off('error', callback);
4019  client.off('error');
4020});
4021```
4022
4023## TCP 错误码说明
4024
4025TCP 其余错误码映射形式为:2301000 + Linux内核错误码。
4026
4027错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
4028
4029## socket.constructLocalSocketInstance<sup>11+</sup>
4030
4031constructLocalSocketInstance(): LocalSocket
4032
4033创建一个LocalSocket对象。
4034
4035**系统能力**:SystemCapability.Communication.NetStack
4036
4037**返回值:**
4038
4039| 类型                               | 说明                    |
4040| :--------------------------------- | :---------------------- |
4041| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 |
4042
4043**示例:**
4044
4045```ts
4046import { socket } from '@kit.NetworkKit';
4047let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4048```
4049
4050## LocalSocket<sup>11+</sup>
4051
4052LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。
4053
4054### bind<sup>11+</sup>
4055
4056bind(address: LocalAddress): Promise\<void\>;
4057
4058绑定本地套接字文件的路径。使用promise方法作为异步方法。
4059
4060> **说明:**
4061> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。
4062> bind方法在本地套接字通信中非必须。
4063
4064**系统能力**:SystemCapability.Communication.NetStack
4065
4066**参数:**
4067
4068| 参数名   | 类型                               | 必填 | 说明                                                   |
4069| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
4070| address  | [LocalAddress](#localaddress11) | 是   | 目标地址信息,参考[LocalAddress](#localaddress11)。 |
4071
4072**错误码:**
4073
4074| 错误码ID | 错误信息                    |
4075| ------- | -------------------------- |
4076| 401     | Parameter error.           |
4077| 2301013 | Insufficient permissions.  |
4078| 2301022 | Invalid argument.          |
4079| 2301098 | Address already in use.    |
4080
4081**示例:**
4082
4083**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4084
4085```ts
4086import { socket } from '@kit.NetworkKit';
4087import { common } from '@kit.AbilityKit';
4088
4089let client: socket.LocalSocket = socket.constructLocalSocketInstance()
4090let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4091let sandboxPath: string = context.filesDir + '/testSocket';
4092let address : socket.LocalAddress = {
4093  address: sandboxPath
4094}
4095client.bind(address).then(() => {
4096  console.log('bind success')
4097}).catch((err: Object) => {
4098  console.error('failed to bind: ' + JSON.stringify(err))
4099})
4100```
4101
4102### connect<sup>11+</sup>
4103
4104connect(options: LocalConnectOptions): Promise\<void\>
4105
4106连接到指定的套接字文件。使用promise方法作为异步方法。
4107
4108> **说明:**
4109> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。
4110
4111**系统能力**:SystemCapability.Communication.NetStack
4112
4113**参数:**
4114
4115| 参数名  | 类型                                     | 必填 | 说明                                                         |
4116| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
4117| options | [LocalConnectOptions](#localconnectoptions11) | 是   | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 |
4118
4119**返回值:**
4120
4121| 类型            | 说明                                       |
4122| :-------------- | :---------------------------------------- |
4123| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 |
4124
4125**错误码:**
4126
4127| 错误码ID | 错误信息                 |
4128| ------- | ----------------------- |
4129| 401     | Parameter error.                 |
4130| 2301013     | Insufficient permissions.        |
4131| 2301022     | Invalid argument.                |
4132| 2301111     | Connection refused.              |
4133| 2301099     | Cannot assign requested address. |
4134
4135**示例:**
4136
4137**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4138
4139```ts
4140import { socket } from '@kit.NetworkKit';
4141import { common } from '@kit.AbilityKit';
4142
4143let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4144let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4145let sandboxPath: string = context.filesDir + '/testSocket';
4146let localAddress : socket.LocalAddress = {
4147  address: sandboxPath
4148}
4149let connectOpt: socket.LocalConnectOptions = {
4150  address: localAddress,
4151  timeout: 6000
4152}
4153client.connect(connectOpt).then(() => {
4154  console.log('connect success')
4155}).catch((err: Object) => {
4156  console.error('connect fail: ' + JSON.stringify(err));
4157});
4158```
4159
4160### send<sup>11+</sup>
4161
4162send(options: LocalSendOptions): Promise\<void\>
4163
4164通过LocalSocket连接发送数据。使用Promise方式作为异步方法。
4165
4166> **说明:**
4167> connect方法调用成功后,才可调用此方法。
4168
4169**系统能力**:SystemCapability.Communication.NetStack
4170
4171**参数:**
4172
4173| 参数名  | 类型                                    | 必填 | 说明                                                         |
4174| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
4175| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 |
4176
4177**返回值:**
4178
4179| 类型            | 说明                                         |
4180| :-------------- | :------------------------------------------ |
4181| Promise\<void\> | 以Promise形式返回通过LocalSocket发送数据的结果。 |
4182
4183**错误码:**
4184
4185| 错误码ID | 错误信息                 |
4186| ------- | ----------------------- |
4187| 401     | Parameter error.        |
4188| 2301011 | Operation would block.  |
4189
4190**示例:**
4191
4192**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4193
4194```ts
4195import { socket } from '@kit.NetworkKit';
4196import { common } from '@kit.AbilityKit';
4197
4198let client: socket.LocalSocket = socket.constructLocalSocketInstance()
4199let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4200let sandboxPath: string = context.filesDir + '/testSocket';
4201let localAddress : socket.LocalAddress = {
4202  address: sandboxPath
4203}
4204let connectOpt: socket.LocalConnectOptions = {
4205  address: localAddress,
4206  timeout: 6000
4207}
4208client.connect(connectOpt).then(() => {
4209  console.log('connect success')
4210}).catch((err: Object) => {
4211  console.error('connect failed: ' + JSON.stringify(err))
4212})
4213let sendOpt: socket.LocalSendOptions = {
4214  data: 'Hello world!'
4215}
4216client.send(sendOpt).then(() => {
4217  console.log('send success')
4218}).catch((err: Object) => {
4219  console.error('send fail: ' + JSON.stringify(err))
4220})
4221```
4222
4223### close<sup>11+</sup>
4224
4225close(): Promise\<void\>
4226
4227关闭LocalSocket连接。使用Promise方式作为异步方法。
4228
4229**系统能力**:SystemCapability.Communication.NetStack
4230
4231**返回值:**
4232
4233| 类型            | 说明                                       |
4234| :-------------- | :----------------------------------------- |
4235| Promise\<void\> | 以Promise形式返回关闭LocalSocket连接的结果。 |
4236
4237**错误码:**
4238
4239| 错误码ID | 错误信息                 |
4240| ------- | ----------------------- |
4241| 2301009 | Bad file descriptor.    |
4242
4243**示例:**
4244
4245```ts
4246import { socket } from '@kit.NetworkKit';
4247
4248let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4249
4250client.close().then(() => {
4251  console.log('close success');
4252}).catch((err: Object) => {
4253  console.error('close fail: ' + JSON.stringify(err));
4254});
4255```
4256
4257### getState<sup>11+</sup>
4258
4259getState(): Promise\<SocketStateBase\>
4260
4261获取LocalSocket状态。使用Promise方式作为异步方法。
4262
4263> **说明:**
4264> bind或connect方法调用成功后,才可调用此方法。
4265
4266**系统能力**:SystemCapability.Communication.NetStack
4267
4268**返回值:**
4269
4270| 类型                                          | 说明                                     |
4271| :------------------------------------------- | :--------------------------------------- |
4272| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 |
4273
4274**示例:**
4275
4276**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4277
4278```ts
4279import { socket } from '@kit.NetworkKit';
4280import { common } from '@kit.AbilityKit';
4281
4282let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4283let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4284let sandboxPath: string = context.filesDir + '/testSocket';
4285let localAddress : socket.LocalAddress = {
4286  address: sandboxPath
4287}
4288let connectOpt: socket.LocalConnectOptions = {
4289  address: localAddress,
4290  timeout: 6000
4291}
4292client.connect(connectOpt).then(() => {
4293  console.log('connect success');
4294  client.getState().then(() => {
4295    console.log('getState success');
4296  }).catch((err: Object) => {
4297    console.error('getState fail: ' + JSON.stringify(err))
4298  });
4299}).catch((err: Object) => {
4300  console.error('connect fail: ' + JSON.stringify(err));
4301});
4302```
4303
4304### getSocketFd<sup>11+</sup>
4305
4306getSocketFd(): Promise\<number\>
4307
4308获取LocalSocket的文件描述符。使用Promise方式作为异步方法。
4309
4310> **说明:**
4311> bind或connect方法调用成功后,才可调用此方法。
4312> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。
4313
4314**系统能力**:SystemCapability.Communication.NetStack
4315
4316**返回值:**
4317
4318| 类型               | 说明                              |
4319| :---------------- | :-------------------------------- |
4320| Promise\<number\> | 以Promise形式返回socket的文件描述符。 |
4321
4322**示例:**
4323
4324**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4325
4326```ts
4327import { socket } from '@kit.NetworkKit';
4328import { common } from '@kit.AbilityKit';
4329
4330let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4331let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4332let sandboxPath: string = context.filesDir + '/testSocket';
4333let localAddress : socket.LocalAddress = {
4334  address: sandboxPath
4335}
4336let connectOpt: socket.LocalConnectOptions = {
4337  address: localAddress,
4338  timeout: 6000
4339}
4340client.connect(connectOpt).then(() => {
4341  console.log('connect ok')
4342}).catch((err: Object) => {
4343  console.error('connect fail: ' + JSON.stringify(err))
4344})
4345client.getSocketFd().then((data: number) => {
4346  console.info("fd: " + data);
4347}).catch((err: Object) => {
4348  console.error("getSocketFd faile: " + JSON.stringify(err));
4349})
4350```
4351
4352### setExtraOptions<sup>11+</sup>
4353
4354setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
4355
4356设置LocalSocket的套接字属性,使用Promise方式作为异步方法。
4357
4358> **说明:**
4359> bind或connect方法调用成功后,才可调用此方法。
4360
4361**系统能力**:SystemCapability.Communication.NetStack
4362
4363**参数:**
4364
4365| 参数名  | 类型                                      | 必填 | 说明                                                         |
4366| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
4367| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 |
4368
4369**返回值:**
4370
4371| 类型            | 说明                                           |
4372| :-------------- | :-------------------------------------------- |
4373| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 |
4374
4375**错误码:**
4376
4377| 错误码ID | 错误信息                 |
4378| ------- | ----------------------- |
4379| 401     | Parameter error.        |
4380| 2301009 | Bad file descriptor.    |
4381
4382**示例:**
4383
4384**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4385
4386```ts
4387import { socket } from '@kit.NetworkKit';
4388import { common } from '@kit.AbilityKit';
4389
4390let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4391let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4392let sandboxPath: string = context.filesDir + '/testSocket';
4393let localAddress : socket.LocalAddress = {
4394  address: sandboxPath
4395}
4396let connectOpt: socket.LocalConnectOptions = {
4397  address: localAddress,
4398  timeout: 6000
4399}
4400client.connect(connectOpt).then(() => {
4401  console.log('connect success');
4402  let options: socket.ExtraOptionsBase = {
4403    receiveBufferSize: 8000,
4404    sendBufferSize: 8000,
4405    socketTimeout: 3000
4406  }
4407  client.setExtraOptions(options).then(() => {
4408    console.log('setExtraOptions success');
4409  }).catch((err: Object) => {
4410    console.error('setExtraOptions fail: ' + JSON.stringify(err));
4411  });
4412}).catch((err: Object) => {
4413  console.error('connect fail: ' + JSON.stringify(err));
4414});
4415```
4416
4417### getExtraOptions<sup>11+</sup>
4418
4419getExtraOptions(): Promise\<ExtraOptionsBase\>;
4420
4421获取LocalSocket的套接字属性,使用Promise方式作为异步方法。
4422
4423> **说明:**
4424> bind或connect方法调用成功后,才可调用此方法。
4425
4426**系统能力**:SystemCapability.Communication.NetStack
4427
4428**返回值:**
4429
4430| 类型                         | 说明                                      |
4431| :-------------------------- | :---------------------------------------- |
4432| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 |
4433
4434**错误码:**
4435
4436| 错误码ID | 错误信息                 |
4437| ------- | ----------------------- |
4438| 2301009 | Bad file descriptor.    |
4439
4440**示例:**
4441
4442**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4443
4444```ts
4445import { socket } from '@kit.NetworkKit';
4446import { common } from '@kit.AbilityKit';
4447
4448let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4449let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4450let sandboxPath: string = context.filesDir + '/testSocket';
4451let localAddress : socket.LocalAddress = {
4452  address: sandboxPath
4453}
4454let connectOpt: socket.LocalConnectOptions = {
4455  address: localAddress,
4456  timeout: 6000
4457}
4458client.connect(connectOpt).then(() => {
4459  console.log('connect success');
4460  client.getExtraOptions().then((options : socket.ExtraOptionsBase) => {
4461    console.log('options: ' + JSON.stringify(options));
4462  }).catch((err: Object) => {
4463    console.error('setExtraOptions fail: ' + JSON.stringify(err));
4464  });
4465}).catch((err: Object) => {
4466  console.error('connect fail: ' + JSON.stringify(err));
4467});
4468```
4469
4470### getLocalAddress<sup>12+</sup>
4471
4472getLocalAddress(): Promise\<string\>
4473
4474获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。
4475
4476> **说明:**
4477> bind方法调用成功后,才可调用此方法。
4478
4479**系统能力**:SystemCapability.Communication.NetStack
4480
4481**返回值:**
4482
4483| 类型            | 说明                                                 |
4484|  -------------- |  --------------------------------------------------- |
4485| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
4486
4487**错误码:**
4488
4489| 错误码ID | 错误信息                                    |
4490| -------- | ------------------------------------------- |
4491| 2300002  | System internal error.                      |
4492| 2301009  | Bad file descriptor.                            |
4493| 2303188  | Socket operation on non-socket. |
4494
4495**示例:**
4496
4497**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4498
4499```ts
4500import { common } from '@kit.AbilityKit';
4501
4502let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4503let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4504let sandboxPath: string = context.filesDir + '/testSocket';
4505let address : socket.LocalAddress = {
4506  address: sandboxPath
4507}
4508client.bind(address).then(() => {
4509  console.error('bind success');
4510  client.getLocalAddress().then((localPath: string) => {
4511    console.info("SUCCESS " + JSON.stringify(localPath));
4512  }).catch((err: BusinessError) => {
4513    console.error("FAIL " + JSON.stringify(err));
4514  })
4515}).catch((err: Object) => {
4516  console.info('failed to bind: ' + JSON.stringify(err));
4517})
4518```
4519
4520### on('message')<sup>11+</sup>
4521
4522on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void
4523
4524订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4525
4526**系统能力**:SystemCapability.Communication.NetStack
4527
4528**参数:**
4529
4530| 参数名   | 类型                                              | 必填 | 说明                                      |
4531| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
4532| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。 |
4533| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收的消息。|
4534
4535**错误码:**
4536
4537| 错误码ID | 错误信息                 |
4538| ------- | ----------------------- |
4539| 401     | Parameter error.        |
4540
4541**示例:**
4542
4543```ts
4544import { socket } from '@kit.NetworkKit';
4545
4546let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4547client.on('message', (value: socket.LocalSocketMessageInfo) => {
4548  const uintArray = new Uint8Array(value.message)
4549  let messageView = '';
4550  for (let i = 0; i < uintArray.length; i++) {
4551    messageView += String.fromCharCode(uintArray[i]);
4552  }
4553  console.log('total: ' + JSON.stringify(value));
4554  console.log('message infomation: ' + messageView);
4555});
4556```
4557
4558### off('message')<sup>11+</sup>
4559
4560off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
4561
4562取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。
4563
4564**系统能力**:SystemCapability.Communication.NetStack
4565
4566**参数:**
4567
4568| 参数名   | 类型                                               | 必填 | 说明                                 |
4569| -------- | ------------------------------------------------ | ---- | ----------------------------------- |
4570| type     | string                                           | 是   | 订阅的事件类型。'message':接收消息事件。 |
4571| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 指定传入on中的callback取消一个订阅。|
4572
4573**错误码:**
4574
4575| 错误码ID | 错误信息                 |
4576| ------- | ----------------------- |
4577| 401     | Parameter error.        |
4578
4579**示例:**
4580
4581```ts
4582import { socket } from '@kit.NetworkKit';
4583
4584let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4585let messageView = '';
4586let callback = (value: socket.LocalSocketMessageInfo) => {
4587  const uintArray = new Uint8Array(value.message)
4588  let messageView = '';
4589  for (let i = 0; i < uintArray.length; i++) {
4590    messageView += String.fromCharCode(uintArray[i]);
4591  }
4592  console.log('total: ' + JSON.stringify(value));
4593  console.log('message infomation: ' + messageView);
4594}
4595client.on('message', callback);
4596client.off('message');
4597```
4598
4599### on('connect')<sup>11+</sup>
4600
4601on(type: 'connect', callback: Callback\<void\>): void
4602
4603订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4604
4605**系统能力**:SystemCapability.Communication.NetStack
4606
4607**参数:**
4608
4609| 参数名   | 类型             | 必填 | 说明                                                         |
4610| -------- | ---------------- | ---- | --------------------------------------------------------- |
4611| type     | string           | 是   | 订阅的事件类型。                                             |
4612| callback | Callback\<void\> | 是   | 以callback的形式异步返回与服务端连接的结果。                     |
4613
4614**错误码:**
4615
4616| 错误码ID | 错误信息                 |
4617| ------- | ----------------------- |
4618| 401     | Parameter error.        |
4619
4620**示例:**
4621
4622```ts
4623import { socket } from '@kit.NetworkKit';
4624
4625let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4626client.on('connect', () => {
4627  console.log("on connect success")
4628});
4629```
4630
4631### off('connect')<sup>11+</sup>
4632
4633off(type: 'connect', callback?: Callback\<void\>): void
4634
4635取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。
4636
4637**系统能力**:SystemCapability.Communication.NetStack
4638
4639**参数:**
4640
4641| 参数名   | 类型             | 必填 | 说明                                                         |
4642| -------- | ---------------- | ---- | --------------------------------------------------------- |
4643| type     | string           | 是   | 订阅的事件类型。                                             |
4644| callback | Callback\<void\> | 否   | 指定传入on中的callback取消一个订阅。                           |
4645
4646**错误码:**
4647
4648| 错误码ID | 错误信息                 |
4649| ------- | ----------------------- |
4650| 401     | Parameter error.        |
4651
4652**示例:**
4653
4654```ts
4655import { socket } from '@kit.NetworkKit';
4656
4657let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4658let callback = () => {
4659  console.log("on connect success");
4660}
4661client.on('connect', callback);
4662// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4663client.off('connect', callback);
4664client.off('connect');
4665```
4666
4667### on('close')<sup>11+</sup>
4668
4669on(type: 'close', callback: Callback\<void\>): void
4670
4671订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4672
4673**系统能力**:SystemCapability.Communication.NetStack
4674
4675**参数:**
4676
4677| 参数名   | 类型             | 必填 | 说明                        |
4678| -------- | ---------------- | ---- | ------------------------ |
4679| type     | string           | 是   | 订阅LocalSocket的关闭事件。 |
4680| callback | Callback\<void\> | 是   | 以callback的形式异步返回关闭localsocket的结果。|
4681
4682**错误码:**
4683
4684| 错误码ID | 错误信息                 |
4685| ------- | ----------------------- |
4686| 401     | Parameter error.        |
4687
4688**示例:**
4689
4690```ts
4691import { socket } from '@kit.NetworkKit';
4692
4693let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4694let callback = () => {
4695  console.log("on close success");
4696}
4697client.on('close', callback);
4698```
4699
4700### off('close')<sup>11+</sup>
4701
4702off(type: 'close', callback?: Callback\<void\>): void
4703
4704订阅LocalSocket的关闭事件。使用callback方式作为异步方法。
4705
4706**系统能力**:SystemCapability.Communication.NetStack
4707
4708**参数:**
4709
4710| 参数名   | 类型             | 必填 | 说明                        |
4711| -------- | ---------------- | ---- | ------------------------ |
4712| type     | string           | 是   | 订阅LocalSocket的关闭事件。 |
4713| callback | Callback\<void\> | 否   | 取消指定传入on中的callback取消一个订阅。|
4714
4715**错误码:**
4716
4717| 错误码ID | 错误信息                 |
4718| ------- | ----------------------- |
4719| 401     | Parameter error.        |
4720
4721**示例:**
4722
4723```ts
4724import { socket } from '@kit.NetworkKit';
4725
4726let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4727let callback = () => {
4728  console.log("on close success");
4729}
4730client.on('close', callback);
4731// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4732client.off('close', callback);
4733client.off('close');
4734```
4735
4736### on('error')<sup>11+</sup>
4737
4738on(type: 'error', callback: ErrorCallback): void
4739
4740订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
4741
4742**系统能力**:SystemCapability.Communication.NetStack
4743
4744**参数:**
4745
4746| 参数名   | 类型          | 必填 | 说明                            |
4747| -------- | ------------- | ---- | ---------------------------- |
4748| type     | string        | 是   | 订阅LocalSocket的error事件。   |
4749| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
4750
4751**错误码:**
4752
4753| 错误码ID | 错误信息                 |
4754| ------- | ----------------------- |
4755| 401     | Parameter error.        |
4756
4757**示例:**
4758
4759```ts
4760import { socket } from '@kit.NetworkKit';
4761
4762let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4763client.on('error', (err: Object) => {
4764  console.log("on error, err:" + JSON.stringify(err))
4765});
4766```
4767
4768### off('error')<sup>11+</sup>
4769
4770off(type: 'error', callback?: ErrorCallback): void
4771
4772取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。
4773
4774**系统能力**:SystemCapability.Communication.NetStack
4775
4776**参数:**
4777
4778| 参数名   | 类型          | 必填 | 说明                             |
4779| -------- | ------------- | ---- | ----------------------------- |
4780| type     | string        | 是   | 取消订阅LocalSocket的error事件。 |
4781| callback | ErrorCallback | 否   | 指定传入on中的callback取消一个订阅。|
4782
4783**错误码:**
4784
4785| 错误码ID | 错误信息                 |
4786| ------- | ----------------------- |
4787| 401     | Parameter error.        |
4788
4789**示例:**
4790
4791```ts
4792import { socket } from '@kit.NetworkKit';
4793
4794let client: socket.LocalSocket = socket.constructLocalSocketInstance();
4795let callback = (err: Object) => {
4796  console.log("on error, err:" + JSON.stringify(err));
4797}
4798client.on('error', callback);
4799// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
4800client.off('error', callback);
4801client.off('error');
4802```
4803
4804## LocalSocketMessageInfo<sup>11+</sup>
4805
4806LocalSocket客户端与服务端通信时接收的数据。
4807
4808**系统能力**:SystemCapability.Communication.NetStack
4809
4810| 名称     | 类型            | 必填 | 说明               |
4811| ------- | --------------- | --- | ------------------ |
4812| message | ArrayBuffer     | 是   | 收到的消息数据。     |
4813| address | string          | 是   | 使用的本地套接字路径。|
4814| size    | number          | 是   | 数据长度。          |
4815
4816## LocalAddress<sup>11+</sup>
4817
4818LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。
4819
4820**系统能力**:SystemCapability.Communication.NetStack
4821
4822| 名称     | 类型       | 必填 | 说明               |
4823| ------- | ---------- | --- | ------------------ |
4824| address | string     | 是   | 本地套接字路径。     |
4825
4826## LocalConnectOptions<sup>11+</sup>
4827
4828LocalSocket客户端在连接服务端时传入的参数信息。
4829
4830**系统能力**:SystemCapability.Communication.NetStack
4831
4832| 名称     | 类型       | 必填 | 说明                            |
4833| ------- | ---------- | --- | ------------------------------ |
4834| address | [LocalAddress](#localaddress11)    | 是   | 指定的本地套接字路径。            |
4835| timeout | number     | 否   | 连接服务端的超时时间,单位为毫秒。  |
4836
4837## LocalSendOptions<sup>11+</sup>
4838
4839LocalSocket发送请求的参数。
4840
4841**系统能力**:SystemCapability.Communication.NetStack
4842
4843| 名称     | 类型       | 必填 | 说明                 |
4844| ------- | ---------- | --- | ------------------- |
4845| data    | string \| ArrayBuffer | 是   | 需要发送的数据。 |
4846| encoding | string   | 否   | 字符编码。  |
4847
4848## ExtraOptionsBase<sup>7+</sup>
4849
4850Socket套接字的基础属性。
4851
4852**系统能力**:SystemCapability.Communication.NetStack
4853
4854| 名称            | 类型    | 必填 | 说明                              |
4855| ----------------- | ------- | ---- | ----------------------------- |
4856| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte)。     |
4857| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte)。     |
4858| reuseAddress      | boolean | 否   | 是否重用地址。true:重用地址;false:不重用地址。                   |
4859| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。    |
4860
4861## socket.constructLocalSocketServerInstance<sup>11+</sup>
4862
4863constructLocalSocketServerInstance(): LocalSocketServer
4864
4865创建一个LocalSocketServer对象。
4866
4867**系统能力**:SystemCapability.Communication.NetStack
4868
4869**返回值:**
4870
4871| 类型                                | 说明                          |
4872| :---------------------------------- | :---------------------------- |
4873| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 |
4874
4875**示例:**
4876
4877```ts
4878import { socket } from '@kit.NetworkKit';
4879let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4880```
4881
4882## LocalSocketServer<sup>11+</sup>
4883
4884LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。
4885
4886### listen<sup>11+</sup>
4887
4888listen(address: LocalAddress): Promise\<void\>
4889
4890绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。
4891
4892> **说明:**
4893> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。
4894
4895**系统能力**:SystemCapability.Communication.NetStack
4896
4897**参数:**
4898
4899| 参数名  | 类型                      | 必填 | 说明                                          |
4900| ------- | ------------------------- | ---- | --------------------------------------------- |
4901| address | [LocalAddress](#localaddress11) | 是   | 目标地址信息。 |
4902
4903**返回值:**
4904
4905| 类型            | 说明                                                   |
4906| :-------------- | :---------------------------------------------------- |
4907| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。|
4908
4909**错误码:**
4910
4911| 错误码ID | 错误信息                      |
4912| -------- | --------------------------- |
4913| 401      | Parameter error.            |
4914| 2303109  | Bad file number.            |
4915| 2301013  | Insufficient permissions.   |
4916| 2301022  | Invalid argument.           |
4917| 2301098  | Address already in use.     |
4918
4919**示例:**
4920
4921**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4922
4923```ts
4924import { socket } from '@kit.NetworkKit';
4925import { common } from '@kit.AbilityKit';
4926
4927let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4928let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4929let sandboxPath: string = context.filesDir + '/testSocket';
4930let addr: socket.LocalAddress = {
4931  address: sandboxPath
4932}
4933server.listen(addr).then(() => {
4934  console.log('listen success');
4935}).catch((err: Object) => {
4936  console.error('listen fail: ' + JSON.stringify(err));
4937});
4938```
4939
4940### getState<sup>11+</sup>
4941
4942getState(): Promise\<SocketStateBase\>
4943
4944获取LocalSocketServer状态。使用Promise方式作为异步方法。
4945
4946> **说明:**
4947> listen方法调用成功后,才可调用此方法。
4948
4949**系统能力**:SystemCapability.Communication.NetStack
4950
4951**返回值:**
4952
4953| 类型                                         | 说明                                            |
4954| :------------------------------------------- | :--------------------------------------------- |
4955| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 |
4956
4957**示例:**
4958
4959**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)4960
4961```ts
4962import { socket } from '@kit.NetworkKit';
4963import { common } from '@kit.AbilityKit';
4964
4965let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
4966let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
4967let sandboxPath: string = context.filesDir + '/testSocket';
4968let listenAddr: socket.LocalAddress = {
4969  address: sandboxPath
4970}
4971server.listen(listenAddr).then(() => {
4972  console.log("listen success");
4973}).catch((err: Object) => {
4974  console.error("listen fail: " + JSON.stringify(err));
4975})
4976server.getState().then((data: socket.SocketStateBase) => {
4977  console.log('getState success: ' + JSON.stringify(data));
4978}).catch((err: Object) => {
4979  console.error('getState fail: ' + JSON.stringify(err));
4980});
4981```
4982
4983### setExtraOptions<sup>11+</sup>
4984
4985setExtraOptions(options: ExtraOptionsBase): Promise\<void\>
4986
4987设置LocalSocketServer连接的套接字属性,使用Promise方式作为异步方法。
4988
4989> **说明:**
4990> listen方法调用成功后,才可调用此方法。
4991
4992**系统能力**:SystemCapability.Communication.NetStack
4993
4994**参数:**
4995
4996| 参数名  | 类型                                      | 必填 | 说明                            |
4997| ------- | --------------------------------------- | ---- | ------------------------------ |
4998| options | [ExtraOptionsBase](#extraoptionsbase7) | 是   | LocalSocketServer连接的其他属性。 |
4999
5000**返回值:**
5001
5002| 类型            | 说明                                             |
5003| :-------------- | :---------------------------------------------- |
5004| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
5005
5006**错误码:**
5007
5008| 错误码ID | 错误信息                        |
5009| -------- | ------------------------------- |
5010| 401      | Parameter error.                |
5011| 2301009  | Bad file descriptor.            |
5012
5013**示例:**
5014
5015**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)5016
5017```ts
5018import { socket } from '@kit.NetworkKit';
5019import { common } from '@kit.AbilityKit';
5020
5021
5022let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5023let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5024let sandboxPath: string = context.filesDir + '/testSocket';
5025let listenAddr: socket.NetAddress = {
5026  address: sandboxPath
5027}
5028server.listen(listenAddr).then(() => {
5029  console.log("listen success");
5030}).catch((err: Object) => {
5031  console.error("listen fail: " + JSON.stringify(err));
5032})
5033
5034let options: socket.ExtraOptionsBase = {
5035  receiveBufferSize: 6000,
5036  sendBufferSize: 6000,
5037  socketTimeout: 3000
5038}
5039server.setExtraOptions(options).then(() => {
5040  console.log('setExtraOptions success');
5041}).catch((err: Object) => {
5042  console.error('setExtraOptions fail: ' + JSON.stringify(err));
5043});
5044```
5045
5046### getExtraOptions<sup>11+</sup>
5047
5048getExtraOptions(): Promise\<ExtraOptionsBase\>;
5049
5050获取LocalSocketServer中连接的套接字的属性,使用Promise方式作为异步方法。
5051
5052> **说明:**
5053> listen方法调用成功后,才可调用此方法。
5054
5055**系统能力**:SystemCapability.Communication.NetStack
5056
5057**返回值:**
5058
5059| 类型                         | 说明                        |
5060| :-------------------------- | :-------------------------- |
5061| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 |
5062
5063**错误码:**
5064
5065| 错误码ID | 错误信息               |
5066| -------- | -------------------- |
5067| 401     | Parameter error. |
5068
5069**示例:**
5070
5071**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)5072
5073```ts
5074import { socket } from '@kit.NetworkKit';
5075import { common } from '@kit.AbilityKit';
5076
5077let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5078let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5079let sandboxPath: string = context.filesDir + '/testSocket';
5080let listenAddr: socket.LocalAddress = {
5081  address: sandboxPath
5082}
5083server.listen(listenAddr).then(() => {
5084  console.log("listen success");
5085}).catch((err: Object) => {
5086  console.error("listen fail: " + JSON.stringify(err));
5087})
5088server.getExtraOptions().then((options: socket.ExtraOptionsBase) => {
5089  console.log('options: ' + JSON.stringify(options));
5090}).catch((err: Object) => {
5091  console.error('getExtraOptions fail: ' + JSON.stringify(err));
5092});
5093```
5094
5095### getLocalAddress<sup>12+</sup>
5096
5097getLocalAddress(): Promise\<string\>
5098
5099获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。
5100
5101> **说明:**
5102> listen方法调用成功后,才可调用此方法。
5103
5104**系统能力**:SystemCapability.Communication.NetStack
5105
5106**返回值:**
5107
5108| 类型            | 说明                                                 |
5109|  -------------- |  --------------------------------------------------- |
5110| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
5111
5112**错误码:**
5113
5114| 错误码ID | 错误信息                                    |
5115| -------- | ------------------------------------------- |
5116| 2300002  | System internal error.                      |
5117| 2301009  | Bad file descriptor.                            |
5118| 2303188  | Socket operation on non-socket. |
5119
5120**示例:**
5121
5122**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)5123
5124```ts
5125import { common } from '@kit.AbilityKit';
5126
5127let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5128let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5129let sandboxPath: string = context.filesDir + '/testSocket';
5130let listenAddr: socket.LocalAddress = {
5131  address: sandboxPath
5132}
5133server.listen(listenAddr).then(() => {
5134  console.info("listen success");
5135  server.getLocalAddress().then((localPath: string) => {
5136    console.info("SUCCESS " + JSON.stringify(localPath));
5137  }).catch((err: BusinessError) => {
5138    console.error("FAIL " + JSON.stringify(err));
5139  })
5140}).catch((err: Object) => {
5141  console.error("listen fail: " + JSON.stringify(err));
5142})
5143
5144```
5145
5146### on('connect')<sup>11+</sup>
5147
5148on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void
5149
5150订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
5151
5152> **说明:**
5153> listen方法调用成功后,才可调用此方法。
5154
5155**系统能力**:SystemCapability.Communication.NetStack
5156
5157**参数:**
5158
5159| 参数名   | 类型                            | 必填 | 说明                                  |
5160| -------- | ------------------------------- | ---- | ------------------------------------- |
5161| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
5162| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是   | 以callback的形式异步返回接收到客户端连接的结果。|
5163
5164**错误码:**
5165
5166| 错误码ID | 错误信息         |
5167| -------- | ---------------- |
5168| 401      | Parameter error. |
5169
5170**示例:**
5171
5172```ts
5173import { socket } from '@kit.NetworkKit';
5174
5175let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5176server.on('connect', (connection: socket.LocalSocketConnection) => {
5177  if (connection) {
5178    console.log('accept a client')
5179  }
5180});
5181```
5182
5183### off('connect')<sup>11+</sup>
5184
5185off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void
5186
5187取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。
5188
5189**系统能力**:SystemCapability.Communication.NetStack
5190
5191**参数:**
5192
5193| 参数名   | 类型                            | 必填 | 说明                                  |
5194| -------- | ------------------------------- | ---- | ------------------------------------- |
5195| type     | string                          | 是   | 订阅的事件类型。'connect':连接事件。 |
5196| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否   | 指定传入on的一个callback取消注册。|
5197
5198**错误码:**
5199
5200| 错误码ID | 错误信息         |
5201| -------- | ---------------- |
5202| 401      | Parameter error. |
5203
5204**示例:**
5205
5206```ts
5207import { socket } from '@kit.NetworkKit';
5208
5209let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5210let callback = (connection: socket.LocalSocketConnection) => {
5211  if (connection) {
5212    console.log('accept a client')
5213  }
5214}
5215server.on('connect', callback);
5216// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5217server.off('connect', callback);
5218server.off('connect');
5219```
5220
5221### on('error')<sup>11+</sup>
5222
5223on(type: 'error', callback: ErrorCallback): void
5224
5225订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
5226
5227> **说明:**
5228> listen方法调用成功后,才可调用此方法。
5229
5230**系统能力**:SystemCapability.Communication.NetStack
5231
5232**参数:**
5233
5234| 参数名   | 类型          | 必填 | 说明                                 |
5235| -------- | ------------- | ---- | ------------------------------------ |
5236| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5237| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
5238
5239**错误码:**
5240
5241| 错误码ID | 错误信息         |
5242| -------- | ---------------- |
5243| 401      | Parameter error. |
5244
5245**示例:**
5246
5247```ts
5248import { socket } from '@kit.NetworkKit';
5249
5250let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5251server.on('error', (err: Object) => {
5252  console.error("on error, err:" + JSON.stringify(err))
5253});
5254```
5255
5256### off('error')<sup>11+</sup>
5257
5258off(type: 'error', callback?: ErrorCallback): void
5259
5260取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。
5261
5262**系统能力**:SystemCapability.Communication.NetStack
5263
5264**参数:**
5265
5266| 参数名   | 类型          | 必填 | 说明                                 |
5267| -------- | ------------- | ---- | ------------------------------------ |
5268| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5269| callback | ErrorCallback | 否   | 指定传入on的一个callback取消订阅。   |
5270
5271**错误码:**
5272
5273| 错误码ID | 错误信息         |
5274| -------- | ---------------- |
5275| 401      | Parameter error. |
5276
5277**示例:**
5278
5279```ts
5280import { socket } from '@kit.NetworkKit';
5281
5282let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5283let callback = (err: Object) => {
5284  console.error("on error, err:" + JSON.stringify(err));
5285}
5286server.on('error', callback);
5287// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5288server.off('error', callback);
5289server.off('error');
5290```
5291
5292
5293## LocalSocketConnection<sup>11+</sup>
5294
5295LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。
5296
5297> **说明:**
5298> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。
5299
5300**系统能力**:SystemCapability.Communication.NetStack
5301
5302### 属性
5303
5304| 名称     | 类型   | 必填 | 说明                            |
5305| -------- | ------ | ---- | ---------------------------- |
5306| clientId | number | 是   | 客户端与服务端建立的会话连接的id。 |
5307
5308### send<sup>11+</sup>
5309
5310send(options: LocalSendOptions): Promise\<void\>
5311
5312通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。
5313
5314> **说明:**
5315> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。
5316
5317**系统能力**:SystemCapability.Communication.NetStack
5318
5319**参数:**
5320
5321| 参数名  | 类型                              | 必填 | 说明                                                         |
5322| ------- | --------------------------------- | ---- | -------------------------------------- |
5323| options | [LocalSendOptions](#localsendoptions11) | 是   | LocalSocketConnection发送请求的参数。 |
5324
5325**返回值:**
5326
5327| 类型            | 说明                                             |
5328| :-------------- | :---------------------------------------------- |
5329| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
5330
5331**错误码:**
5332
5333| 错误码ID | 错误信息               |
5334| -------- | ---------------------- |
5335| 401      | Parameter error.       |
5336| 2301011  | Operation would block. |
5337
5338**示例:**
5339
5340```ts
5341import { socket } from '@kit.NetworkKit';
5342
5343let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5344
5345server.on('connect', (connection: socket.LocalSocketConnection) => {
5346  let sendOptions: socket.LocalSendOptions = {
5347    data: 'Hello, client!'
5348  }
5349  connection.send(sendOptions).then(() => {
5350    console.log('send success');
5351  }).catch((err: Object) => {
5352    console.error('send fail: ' + JSON.stringify(err));
5353  });
5354});
5355```
5356
5357### close<sup>11+</sup>
5358
5359close(): Promise\<void\>
5360
5361关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。
5362
5363**系统能力**:SystemCapability.Communication.NetStack
5364
5365**返回值:**
5366
5367| 类型            | 说明                                         |
5368| :-------------- | :------------------------------------------- |
5369| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 |
5370
5371**错误码:**
5372
5373| 错误码ID | 错误信息               |
5374| -------- | -------------------- |
5375| 2301009  | Bad file descriptor. |
5376
5377**示例:**
5378
5379```ts
5380import { socket } from '@kit.NetworkKit';
5381
5382let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5383server.on('connect', (connection: socket.LocalSocketConnection) => {
5384  connection.close().then(() => {
5385    console.log('close success');
5386  }).catch((err: Object) => {
5387    console.error('close fail: ' + JSON.stringify(err));
5388  });
5389});
5390```
5391
5392### getLocalAddress<sup>12+</sup>
5393
5394getLocalAddress(): Promise\<string\>
5395
5396获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。
5397
5398**系统能力**:SystemCapability.Communication.NetStack
5399
5400**返回值:**
5401
5402| 类型            | 说明                                                 |
5403|  -------------- |  --------------------------------------------------- |
5404| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 |
5405
5406**错误码:**
5407
5408| 错误码ID | 错误信息                                    |
5409| -------- | ------------------------------------------- |
5410| 2300002  | System internal error.                      |
5411| 2301009  | Bad file descriptor.                            |
5412| 2303188  | Socket operation on non-socket. |
5413
5414**示例:**
5415
5416**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)5417
5418```ts
5419import { common } from '@kit.AbilityKit';
5420
5421let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5422let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5423let sandboxPath: string = context.filesDir + '/testSocket';
5424let localAddr: socket.LocalAddress = {
5425  address: sandboxPath
5426}
5427server.listen(localAddr).then(() => {
5428  console.info('listen success');
5429  let client: socket.LocalSocket = socket.constructLocalSocketInstance();
5430  let connectOpt: socket.LocalConnectOptions = {
5431    address: localAddr,
5432    timeout: 6000
5433  }
5434  client.connect(connectOpt).then(() => {
5435    server.getLocalAddress().then((localPath: string) => {
5436      console.info("success, localPath is" + JSON.stringify(localPath));
5437    }).catch((err: BusinessError) => {
5438      console.error("FAIL " + JSON.stringify(err));
5439    })
5440  }).catch((err: Object) => {
5441    console.error('connect fail: ' + JSON.stringify(err));
5442  });
5443});
5444```
5445
5446### on('message')<sup>11+</sup>
5447
5448on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void
5449
5450订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
5451
5452**系统能力**:SystemCapability.Communication.NetStack
5453
5454**参数:**
5455
5456| 参数名   | 类型                                              | 必填 | 说明                                     |
5457| -------- | ----------------------------------------------- | ---- | --------------------------------------- |
5458| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。     |
5459| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是   | 以callback的形式异步返回接收到的来自客户端的消息。 |
5460
5461**错误码:**
5462
5463| 错误码ID | 错误信息         |
5464| -------- | ---------------- |
5465| 401      | Parameter error. |
5466
5467**示例:**
5468
5469**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)5470
5471```ts
5472import { socket } from '@kit.NetworkKit';
5473import { common } from '@kit.AbilityKit';
5474
5475let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5476let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
5477let sandboxPath: string = context.filesDir + '/testSocket';
5478let listenAddr: socket.LocalAddress = {
5479  address: sandboxPath
5480}
5481server.listen(listenAddr).then(() => {
5482  console.log("listen success");
5483}).catch((err: Object) => {
5484  console.error("listen fail: " + JSON.stringify(err));
5485});
5486server.on('connect', (connection: socket.LocalSocketConnection) => {
5487  connection.on('message', (value: socket.LocalSocketMessageInfo) => {
5488    const uintArray = new Uint8Array(value.message);
5489    let messageView = '';
5490    for (let i = 0; i < uintArray.length; i++) {
5491      messageView += String.fromCharCode(uintArray[i]);
5492    }
5493    console.log('total: ' + JSON.stringify(value));
5494    console.log('message infomation: ' + messageView);
5495  });
5496});
5497```
5498
5499### off('message')<sup>11+</sup>
5500
5501off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void
5502
5503取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
5504
5505**系统能力**:SystemCapability.Communication.NetStack
5506
5507**参数:**
5508
5509| 参数名   | 类型                                              | 必填 | 说明                                 |
5510| -------- | ----------------------------------------------- | ---- | ----------------------------------- |
5511| type     | string                                          | 是   | 订阅的事件类型。'message':接收消息事件。 |
5512| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否   | 指定传入on的一个callback取消注册。 |
5513
5514**错误码:**
5515
5516| 错误码ID | 错误信息         |
5517| -------- | ---------------- |
5518| 401      | Parameter error. |
5519
5520**示例:**
5521
5522```ts
5523import { socket } from '@kit.NetworkKit';
5524
5525let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5526let callback = (value: socket.LocalSocketMessageInfo) => {
5527  const uintArray = new Uint8Array(value.message)
5528  let messageView = '';
5529  for (let i = 0; i < uintArray.length; i++) {
5530    messageView += String.fromCharCode(uintArray[i]);
5531  }
5532  console.log('total: ' + JSON.stringify(value));
5533  console.log('message infomation: ' + messageView);
5534}
5535server.on('connect', (connection: socket.LocalSocketConnection) => {
5536  connection.on('message', callback);
5537  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5538  connection.off('message', callback);
5539  connection.off('message');
5540});
5541```
5542
5543### on('close')<sup>11+</sup>
5544
5545on(type: 'close', callback: Callback\<void\>): void
5546
5547订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
5548
5549**系统能力**:SystemCapability.Communication.NetStack
5550
5551**参数:**
5552
5553| 参数名   | 类型             | 必填 | 说明                                |
5554| -------- | ---------------- | ---- | ----------------------------------- |
5555| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
5556| callback | Callback\<void\> | 是   | 以callback的形式异步返回会话关闭的结果。 |
5557
5558**错误码:**
5559
5560| 错误码ID | 错误信息         |
5561| -------- | ---------------- |
5562| 401      | Parameter error. |
5563
5564**示例:**
5565
5566```ts
5567import { socket } from '@kit.NetworkKit';
5568
5569let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5570server.on('connect', (connection: socket.LocalSocketConnection) => {
5571  connection.on('close', () => {
5572    console.log("on close success")
5573  });
5574});
5575```
5576
5577### off('close')<sup>11+</sup>
5578
5579off(type: 'close', callback?: Callback\<void\>): void
5580
5581取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。
5582
5583**系统能力**:SystemCapability.Communication.NetStack
5584
5585**参数:**
5586
5587| 参数名   | 类型             | 必填 | 说明                                |
5588| -------- | ---------------- | ---- | ----------------------------------- |
5589| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
5590| callback | Callback\<void\> | 否   | 指定传入on的一个callback取消订阅。 |
5591
5592**错误码:**
5593
5594| 错误码ID | 错误信息         |
5595| -------- | ---------------- |
5596| 401      | Parameter error. |
5597
5598**示例:**
5599
5600```ts
5601import { socket } from '@kit.NetworkKit';
5602
5603let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5604let callback = () => {
5605  console.log("on close success");
5606}
5607server.on('connect', (connection: socket.LocalSocketConnection) => {
5608  connection.on('close', callback);
5609  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5610  connection.off('close', callback);
5611  connection.off('close');
5612});
5613```
5614
5615### on('error')<sup>11+</sup>
5616
5617on(type: 'error', callback: ErrorCallback): void
5618
5619订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
5620
5621**系统能力**:SystemCapability.Communication.NetStack
5622
5623**参数:**
5624
5625| 参数名   | 类型          | 必填 | 说明                                 |
5626| -------- | ------------- | ---- | ------------------------------------ |
5627| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5628| callback | ErrorCallback | 是   | 以callback的形式异步返回出现错误的结果。|
5629
5630**错误码:**
5631
5632| 错误码ID | 错误信息         |
5633| -------- | ---------------- |
5634| 401      | Parameter error. |
5635
5636**示例:**
5637
5638```ts
5639import { socket } from '@kit.NetworkKit';
5640
5641let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5642server.on('connect', (connection: socket.LocalSocketConnection) => {
5643  connection.on('error', (err: Object) => {
5644    console.error("on error, err:" + JSON.stringify(err))
5645  });
5646});
5647```
5648
5649### off('error')<sup>11+</sup>
5650
5651off(type: 'error', callback?: ErrorCallback): void
5652
5653取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。
5654
5655**系统能力**:SystemCapability.Communication.NetStack
5656
5657**参数:**
5658
5659| 参数名   | 类型          | 必填 | 说明                                 |
5660| -------- | ------------- | ---- | ------------------------------------ |
5661| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
5662| callback | ErrorCallback | 否   | 指定传入on的一个callback取消订阅。   |
5663
5664**错误码:**
5665
5666| 错误码ID | 错误信息         |
5667| -------- | ---------------- |
5668| 401      | Parameter error. |
5669
5670**示例:**
5671
5672```ts
5673import { socket } from '@kit.NetworkKit';
5674
5675let callback = (err: Object) => {
5676  console.error("on error, err: " + JSON.stringify(err));
5677}
5678let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance();
5679server.on('connect', (connection: socket.LocalSocketConnection) => {
5680  connection.on('error', callback);
5681  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
5682  connection.off('error', callback);
5683  connection.off('error');
5684});
5685```
5686
5687## LocalSocket 错误码说明
5688
5689LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。
5690
5691错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)
5692
5693## socket.constructTLSSocketInstance<sup>9+</sup>
5694
5695constructTLSSocketInstance(): TLSSocket
5696
5697创建并返回一个TLSSocket对象。
5698
5699**系统能力**:SystemCapability.Communication.NetStack
5700
5701**返回值:**
5702
5703| 类型                               | 说明                    |
5704|  --------------------------------- |  ---------------------- |
5705| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
5706
5707**示例:**
5708
5709```ts
5710import { socket } from '@kit.NetworkKit';
5711
5712let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5713```
5714
5715## socket.constructTLSSocketInstance<sup>12+</sup>
5716
5717constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket
5718
5719将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。
5720
5721> **说明:**
5722> 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。
5723
5724**系统能力**:SystemCapability.Communication.NetStack
5725
5726**参数:**
5727
5728| 参数名       | 类型 | 必填 | 说明                     |
5729|-----------|----| ---- |------------------------|
5730| tcpSocket | [TCPSocket](#tcpsocket)   | 是   | 需要进行升级的TCPSocket对象。 |
5731
5732**返回值:**
5733
5734| 类型                               | 说明                    |
5735|  --------------------------------- |  ---------------------- |
5736| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
5737
5738**错误码:**
5739
5740| 错误码ID   | 错误信息                             |
5741|---------|----------------------------------|
5742| 401     | Parameter error.  |
5743| 2300002 | System internal error.  |
5744| 2303601 | Invalid socket FD.     |
5745| 2303602 | Socket is not connected.  |
5746
5747**示例:**
5748
5749```ts
5750import { socket } from '@kit.NetworkKit';
5751import { BusinessError } from '@kit.BasicServicesKit';
5752
5753let tcp: socket.TCPSocket = socket.constructTCPSocketInstance();
5754let connAddress: socket.TCPConnectOptions = {
5755  address: '192.168.xx.xxx',
5756  port: 8080
5757};
5758let tcpconnectoptions: socket.TCPConnectOptions = {
5759  address: connAddress,
5760  timeout: 6000
5761}
5762
5763tcp.connect(tcpconnectoptions, (err: BusinessError) => {
5764  if (err) {
5765    console.log('connect fail');
5766    return;
5767  }
5768  console.log('connect success');
5769
5770  // 确保TCPSocket已连接后,再升级TLSSocket
5771  let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp);
5772})
5773```
5774
5775## TLSSocket<sup>9+</sup>
5776
5777TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。
5778
5779### bind<sup>9+</sup>
5780
5781bind(address: NetAddress, callback: AsyncCallback\<void\>): void
5782
5783绑定IP地址和端口。使用callback方法作为异步方法。
5784
5785> **说明:**
5786> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。
5787
5788**需要权限**:ohos.permission.INTERNET
5789
5790**系统能力**:SystemCapability.Communication.NetStack
5791
5792**参数:**
5793
5794| 参数名   | 类型                               | 必填 | 说明                                                   |
5795| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
5796| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
5797| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。|
5798
5799**错误码:**
5800
5801| 错误码ID | 错误信息                 |
5802| ------- | ----------------------- |
5803| 401     | Parameter error.        |
5804| 201     | Permission denied.      |
5805| 2303198 | Address already in use. |
5806| 2300002 | System internal error.  |
5807
5808**示例:**
5809
5810```ts
5811import { socket } from '@kit.NetworkKit';
5812import { BusinessError } from '@kit.BasicServicesKit';
5813
5814let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5815let bindAddr: socket.NetAddress = {
5816  address: '192.168.xx.xxx',
5817  port: 8080
5818}
5819tls.bind(bindAddr, (err: BusinessError) => {
5820  if (err) {
5821    console.log('bind fail');
5822    return;
5823  }
5824  console.log('bind success');
5825});
5826```
5827
5828### bind<sup>9+</sup>
5829
5830bind(address: NetAddress): Promise\<void\>
5831
5832绑定IP地址和端口。使用Promise方法作为异步方法。
5833
5834> **说明:**
5835> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。
5836
5837**需要权限**:ohos.permission.INTERNET
5838
5839**系统能力**:SystemCapability.Communication.NetStack
5840
5841**参数:**
5842
5843| 参数名  | 类型                               | 必填 | 说明                                                   |
5844| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
5845| address | [NetAddress](#netaddress)          | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
5846
5847**返回值:**
5848
5849| 类型            | 说明                                                     |
5850|  -------------- |  ------------------------------------------------------- |
5851| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 |
5852
5853**错误码:**
5854
5855| 错误码ID | 错误信息                 |
5856| ------- | ----------------------- |
5857| 401     | Parameter error.        |
5858| 201     | Permission denied.      |
5859| 2303198 | Address already in use. |
5860| 2300002 | System internal error.  |
5861
5862**示例:**
5863
5864```ts
5865import { socket } from '@kit.NetworkKit';
5866import { BusinessError } from '@kit.BasicServicesKit';
5867
5868let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5869let bindAddr: socket.NetAddress = {
5870  address: '192.168.xx.xxx',
5871  port: 8080
5872}
5873tls.bind(bindAddr).then(() => {
5874  console.log('bind success');
5875}).catch((err: BusinessError) => {
5876  console.log('bind fail');
5877});
5878```
5879
5880### getState<sup>9+</sup>
5881
5882getState(callback: AsyncCallback\<SocketStateBase\>): void
5883
5884在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。
5885
5886**系统能力**:SystemCapability.Communication.NetStack
5887
5888**参数:**
5889
5890| 参数名   | 类型                                                   | 必填 | 说明       |
5891| -------- | ------------------------------------------------------ | ---- | ---------- |
5892| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 |
5893
5894**错误码:**
5895
5896| 错误码ID | 错误信息                        |
5897| ------- | ------------------------------ |
5898| 2303188 | Socket operation on non-socket.|
5899| 2300002 | System internal error.         |
5900
5901**示例:**
5902
5903```ts
5904import { socket } from '@kit.NetworkKit';
5905import { BusinessError } from '@kit.BasicServicesKit';
5906
5907let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5908let bindAddr: socket.NetAddress = {
5909  address: '192.168.xx.xxx',
5910  port: 8080
5911}
5912tls.bind(bindAddr, (err: BusinessError) => {
5913  if (err) {
5914    console.log('bind fail');
5915    return;
5916  }
5917  console.log('bind success');
5918});
5919tls.getState((err: BusinessError, data: socket.SocketStateBase) => {
5920  if (err) {
5921    console.log('getState fail');
5922    return;
5923  }
5924  console.log('getState success:' + JSON.stringify(data));
5925});
5926```
5927
5928### getState<sup>9+</sup>
5929
5930getState(): Promise\<SocketStateBase\>
5931
5932在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。
5933
5934**系统能力**:SystemCapability.Communication.NetStack
5935
5936**返回值:**
5937
5938| 类型                                             | 说明                                       |
5939|  ----------------------------------------------- |  ----------------------------------------- |
5940| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。|
5941
5942**错误码:**
5943
5944| 错误码ID | 错误信息                        |
5945| ------- | ------------------------------ |
5946| 2303188 | Socket operation on non-socket.|
5947| 2300002 | System internal error.         |
5948
5949**示例:**
5950
5951```ts
5952import { socket } from '@kit.NetworkKit';
5953import { BusinessError } from '@kit.BasicServicesKit';
5954
5955let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
5956let bindAddr: socket.NetAddress = {
5957  address: '192.168.xx.xxx',
5958  port: 8080
5959}
5960tls.bind(bindAddr, (err: BusinessError) => {
5961  if (err) {
5962    console.log('bind fail');
5963    return;
5964  }
5965  console.log('bind success');
5966});
5967tls.getState().then(() => {
5968  console.log('getState success');
5969}).catch((err: BusinessError) => {
5970  console.log('getState fail');
5971});
5972```
5973
5974### setExtraOptions<sup>9+</sup>
5975
5976setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
5977
5978在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
5979
5980**系统能力**:SystemCapability.Communication.NetStack
5981
5982**参数:**
5983
5984| 参数名   | 类型                                      | 必填 | 说明                                                         |
5985| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
5986| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
5987| callback | AsyncCallback\<void\>                     | 是   | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。|
5988
5989**错误码:**
5990
5991| 错误码ID | 错误信息                        |
5992| ------- | -----------------------------  |
5993| 401     | Parameter error.               |
5994| 2303188 | Socket operation on non-socket.|
5995| 2300002 | System internal error.         |
5996
5997**示例:**
5998
5999```ts
6000import { socket } from '@kit.NetworkKit';
6001import { BusinessError } from '@kit.BasicServicesKit';
6002
6003let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6004let bindAddr: socket.NetAddress = {
6005  address: '192.168.xx.xxx',
6006  port: 8080
6007}
6008tls.bind(bindAddr, (err: BusinessError) => {
6009  if (err) {
6010    console.log('bind fail');
6011    return;
6012  }
6013  console.log('bind success');
6014});
6015
6016interface SocketLinger {
6017  on: boolean;
6018  linger: number;
6019}
6020
6021let tcpExtraOptions: socket.TCPExtraOptions = {
6022  keepAlive: true,
6023  OOBInline: true,
6024  TCPNoDelay: true,
6025  socketLinger: { on: true, linger: 10 } as SocketLinger,
6026  receiveBufferSize: 1000,
6027  sendBufferSize: 1000,
6028  reuseAddress: true,
6029  socketTimeout: 3000
6030}
6031tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
6032  if (err) {
6033    console.log('setExtraOptions fail');
6034    return;
6035  }
6036  console.log('setExtraOptions success');
6037});
6038```
6039
6040### setExtraOptions<sup>9+</sup>
6041
6042setExtraOptions(options: TCPExtraOptions): Promise\<void\>
6043
6044在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
6045
6046**系统能力**:SystemCapability.Communication.NetStack
6047
6048**参数:**
6049
6050| 参数名  | 类型                                      | 必填 | 说明                                                         |
6051| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
6052| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
6053
6054**返回值:**
6055
6056| 类型            | 说明                                                 |
6057|  -------------- |  --------------------------------------------------- |
6058| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 |
6059
6060**错误码:**
6061
6062| 错误码ID | 错误信息                        |
6063| ------- | ------------------------------ |
6064| 401     | Parameter error.               |
6065| 2303188 | Socket operation on non-socket.|
6066| 2300002 | System internal error.         |
6067
6068**示例:**
6069
6070```ts
6071import { socket } from '@kit.NetworkKit';
6072import { BusinessError } from '@kit.BasicServicesKit';
6073
6074let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6075let bindAddr: socket.NetAddress = {
6076  address: '192.168.xx.xxx',
6077  port: 8080
6078}
6079tls.bind(bindAddr, (err: BusinessError) => {
6080  if (err) {
6081    console.log('bind fail');
6082    return;
6083  }
6084  console.log('bind success');
6085});
6086
6087interface SocketLinger {
6088  on: boolean;
6089  linger: number;
6090}
6091
6092let tcpExtraOptions: socket.TCPExtraOptions = {
6093  keepAlive: true,
6094  OOBInline: true,
6095  TCPNoDelay: true,
6096  socketLinger: { on: true, linger: 10 } as SocketLinger,
6097  receiveBufferSize: 1000,
6098  sendBufferSize: 1000,
6099  reuseAddress: true,
6100  socketTimeout: 3000
6101}
6102tls.setExtraOptions(tcpExtraOptions).then(() => {
6103  console.log('setExtraOptions success');
6104}).catch((err: BusinessError) => {
6105  console.log('setExtraOptions fail');
6106});
6107```
6108
6109### on('message')<sup>9+</sup>
6110
6111on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
6112
6113订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
6114
6115**系统能力**:SystemCapability.Communication.NetStack
6116
6117**参数:**
6118
6119| 参数名   | 类型                                                         | 必填 | 说明                                      |
6120| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
6121| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
6122| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 |
6123
6124**错误码:**
6125
6126| 错误码ID | 错误信息                        |
6127| ------- | ------------------------------ |
6128| 401     | Parameter error.               |
6129
6130**示例:**
6131
6132```ts
6133import { socket } from '@kit.NetworkKit';
6134import { BusinessError } from '@kit.BasicServicesKit';
6135
6136let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6137let messageView = '';
6138tls.on('message', (value: socket.SocketMessageInfo) => {
6139  for (let i: number = 0; i < value.message.byteLength; i++) {
6140    let uint8Array = new Uint8Array(value.message)
6141    let messages = uint8Array[i]
6142    let message = String.fromCharCode(messages);
6143    messageView += message;
6144  }
6145  console.log('on message message: ' + JSON.stringify(messageView));
6146  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
6147});
6148```
6149
6150### off('message')<sup>9+</sup>
6151
6152off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
6153
6154取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
6155
6156**系统能力**:SystemCapability.Communication.NetStack
6157
6158**参数:**
6159
6160| 参数名   | 类型                                                         | 必填 | 说明                                      |
6161| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
6162| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
6163| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 |
6164
6165**错误码:**
6166
6167| 错误码ID | 错误信息                        |
6168| ------- | ------------------------------ |
6169| 401     | Parameter error.               |
6170
6171**示例:**
6172
6173```ts
6174import { socket } from '@kit.NetworkKit';
6175import { BusinessError } from '@kit.BasicServicesKit';
6176
6177let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6178let messageView = '';
6179let callback = (value: socket.SocketMessageInfo) => {
6180  for (let i: number = 0; i < value.message.byteLength; i++) {
6181    let uint8Array = new Uint8Array(value.message)
6182    let messages = uint8Array[i]
6183    let message = String.fromCharCode(messages);
6184    messageView += message;
6185  }
6186  console.log('on message message: ' + JSON.stringify(messageView));
6187  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
6188}
6189tls.on('message', callback);
6190// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6191tls.off('message', callback);
6192```
6193### on('connect' | 'close')<sup>9+</sup>
6194
6195on(type: 'connect' | 'close', callback: Callback\<void\>): void
6196
6197订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
6198
6199**系统能力**:SystemCapability.Communication.NetStack
6200
6201**参数:**
6202
6203| 参数名   | 类型             | 必填 | 说明                                                         |
6204| -------- | ---------------- | ---- | ------------------------------------------------------------ |
6205| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
6206| callback | Callback\<void\> | 是   | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。                                                   |
6207
6208**错误码:**
6209
6210| 错误码ID | 错误信息                        |
6211| ------- | ------------------------------ |
6212| 401     | Parameter error.               |
6213
6214**示例:**
6215
6216```ts
6217import { socket } from '@kit.NetworkKit';
6218import { BusinessError } from '@kit.BasicServicesKit';
6219
6220let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6221tls.on('connect', () => {
6222  console.log("on connect success")
6223});
6224tls.on('close', () => {
6225  console.log("on close success")
6226});
6227```
6228
6229### off('connect' | 'close')<sup>9+</sup>
6230
6231off(type: 'connect' | 'close', callback?: Callback\<void\>): void
6232
6233取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
6234
6235**系统能力**:SystemCapability.Communication.NetStack
6236
6237**参数:**
6238
6239| 参数名   | 类型             | 必填 | 说明                                                         |
6240| -------- | ---------------- | ---- | ------------------------------------------------------------ |
6241| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
6242| callback | Callback\<void\> | 否   | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。          |
6243
6244**错误码:**
6245
6246| 错误码ID | 错误信息                        |
6247| ------- | ------------------------------ |
6248| 401     | Parameter error.               |
6249
6250**示例:**
6251
6252```ts
6253import { socket } from '@kit.NetworkKit';
6254import { BusinessError } from '@kit.BasicServicesKit';
6255
6256let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6257let callback1 = () => {
6258  console.log("on connect success");
6259}
6260tls.on('connect', callback1);
6261// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6262tls.off('connect', callback1);
6263tls.off('connect');
6264let callback2 = () => {
6265  console.log("on close success");
6266}
6267tls.on('close', callback2);
6268// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6269tls.off('close', callback2);
6270```
6271
6272### on('error')<sup>9+</sup>
6273
6274on(type: 'error', callback: ErrorCallback): void
6275
6276订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
6277
6278**系统能力**:SystemCapability.Communication.NetStack
6279
6280**参数:**
6281
6282| 参数名   | 类型          | 必填 | 说明                                 |
6283| -------- | ------------- | ---- | ------------------------------------ |
6284| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
6285| callback | ErrorCallback | 是   | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。        |
6286
6287**错误码:**
6288
6289| 错误码ID | 错误信息                        |
6290| ------- | ------------------------------ |
6291| 401     | Parameter error.               |
6292
6293**示例:**
6294
6295```ts
6296import { socket } from '@kit.NetworkKit';
6297import { BusinessError } from '@kit.BasicServicesKit';
6298
6299let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6300tls.on('error', (err: BusinessError) => {
6301  console.log("on error, err:" + JSON.stringify(err))
6302});
6303```
6304
6305### off('error')<sup>9+</sup>
6306
6307off(type: 'error', callback?: ErrorCallback): void
6308
6309取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
6310
6311**系统能力**:SystemCapability.Communication.NetStack
6312
6313**参数:**
6314
6315| 参数名   | 类型          | 必填 | 说明                                 |
6316| -------- | ------------- | ---- | ------------------------------------ |
6317| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
6318| callback | ErrorCallback | 否   | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。                           |
6319
6320**错误码:**
6321
6322| 错误码ID | 错误信息                        |
6323| ------- | ------------------------------ |
6324| 401     | Parameter error.               |
6325
6326**示例:**
6327
6328```ts
6329import { socket } from '@kit.NetworkKit';
6330import { BusinessError } from '@kit.BasicServicesKit';
6331
6332let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6333let callback = (err: BusinessError) => {
6334  console.log("on error, err:" + JSON.stringify(err));
6335}
6336tls.on('error', callback);
6337// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
6338tls.off('error', callback);
6339```
6340
6341### connect<sup>9+</sup>
6342
6343connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
6344
6345在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。
6346
6347**系统能力**:SystemCapability.Communication.NetStack
6348
6349**参数:**
6350
6351| 参数名   | 类型                                   | 必填 | 说明 |
6352| -------- | ---------------------------------------| ----| --------------- |
6353| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocket连接所需要的参数。|
6354| callback | AsyncCallback\<void\>                  | 是   | 回调函数,成功无返回,失败返回错误码、错误信息。|
6355
6356**错误码:**
6357
6358| 错误码ID | 错误信息                                      |
6359| ------- | -------------------------------------------- |
6360| 401     | Parameter error.                             |
6361| 2303104 | Interrupted system call.                     |
6362| 2303109 | Bad file number.                             |
6363| 2303111 | Resource temporarily unavailable. Try again. |
6364| 2303188 | Socket operation on non-socket.              |
6365| 2303191 | Incorrect socket protocol type.              |
6366| 2303198 | Address already in use.                      |
6367| 2303199 | Cannot assign requested address.             |
6368| 2303210 | Connection timed out.                        |
6369| 2303501 | SSL is null.                                 |
6370| 2303502 | An error occurred when reading data on the TLS socket.|
6371| 2303503 | An error occurred when writing data on the TLS socket.|
6372| 2303505 | An error occurred in the TLS system call.    |
6373| 2303506 | Failed to close the TLS connection.          |
6374| 2300002 | System internal error.                       |
6375| 2301206 | Socks5 failed to connect to the proxy server.  |
6376| 2301207 | Socks5 username or password is invalid.        |
6377| 2301208 | Socks5 failed to connect to the remote server. |
6378| 2301209 | Socks5 failed to negotiate the authentication method. |
6379| 2301210 | Socks5 failed to send the message.             |
6380| 2301211 | Socks5 failed to receive the message.          |
6381| 2301212 | Socks5 serialization error.                    |
6382| 2301213 | Socks5 deserialization error.                  |
6383
6384**示例:**
6385
6386```ts
6387import { socket } from '@kit.NetworkKit';
6388import { BusinessError } from '@kit.BasicServicesKit';
6389
6390let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
6391let bindAddr: socket.NetAddress = {
6392  address: '0.0.0.0',
6393}
6394tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6395  if (err) {
6396    console.log('bind fail');
6397    return;
6398  }
6399  console.log('bind success');
6400});
6401let twoWayNetAddr: socket.NetAddress = {
6402  address: '192.168.xx.xxx',
6403  port: 8080
6404}
6405let twoWaySecureOptions: socket.TLSSecureOptions = {
6406  key: "xxxx",
6407  cert: "xxxx",
6408  ca: ["xxxx"],
6409  password: "xxxx",
6410  protocols: socket.Protocol.TLSv12,
6411  useRemoteCipherPrefer: true,
6412  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6413  cipherSuite: "AES256-SHA256"
6414}
6415let tlsConnectOptions: socket.TLSConnectOptions = {
6416  address: twoWayNetAddr,
6417  secureOptions: twoWaySecureOptions,
6418  ALPNProtocols: ["spdy/1", "http/1.1"]
6419}
6420
6421tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => {
6422  console.error("connect callback error" + err);
6423});
6424
6425let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
6426tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6427  if (err) {
6428    console.log('bind fail');
6429    return;
6430  }
6431  console.log('bind success');
6432});
6433let oneWayNetAddr: socket.NetAddress = {
6434  address: '192.168.xx.xxx',
6435  port: 8080
6436}
6437let oneWaySecureOptions: socket.TLSSecureOptions = {
6438  ca: ["xxxx", "xxxx"],
6439  cipherSuite: "AES256-SHA256"
6440}
6441let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6442  address: oneWayNetAddr,
6443  secureOptions: oneWaySecureOptions
6444}
6445tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => {
6446  console.error("connect callback error" + err);
6447});
6448```
6449
6450**示例(设置socket代理):**
6451
6452```ts
6453import { socket } from '@kit.NetworkKit';
6454import { BusinessError } from '@kit.BasicServicesKit';
6455
6456let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // 双向认证
6457let bindAddr: socket.NetAddress = {
6458  address: '0.0.0.0',
6459}
6460tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6461  if (err) {
6462    console.log('bind fail');
6463    return;
6464  }
6465  console.log('bind success');
6466});
6467let twoWayNetAddr: socket.NetAddress = {
6468  address: '192.168.xx.xxx',
6469  port: 8080
6470}
6471let socks5Server: socket.NetAddress = {
6472  address: '192.168.xx.xxx',
6473  port: 8080
6474}
6475let twoWaySecureOptions: socket.TLSSecureOptions = {
6476  key: "xxxx",
6477  cert: "xxxx",
6478  ca: ["xxxx"],
6479  password: "xxxx",
6480  protocols: socket.Protocol.TLSv12,
6481  useRemoteCipherPrefer: true,
6482  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6483  cipherSuite: "AES256-SHA256"
6484}
6485let tlsConnectOptions: socket.TLSConnectOptions = {
6486  address: twoWayNetAddr,
6487  secureOptions: twoWaySecureOptions,
6488  ALPNProtocols: ["spdy/1", "http/1.1"],
6489  proxy: socket.ProxyOptions = {
6490    type : 1,
6491    address: socks5Server,
6492    username: "xxx",
6493    password: "xxx"
6494  }
6495}
6496
6497tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => {
6498  console.error("connect callback error" + err);
6499});
6500
6501let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证
6502tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6503  if (err) {
6504    console.log('bind fail');
6505    return;
6506  }
6507  console.log('bind success');
6508});
6509let oneWayNetAddr: socket.NetAddress = {
6510  address: '192.168.xx.xxx',
6511  port: 8080
6512}
6513let oneWaySecureOptions: socket.TLSSecureOptions = {
6514  ca: ["xxxx", "xxxx"],
6515  cipherSuite: "AES256-SHA256"
6516}
6517let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6518  address: oneWayNetAddr,
6519  secureOptions: oneWaySecureOptions,
6520  proxy: socket.ProxyOptions = {
6521    type : 1,
6522    address: socks5Server,
6523    username: "xxx",
6524    password: "xxx"
6525  }
6526}
6527tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => {
6528  console.error("connect callback error" + err);
6529});
6530```
6531
6532### connect<sup>9+</sup>
6533
6534connect(options: TLSConnectOptions): Promise\<void\>
6535
6536在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。
6537
6538**系统能力**:SystemCapability.Communication.NetStack
6539
6540**参数:**
6541
6542| 参数名   | 类型                                   | 必填 | 说明 |
6543| -------- | --------------------------------------| ----| --------------- |
6544| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。|
6545
6546**返回值:**
6547
6548| 类型                                        | 说明                          |
6549| ------------------------------------------- | ----------------------------- |
6550| Promise\<void\>                              | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。|
6551
6552**错误码:**
6553
6554| 错误码ID | 错误信息                                      |
6555| ------- | -------------------------------------------- |
6556| 401     | Parameter error.                             |
6557| 2303104 | Interrupted system call.                     |
6558| 2303109 | Bad file number.                             |
6559| 2303111 | Resource temporarily unavailable. Try again. |
6560| 2303188 | Socket operation on non-socket.              |
6561| 2303191 | Incorrect socket protocol type.              |
6562| 2303198 | Address already in use.                      |
6563| 2303199 | Cannot assign requested address.             |
6564| 2303210 | Connection timed out.                        |
6565| 2303501 | SSL is null.                                 |
6566| 2303502 | An error occurred when reading data on the TLS socket.|
6567| 2303503 | An error occurred when writing data on the TLS socket.|
6568| 2303505 | An error occurred in the TLS system call.    |
6569| 2303506 | Failed to close the TLS connection.          |
6570| 2300002 | System internal error.                       |
6571| 2301206 | Socks5 failed to connect to the proxy server.  |
6572| 2301207 | Socks5 username or password is invalid.        |
6573| 2301208 | Socks5 failed to connect to the remote server. |
6574| 2301209 | Socks5 failed to negotiate the authentication method. |
6575| 2301210 | Socks5 failed to send the message.             |
6576| 2301211 | Socks5 failed to receive the message.          |
6577| 2301212 | Socks5 serialization error.                    |
6578| 2301213 | Socks5 deserialization error.                  |
6579
6580**示例:**
6581
6582```ts
6583import { socket } from '@kit.NetworkKit';
6584import { BusinessError } from '@kit.BasicServicesKit';
6585
6586let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // Two way authentication
6587let bindAddr: socket.NetAddress = {
6588  address: '0.0.0.0',
6589}
6590tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6591  if (err) {
6592    console.log('bind fail');
6593    return;
6594  }
6595  console.log('bind success');
6596});
6597let twoWayNetAddr: socket.NetAddress = {
6598  address: '192.168.xx.xxx',
6599  port: 8080
6600}
6601let twoWaySecureOptions: socket.TLSSecureOptions = {
6602  key: "xxxx",
6603  cert: "xxxx",
6604  ca: ["xxxx"],
6605  password: "xxxx",
6606  protocols: socket.Protocol.TLSv12,
6607  useRemoteCipherPrefer: true,
6608  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6609  cipherSuite: "AES256-SHA256"
6610}
6611let tlsConnectOptions: socket.TLSConnectOptions = {
6612  address: twoWayNetAddr,
6613  secureOptions: twoWaySecureOptions,
6614  ALPNProtocols: ["spdy/1", "http/1.1"]
6615}
6616
6617tlsTwoWay.connect(tlsConnectOptions).then(() => {
6618  console.log("connect successfully");
6619}).catch((err: BusinessError) => {
6620  console.log("connect failed " + JSON.stringify(err));
6621});
6622
6623let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication
6624tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6625  if (err) {
6626    console.log('bind fail');
6627    return;
6628  }
6629  console.log('bind success');
6630});
6631let oneWayNetAddr: socket.NetAddress = {
6632  address: '192.168.xx.xxx',
6633  port: 8080
6634}
6635let oneWaySecureOptions: socket.TLSSecureOptions = {
6636  ca: ["xxxx", "xxxx"],
6637  cipherSuite: "AES256-SHA256"
6638}
6639let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6640  address: oneWayNetAddr,
6641  secureOptions: oneWaySecureOptions
6642}
6643tlsOneWay.connect(tlsOneWayConnectOptions).then(() => {
6644  console.log("connect successfully");
6645}).catch((err: BusinessError) => {
6646  console.log("connect failed " + JSON.stringify(err));
6647});
6648```
6649
6650**示例(设置socket代理):**
6651
6652```ts
6653import { socket } from '@kit.NetworkKit';
6654import { BusinessError } from '@kit.BasicServicesKit';
6655
6656let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance();  // 双向认证
6657let bindAddr: socket.NetAddress = {
6658  address: '0.0.0.0',
6659}
6660tlsTwoWay.bind(bindAddr, (err: BusinessError) => {
6661  if (err) {
6662    console.log('bind fail');
6663    return;
6664  }
6665  console.log('bind success');
6666});
6667let twoWayNetAddr: socket.NetAddress = {
6668  address: '192.168.xx.xxx',
6669  port: 8080
6670}
6671let socks5Server: socket.NetAddress = {
6672  address: '192.168.xx.xxx',
6673  port: 8080
6674}
6675let twoWaySecureOptions: socket.TLSSecureOptions = {
6676  key: "xxxx",
6677  cert: "xxxx",
6678  ca: ["xxxx"],
6679  password: "xxxx",
6680  protocols: socket.Protocol.TLSv12,
6681  useRemoteCipherPrefer: true,
6682  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
6683  cipherSuite: "AES256-SHA256"
6684}
6685let tlsConnectOptions: socket.TLSConnectOptions = {
6686  address: twoWayNetAddr,
6687  secureOptions: twoWaySecureOptions,
6688  ALPNProtocols: ["spdy/1", "http/1.1"],
6689  proxy: socket.ProxyOptions = {
6690    type : 1,
6691    address: socks5Server,
6692    username: "xxx",
6693    password: "xxx"
6694  }
6695}
6696
6697tlsTwoWay.connect(tlsConnectOptions).then(() => {
6698  console.log("connect successfully");
6699}).catch((err: BusinessError) => {
6700  console.log("connect failed " + JSON.stringify(err));
6701});
6702
6703let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证
6704tlsOneWay.bind(bindAddr, (err: BusinessError) => {
6705  if (err) {
6706    console.log('bind fail');
6707    return;
6708  }
6709  console.log('bind success');
6710});
6711let oneWayNetAddr: socket.NetAddress = {
6712  address: '192.168.xx.xxx',
6713  port: 8080
6714}
6715let oneWaySecureOptions: socket.TLSSecureOptions = {
6716  ca: ["xxxx", "xxxx"],
6717  cipherSuite: "AES256-SHA256"
6718}
6719let tlsOneWayConnectOptions: socket.TLSConnectOptions = {
6720  address: oneWayNetAddr,
6721  secureOptions: oneWaySecureOptions,
6722  proxy: socket.ProxyOptions = {
6723    type : 1,
6724    address: socks5Server,
6725    username: "xxx",
6726    password: "xxx"
6727  }
6728}
6729tlsOneWay.connect(tlsOneWayConnectOptions).then(() => {
6730  console.log("connect successfully");
6731}).catch((err: BusinessError) => {
6732  console.log("connect failed " + JSON.stringify(err));
6733});
6734```
6735
6736### getRemoteAddress<sup>9+</sup>
6737
6738getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
6739
6740在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
6741
6742**系统能力**:SystemCapability.Communication.NetStack
6743
6744**参数:**
6745
6746| 参数名   | 类型                                              | 必填 | 说明       |
6747| -------- | ------------------------------------------------- | ---- | ---------- |
6748| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 |
6749
6750**错误码:**
6751
6752| 错误码ID | 错误信息                        |
6753| ------- | -----------------------------  |
6754| 2303188 | Socket operation on non-socket.|
6755| 2300002 | System internal error.         |
6756
6757**示例:**
6758
6759```ts
6760import { socket } from '@kit.NetworkKit';
6761import { BusinessError } from '@kit.BasicServicesKit';
6762
6763let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6764tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
6765  if (err) {
6766    console.log('getRemoteAddress fail');
6767    return;
6768  }
6769  console.log('getRemoteAddress success:' + JSON.stringify(data));
6770});
6771```
6772
6773### getRemoteAddress<sup>9+</sup>
6774
6775getRemoteAddress(): Promise\<NetAddress\>
6776
6777在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
6778
6779**系统能力**:SystemCapability.Communication.NetStack
6780
6781**返回值:**
6782
6783| 类型                                        | 说明                                        |
6784|  ------------------------------------------ |  ------------------------------------------ |
6785| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
6786
6787**错误码:**
6788
6789| 错误码ID | 错误信息                        |
6790| ------- | ------------------------------ |
6791| 2303188 | Socket operation on non-socket.|
6792| 2300002 | System internal error.         |
6793
6794**示例:**
6795
6796```ts
6797import { socket } from '@kit.NetworkKit';
6798import { BusinessError } from '@kit.BasicServicesKit';
6799
6800let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6801tls.getRemoteAddress().then(() => {
6802  console.log('getRemoteAddress success');
6803}).catch((err: BusinessError) => {
6804  console.log('getRemoteAddress fail');
6805});
6806```
6807
6808### getCertificate<sup>9+</sup>
6809
6810getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
6811
6812在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。
6813
6814**系统能力**:SystemCapability.Communication.NetStack
6815
6816**参数:**
6817
6818| 参数名   | 类型                                   | 必填 | 说明 |
6819| -------- | ----------------------------------------| ---- | ---------------|
6820| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>    | 是   | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。|
6821
6822**错误码:**
6823
6824| 错误码ID | 错误信息                        |
6825| ------- | ------------------------------ |
6826| 2303501 | SSL is null.                   |
6827| 2303504 | An error occurred when verifying the X.509 certificate.|
6828| 2300002 | System internal error.         |
6829
6830**示例:**
6831
6832```ts
6833import { socket } from '@kit.NetworkKit';
6834import { BusinessError } from '@kit.BasicServicesKit';
6835
6836let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6837tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
6838  if (err) {
6839    console.log("getCertificate callback error = " + err);
6840  } else {
6841    console.log("getCertificate callback = " + data);
6842  }
6843});
6844```
6845
6846### getCertificate<sup>9+</sup>
6847
6848getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
6849
6850在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。
6851
6852**系统能力**:SystemCapability.Communication.NetStack
6853
6854**返回值:**
6855
6856| 类型            | 说明                  |
6857| -------------- | -------------------- |
6858| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
6859
6860**错误码:**
6861
6862| 错误码ID | 错误信息                        |
6863| ------- | ------------------------------ |
6864| 2303501 | SSL is null.                   |
6865| 2303504 | An error occurred when verifying the X.509 certificate.|
6866| 2300002 | System internal error.         |
6867
6868**示例:**
6869
6870```ts
6871import { socket } from '@kit.NetworkKit';
6872import { BusinessError } from '@kit.BasicServicesKit';
6873import { util } from '@kit.ArkTS';
6874
6875let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6876tls.getCertificate().then((data: socket.X509CertRawData) => {
6877  const decoder = util.TextDecoder.create();
6878  const str = decoder.decodeToString(data.data);
6879  console.log("getCertificate: " + str);
6880}).catch((err: BusinessError) => {
6881  console.error("failed" + err);
6882});
6883```
6884
6885### getRemoteCertificate<sup>9+</sup>
6886
6887getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
6888
6889在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。
6890
6891**系统能力**:SystemCapability.Communication.NetStack
6892
6893**参数:**
6894
6895| 参数名    | 类型                                    | 必填  | 说明           |
6896| -------- | ----------------------------------------| ---- | ---------------|
6897| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>  | 是   | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 |
6898
6899**错误码:**
6900
6901| 错误码ID | 错误信息                        |
6902| ------- | ------------------------------ |
6903| 2303501 | SSL is null.                   |
6904| 2300002 | System internal error.         |
6905
6906**示例:**
6907
6908```ts
6909import { socket } from '@kit.NetworkKit';
6910import { BusinessError } from '@kit.BasicServicesKit';
6911import { util } from '@kit.ArkTS';
6912
6913let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6914tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
6915  if (err) {
6916    console.log("getRemoteCertificate callback error = " + err);
6917  } else {
6918    const decoder = util.TextDecoder.create();
6919    const str = decoder.decodeToString(data.data);
6920    console.log("getRemoteCertificate callback = " + str);
6921  }
6922});
6923```
6924
6925### getRemoteCertificate<sup>9+</sup>
6926
6927getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
6928
6929在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。
6930
6931**系统能力**:SystemCapability.Communication.NetStack
6932
6933**返回值:**
6934
6935| 类型            | 说明                  |
6936| -------------- | -------------------- |
6937| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 |
6938
6939**错误码:**
6940
6941| 错误码ID | 错误信息                        |
6942| ------- | ------------------------------ |
6943| 2303501 | SSL is null.                   |
6944| 2300002 | System internal error.         |
6945
6946**示例:**
6947
6948```ts
6949import { socket } from '@kit.NetworkKit';
6950import { BusinessError } from '@kit.BasicServicesKit';
6951import { util } from '@kit.ArkTS';
6952
6953let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6954tls.getRemoteCertificate().then((data: socket.X509CertRawData) => {
6955  const decoder = util.TextDecoder.create();
6956  const str = decoder.decodeToString(data.data);
6957  console.log("getRemoteCertificate:" + str);
6958}).catch((err: BusinessError) => {
6959  console.error("failed" + err);
6960});
6961```
6962
6963### getProtocol<sup>9+</sup>
6964
6965getProtocol(callback: AsyncCallback\<string\>): void
6966
6967在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
6968
6969**系统能力**:SystemCapability.Communication.NetStack
6970
6971**参数:**
6972
6973| 参数名   | 类型                                       | 必填 | 说明           |
6974| -------- | ----------------------------------------| ---- | ---------------|
6975| callback | AsyncCallback\<string\>                  | 是   | 回调函数,返回通信的协议。失败返回错误码、错误信息。|
6976
6977**错误码:**
6978
6979| 错误码ID | 错误信息                        |
6980| ------- | -----------------------------  |
6981| 2303501 | SSL is null.                   |
6982| 2303505 | An error occurred in the TLS system call. |
6983| 2300002 | System internal error.         |
6984
6985**示例:**
6986
6987```ts
6988import { socket } from '@kit.NetworkKit';
6989import { BusinessError } from '@kit.BasicServicesKit';
6990
6991let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
6992tls.getProtocol((err: BusinessError, data: string) => {
6993  if (err) {
6994    console.log("getProtocol callback error = " + err);
6995  } else {
6996    console.log("getProtocol callback = " + data);
6997  }
6998});
6999```
7000
7001### getProtocol<sup>9+</sup>
7002
7003getProtocol():Promise\<string\>
7004
7005在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
7006
7007**系统能力**:SystemCapability.Communication.NetStack
7008
7009**返回值:**
7010
7011| 类型            | 说明                  |
7012| -------------- | -------------------- |
7013| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
7014
7015**错误码:**
7016
7017| 错误码ID | 错误信息                        |
7018| ------- | ------------------------------ |
7019| 2303501 | SSL is null.                   |
7020| 2303505 | An error occurred in the TLS system call. |
7021| 2300002 | System internal error.         |
7022
7023**示例:**
7024
7025```ts
7026import { socket } from '@kit.NetworkKit';
7027import { BusinessError } from '@kit.BasicServicesKit';
7028
7029let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7030tls.getProtocol().then((data: string) => {
7031  console.log(data);
7032}).catch((err: BusinessError) => {
7033  console.error("failed" + err);
7034});
7035```
7036
7037### getCipherSuite<sup>9+</sup>
7038
7039getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
7040
7041在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
7042
7043**系统能力**:SystemCapability.Communication.NetStack
7044
7045**参数:**
7046
7047| 参数名   | 类型                                     | 必填 | 说明 |
7048| -------- | ----------------------------------------| ---- | ---------------|
7049| callback | AsyncCallback\<Array\<string\>\>          | 是   | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 |
7050
7051**错误码:**
7052
7053| 错误码ID | 错误信息                        |
7054| ------- | ------------------------------ |
7055| 2303501 | SSL is null.                   |
7056| 2303502 | An error occurred when reading data on the TLS socket.|
7057| 2303505 | An error occurred in the TLS system call. |
7058| 2300002 | System internal error.         |
7059
7060**示例:**
7061
7062```ts
7063import { socket } from '@kit.NetworkKit';
7064import { BusinessError } from '@kit.BasicServicesKit';
7065
7066let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7067tls.getCipherSuite((err: BusinessError, data: Array<string>) => {
7068  if (err) {
7069    console.log("getCipherSuite callback error = " + err);
7070  } else {
7071    console.log("getCipherSuite callback = " + data);
7072  }
7073});
7074```
7075
7076### getCipherSuite<sup>9+</sup>
7077
7078getCipherSuite(): Promise\<Array\<string\>\>
7079
7080在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
7081
7082**系统能力**:SystemCapability.Communication.NetStack
7083
7084**返回值:**
7085
7086| 类型                    | 说明                  |
7087| ---------------------- | --------------------- |
7088| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
7089
7090**错误码:**
7091
7092| 错误码ID | 错误信息                        |
7093| ------- | ------------------------------ |
7094| 2303501 | SSL is null.                   |
7095| 2303502 | An error occurred when reading data on the TLS socket.|
7096| 2303505 | An error occurred in the TLS system call. |
7097| 2300002 | System internal error.         |
7098
7099**示例:**
7100
7101```ts
7102import { socket } from '@kit.NetworkKit';
7103import { BusinessError } from '@kit.BasicServicesKit';
7104
7105let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7106tls.getCipherSuite().then((data: Array<string>) => {
7107  console.log('getCipherSuite success:' + JSON.stringify(data));
7108}).catch((err: BusinessError) => {
7109  console.error("failed" + err);
7110});
7111```
7112
7113### getSignatureAlgorithms<sup>9+</sup>
7114
7115getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
7116
7117在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。
7118
7119**系统能力**:SystemCapability.Communication.NetStack
7120
7121**参数:**
7122
7123| 参数名   | 类型                                   | 必填 | 说明            |
7124| -------- | -------------------------------------| ---- | ---------------|
7125| callback | AsyncCallback\<Array\<string\>\>         | 是   | 回调函数,返回双方支持的签名算法。  |
7126
7127**错误码:**
7128
7129| 错误码ID | 错误信息                        |
7130| ------- | ------------------------------ |
7131| 2303501 | SSL is null.                   |
7132| 2300002 | System internal error.         |
7133
7134**示例:**
7135
7136```ts
7137import { socket } from '@kit.NetworkKit';
7138import { BusinessError } from '@kit.BasicServicesKit';
7139
7140let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7141tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
7142  if (err) {
7143    console.log("getSignatureAlgorithms callback error = " + err);
7144  } else {
7145    console.log("getSignatureAlgorithms callback = " + data);
7146  }
7147});
7148```
7149
7150### getSignatureAlgorithms<sup>9+</sup>
7151
7152getSignatureAlgorithms(): Promise\<Array\<string\>\>
7153
7154在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。
7155
7156**系统能力**:SystemCapability.Communication.NetStack
7157
7158**返回值:**
7159
7160| 类型                    | 说明                  |
7161| ---------------------- | -------------------- |
7162| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
7163
7164**错误码:**
7165
7166| 错误码ID | 错误信息                        |
7167| ------- | ------------------------------ |
7168| 2303501 | SSL is null.                   |
7169| 2300002 | System internal error.         |
7170
7171**示例:**
7172
7173```ts
7174import { socket } from '@kit.NetworkKit';
7175import { BusinessError } from '@kit.BasicServicesKit';
7176
7177let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7178tls.getSignatureAlgorithms().then((data: Array<string>) => {
7179  console.log("getSignatureAlgorithms success" + data);
7180}).catch((err: BusinessError) => {
7181  console.error("failed" + err);
7182});
7183```
7184
7185### getLocalAddress<sup>12+</sup>
7186
7187getLocalAddress(): Promise\<NetAddress\>
7188
7189获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。
7190
7191> **说明:**
7192> 在TLSSocketServer通信连接成功之后,才可调用此方法。
7193
7194**系统能力**:SystemCapability.Communication.NetStack
7195
7196**返回值:**
7197
7198| 类型            | 说明                                                 |
7199|  -------------- |  --------------------------------------------------- |
7200| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
7201
7202**错误码:**
7203
7204| 错误码ID | 错误信息                                    |
7205| -------- | ------------------------------------------- |
7206| 2300002  | System internal error.                      |
7207| 2301009  | Bad file descriptor.                            |
7208| 2303188  | Socket operation on non-socket. |
7209
7210**示例:**
7211
7212```ts
7213import { socket } from '@kit.NetworkKit';
7214import { BusinessError } from '@kit.BasicServicesKit';
7215
7216let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7217tls.getLocalAddress().then((localAddress: socket.NetAddress) => {
7218  console.info("Get success: " + JSON.stringify(localAddress));
7219}).catch((err: BusinessError) => {
7220  console.error("Get failed, error: " + JSON.stringify(err));
7221})
7222```
7223
7224### send<sup>9+</sup>
7225
7226send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void
7227
7228在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。
7229
7230**系统能力**:SystemCapability.Communication.NetStack
7231
7232**参数:**
7233
7234| 参数名    | 类型                          | 必填 | 说明            |
7235| -------- | -----------------------------| ---- | ---------------|
7236|   data   | string \| ArrayBuffer                      | 是   | 发送的数据内容。   |
7237| callback | AsyncCallback\<void\>         | 是   | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 |
7238
7239**错误码:**
7240
7241| 错误码ID | 错误信息                                      |
7242| ------- | -------------------------------------------- |
7243| 401     | Parameter error.                             |
7244| 2303501 | SSL is null.                                 |
7245| 2303503 | An error occurred when writing data on the TLS socket.|
7246| 2303505 | An error occurred in the TLS system call.    |
7247| 2303506 | Failed to close the TLS connection.          |
7248| 2300002 | System internal error.                       |
7249
7250**示例:**
7251
7252```ts
7253import { socket } from '@kit.NetworkKit';
7254import { BusinessError } from '@kit.BasicServicesKit';
7255
7256let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7257tls.send("xxxx", (err: BusinessError) => {
7258  if (err) {
7259    console.log("send callback error = " + err);
7260  } else {
7261    console.log("send success");
7262  }
7263});
7264```
7265
7266### send<sup>9+</sup>
7267
7268send(data: string \| ArrayBuffer): Promise\<void\>
7269
7270在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
7271
7272**系统能力**:SystemCapability.Communication.NetStack
7273
7274**参数:**
7275
7276| 参数名    | 类型                          | 必填 | 说明            |
7277| -------- | -----------------------------| ---- | ---------------|
7278|   data   | string \| ArrayBuffer                       | 是   | 发送的数据内容。   |
7279
7280**错误码:**
7281
7282| 错误码ID | 错误信息                                      |
7283| ------- | -------------------------------------------- |
7284| 401     | Parameter error.                             |
7285| 2303501 | SSL is null.                                 |
7286| 2303503 | An error occurred when writing data on the TLS socket.|
7287| 2303505 | An error occurred in the TLS system call.    |
7288| 2303506 | Failed to close the TLS connection.          |
7289| 2300002 | System internal error.                       |
7290
7291**返回值:**
7292
7293| 类型           | 说明                  |
7294| -------------- | -------------------- |
7295| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
7296
7297**示例:**
7298
7299```ts
7300import { socket } from '@kit.NetworkKit';
7301import { BusinessError } from '@kit.BasicServicesKit';
7302
7303let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7304tls.send("xxxx").then(() => {
7305  console.log("send success");
7306}).catch((err: BusinessError) => {
7307  console.error("failed" + err);
7308});
7309```
7310
7311### close<sup>9+</sup>
7312
7313close(callback: AsyncCallback\<void\>): void
7314
7315在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。
7316
7317**系统能力**:SystemCapability.Communication.NetStack
7318
7319**参数:**
7320
7321| 参数名    | 类型                          | 必填 | 说明            |
7322| -------- | -----------------------------| ---- | ---------------|
7323| callback | AsyncCallback\<void\>         | 是   | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 |
7324
7325**错误码:**
7326
7327| 错误码ID | 错误信息                                      |
7328| ------- | -------------------------------------------- |
7329| 401 | Parameter error.                                 |
7330| 2303501 | SSL is null.                                 |
7331| 2303505 | An error occurred in the TLS system call.    |
7332| 2303506 | Failed to close the TLS connection.          |
7333| 2300002 | System internal error.                       |
7334
7335**示例:**
7336
7337```ts
7338import { socket } from '@kit.NetworkKit';
7339import { BusinessError } from '@kit.BasicServicesKit';
7340
7341let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7342tls.close((err: BusinessError) => {
7343  if (err) {
7344    console.log("close callback error = " + err);
7345  } else {
7346    console.log("close success");
7347  }
7348});
7349```
7350
7351### close<sup>9+</sup>
7352
7353close(): Promise\<void\>
7354
7355在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。
7356
7357**系统能力**:SystemCapability.Communication.NetStack
7358
7359**返回值:**
7360
7361| 类型           | 说明                  |
7362| -------------- | -------------------- |
7363| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 |
7364
7365**错误码:**
7366
7367| 错误码ID | 错误信息                                      |
7368| ------- | -------------------------------------------- |
7369| 401 | Parameter error.                                 |
7370| 2303501 | SSL is null.                                 |
7371| 2303505 | An error occurred in the TLS system call.    |
7372| 2303506 | Failed to close the TLS connection.          |
7373| 2300002 | System internal error.                       |
7374
7375**示例:**
7376
7377```ts
7378import { socket } from '@kit.NetworkKit';
7379import { BusinessError } from '@kit.BasicServicesKit';
7380
7381let tls: socket.TLSSocket = socket.constructTLSSocketInstance();
7382tls.close().then(() => {
7383  console.log("close success");
7384}).catch((err: BusinessError) => {
7385  console.error("failed" + err);
7386});
7387```
7388
7389## TLSConnectOptions<sup>9+</sup>
7390
7391TLS连接的操作。
7392
7393**系统能力**:SystemCapability.Communication.NetStack
7394
7395| 名称          | 类型                                     | 必填 | 说明            |
7396| -------------- | ------------------------------------- | ---  |-------------- |
7397| address        | [NetAddress](#netaddress)             | 是  |  网关地址。       |
7398| secureOptions  | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。|
7399| ALPNProtocols  | Array\<string\>                         | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。      |
7400| skipRemoteValidation<sup>12+</sup>  | boolean                         | 否 | 是否跳过对服务端进行证书认证,默认为false。true:跳过对服务端进行证书认证;false:不跳过对服务端进行证书认证。      |
7401| proxy<sup>18+</sup>   | [ProxyOptions](#proxyoptions18) | 否   | 使用的代理信息,默认不使用代理。 |
7402
7403## TLSSecureOptions<sup>9+</sup>
7404
7405TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。
7406
7407**系统能力**:SystemCapability.Communication.NetStack
7408
7409| 名称                 | 类型                                                    | 必填 | 说明                                |
7410| --------------------- | ------------------------------------------------------ | --- |----------------------------------- |
7411| ca                    | string \| Array\<string\> | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书<sup>12+</sup>。 |
7412| cert                  | string                                                  | 否 | 本地客户端的数字证书。                 |
7413| key                   | string                                                  | 否 | 本地数字证书的私钥。                   |
7414| password                | string                                                  | 否 | 读取私钥的密码。                      |
7415| protocols             | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。                  |
7416| useRemoteCipherPrefer | boolean                                                 | 否 | 优先使用对等方的密码套件。true:优先使用对等方的密码套件;false:不优先使用对等方的密码套件。        |
7417| signatureAlgorithms   | string                                                 | 否 | 通信过程中的签名算法,默认为"" 。              |
7418| cipherSuite           | string                                                 | 否 | 通信过程中的加密套件,默认为"" 。              |
7419| isBidirectionalAuthentication<sup>12+</sup>           | boolean                                                 | 否 | 用于设置双向认证,默认为false。true:设置双向认证;false:不设置双向认证。              |
7420
7421## Protocol<sup>9+</sup>
7422
7423TLS通信的协议版本。
7424
7425**系统能力**:SystemCapability.Communication.NetStack
7426
7427| 名称      |    值    | 说明                |
7428| --------- | --------- |------------------ |
7429| TLSv12    | "TLSv1.2" | 使用TLSv1.2协议通信。 |
7430| TLSv13    | "TLSv1.3" | 使用TLSv1.3协议通信。 |
7431
7432## X509CertRawData<sup>9+</sup>
7433
7434type X509CertRawData = cert.EncodingBlob
7435
7436存储证书的数据。
7437
7438**系统能力**:SystemCapability.Communication.NetStack
7439
7440|       类型       |            说明             |
7441| ---------------- | --------------------------- |
7442| cert.EncodingBlob | 提供证书编码blob类型。     |
7443
7444## socket.constructTLSSocketServerInstance<sup>10+</sup>
7445
7446constructTLSSocketServerInstance(): TLSSocketServer
7447
7448创建并返回一个TLSSocketServer对象。
7449
7450**系统能力**:SystemCapability.Communication.NetStack
7451
7452**返回值:**
7453
7454| 类型                                  | 说明                          |
7455|  ------------------------------------ |  ---------------------------- |
7456| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 |
7457
7458**示例:**
7459
7460```ts
7461import { socket } from '@kit.NetworkKit';
7462import { BusinessError } from '@kit.BasicServicesKit';
7463
7464let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7465```
7466
7467## TLSSocketServer<sup>10+</sup>
7468
7469TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。
7470
7471### listen<sup>10+</sup>
7472
7473listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
7474
7475绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。
7476
7477**注意:**IP地址设置为0.0.0.0时,可以监听本机所有地址。
7478
7479**需要权限**:ohos.permission.INTERNET
7480
7481**系统能力**:SystemCapability.Communication.NetStack
7482
7483**参数:**
7484
7485| 参数名   | 类型                                     | 必填 | 说明                                             |
7486| -------- | ---------------------------------------- | ---- | ------------------------------------------------ |
7487| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocketServer连接所需要的参数。                |
7488| callback | AsyncCallback\<void\>                     | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
7489
7490**错误码:**
7491
7492| 错误码ID | 错误信息                                    |
7493| -------- | ------------------------------------------- |
7494| 401      | Parameter error.                            |
7495| 201      | Permission denied.                          |
7496| 2300002  | System internal error.                      |
7497| 2303109  | Bad file number.                            |
7498| 2303111  | Resource temporarily unavailable. Try again.|
7499| 2303198  | Address already in use.                     |
7500| 2303199  | Cannot assign requested address.            |
7501| 2303501  | SSL is null.                                |
7502| 2303502  | An error occurred when reading data on the TLS socket.|
7503| 2303503  | An error occurred when writing data on the TLS socket.|
7504| 2303505  | An error occurred in the TLS system call.   |
7505| 2303506  | Failed to close the TLS connection.         |
7506
7507**示例:**
7508
7509```ts
7510import { socket } from '@kit.NetworkKit';
7511import { BusinessError } from '@kit.BasicServicesKit';
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  skipRemoteValidation: false
7533}
7534tlsServer.listen(tlsConnectOptions, (err: BusinessError) => {
7535  console.log("listen callback error" + err);
7536});
7537```
7538
7539### listen<sup>10+</sup>
7540
7541listen(options: TLSConnectOptions): Promise\<void\>
7542
7543绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。
7544
7545**需要权限**:ohos.permission.INTERNET
7546
7547**系统能力**:SystemCapability.Communication.NetStack
7548
7549**参数:**
7550
7551| 参数名  | 类型                                     | 必填 | 说明               |
7552| ------- | ---------------------------------------- | ---- | ------------------ |
7553| options | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。 |
7554
7555**返回值:**
7556
7557| 类型            | 说明                                                      |
7558| --------------- | --------------------------------------------------------- |
7559| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
7560
7561**错误码:**
7562
7563| 错误码ID | 错误信息                                    |
7564| -------- | ------------------------------------------- |
7565| 401      | Parameter error.                            |
7566| 201      | Permission denied.                          |
7567| 2300002  | System internal error.                      |
7568| 2303109  | Bad file number.                            |
7569| 2303111  | Resource temporarily unavailable. Try again.|
7570| 2303198  | Address already in use.                     |
7571| 2303199  | Cannot assign requested address.            |
7572| 2303501  | SSL is null.                                |
7573| 2303502  | An error occurred when reading data on the TLS socket.|
7574| 2303503  | An error occurred when writing data on the TLS socket.|
7575| 2303505  | An error occurred in the TLS system call.   |
7576| 2303506  | Failed to close the TLS connection.         |
7577
7578**示例:**
7579
7580```ts
7581import { socket } from '@kit.NetworkKit';
7582import { BusinessError } from '@kit.BasicServicesKit';
7583
7584let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7585let netAddress: socket.NetAddress = {
7586  address: '192.168.xx.xxx',
7587  port: 8080
7588}
7589let tlsSecureOptions: socket.TLSSecureOptions = {
7590  key: "xxxx",
7591  cert: "xxxx",
7592  ca: ["xxxx"],
7593  password: "xxxx",
7594  protocols: socket.Protocol.TLSv12,
7595  useRemoteCipherPrefer: true,
7596  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7597  cipherSuite: "AES256-SHA256"
7598}
7599let tlsConnectOptions: socket.TLSConnectOptions = {
7600  address: netAddress,
7601  secureOptions: tlsSecureOptions,
7602  ALPNProtocols: ["spdy/1", "http/1.1"],
7603  skipRemoteValidation: false
7604}
7605tlsServer.listen(tlsConnectOptions).then(() => {
7606  console.log("listen callback success");
7607}).catch((err: BusinessError) => {
7608  console.log("failed: " + JSON.stringify(err));
7609});
7610```
7611
7612### getState<sup>10+</sup>
7613
7614getState(callback: AsyncCallback\<SocketStateBase\>): void
7615
7616在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。
7617
7618> **说明:**
7619> listen方法调用成功后,才可调用此方法。
7620
7621**系统能力**:SystemCapability.Communication.NetStack
7622
7623**参数:**
7624
7625| 参数名   | 类型                                                 | 必填 | 说明                                                         |
7626| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ |
7627| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是   | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 |
7628
7629**错误码:**
7630
7631| 错误码ID | 错误信息                        |
7632| -------- | ------------------------------- |
7633| 401      | Parameter error.                |
7634| 2303188  | Socket operation on non-socket. |
7635| 2300002  | System internal error.          |
7636
7637**示例:**
7638
7639```ts
7640import { socket } from '@kit.NetworkKit';
7641import { BusinessError } from '@kit.BasicServicesKit';
7642
7643let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7644let netAddress: socket.NetAddress = {
7645  address: '192.168.xx.xxx',
7646  port: 8080
7647}
7648let tlsSecureOptions: socket.TLSSecureOptions = {
7649  key: "xxxx",
7650  cert: "xxxx",
7651  ca: ["xxxx"],
7652  password: "xxxx",
7653  protocols: socket.Protocol.TLSv12,
7654  useRemoteCipherPrefer: true,
7655  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7656  cipherSuite: "AES256-SHA256"
7657}
7658let tlsConnectOptions: socket.TLSConnectOptions = {
7659  address: netAddress,
7660  secureOptions: tlsSecureOptions,
7661  ALPNProtocols: ["spdy/1", "http/1.1"]
7662}
7663tlsServer.listen(tlsConnectOptions).then(() => {
7664  console.log("listen callback success");
7665}).catch((err: BusinessError) => {
7666  console.log("failed: " + JSON.stringify(err));
7667});
7668tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => {
7669  if (err) {
7670    console.log('getState fail');
7671    return;
7672  }
7673  console.log('getState success:' + JSON.stringify(data));
7674});
7675```
7676
7677### getState<sup>10+</sup>
7678
7679getState(): Promise\<SocketStateBase\>
7680
7681在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。
7682
7683> **说明:**
7684> listen方法调用成功后,才可调用此方法。
7685
7686**系统能力**:SystemCapability.Communication.NetStack
7687
7688**返回值:**
7689
7690| 类型                                           | 说明                                                         |
7691|  --------------------------------------------- |  ----------------------------------------------------------- |
7692| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 |
7693
7694**错误码:**
7695
7696| 错误码ID | 错误信息                        |
7697| -------- | ------------------------------- |
7698| 2303188  | Socket operation on non-socket. |
7699| 2300002  | System internal error.          |
7700
7701**示例:**
7702
7703```ts
7704import { socket } from '@kit.NetworkKit';
7705import { BusinessError } from '@kit.BasicServicesKit';
7706
7707let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7708let netAddress: socket.NetAddress = {
7709  address: '192.168.xx.xxx',
7710  port: 8080
7711}
7712let tlsSecureOptions: socket.TLSSecureOptions = {
7713  key: "xxxx",
7714  cert: "xxxx",
7715  ca: ["xxxx"],
7716  password: "xxxx",
7717  protocols: socket.Protocol.TLSv12,
7718  useRemoteCipherPrefer: true,
7719  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7720  cipherSuite: "AES256-SHA256"
7721}
7722let tlsConnectOptions: socket.TLSConnectOptions = {
7723  address: netAddress,
7724  secureOptions: tlsSecureOptions,
7725  ALPNProtocols: ["spdy/1", "http/1.1"]
7726}
7727tlsServer.listen(tlsConnectOptions).then(() => {
7728  console.log("listen callback success");
7729}).catch((err: BusinessError) => {
7730  console.log("failed: " + JSON.stringify(err));
7731});
7732tlsServer.getState().then(() => {
7733  console.log('getState success');
7734}).catch((err: BusinessError) => {
7735  console.log('getState fail');
7736});
7737```
7738
7739### setExtraOptions<sup>10+</sup>
7740
7741setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
7742
7743在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。
7744
7745> **说明:**
7746> listen方法调用成功后,才可调用此方法。
7747
7748**系统能力**:SystemCapability.Communication.NetStack
7749
7750**参数:**
7751
7752| 参数名   | 类型                                 | 必填 | 说明                                             |
7753| -------- | ------------------------------------ | ---- | ------------------------------------------------ |
7754| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。                  |
7755| callback | AsyncCallback\<void\>                | 是   | 回调函数。成功返回空,失败返回错误码、错误信息。 |
7756
7757**错误码:**
7758
7759| 错误码ID | 错误信息                        |
7760| -------- | ------------------------------- |
7761| 401      | Parameter error.                |
7762| 2303188  | Socket operation on non-socket. |
7763| 2300002  | System internal error.          |
7764
7765**示例:**
7766
7767```ts
7768import { socket } from '@kit.NetworkKit';
7769import { BusinessError } from '@kit.BasicServicesKit';
7770
7771let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7772let netAddress: socket.NetAddress = {
7773  address: '192.168.xx.xxx',
7774  port: 8080
7775}
7776let tlsSecureOptions: socket.TLSSecureOptions = {
7777  key: "xxxx",
7778  cert: "xxxx",
7779  ca: ["xxxx"],
7780  password: "xxxx",
7781  protocols: socket.Protocol.TLSv12,
7782  useRemoteCipherPrefer: true,
7783  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7784  cipherSuite: "AES256-SHA256"
7785}
7786let tlsConnectOptions: socket.TLSConnectOptions = {
7787  address: netAddress,
7788  secureOptions: tlsSecureOptions,
7789  ALPNProtocols: ["spdy/1", "http/1.1"]
7790}
7791tlsServer.listen(tlsConnectOptions).then(() => {
7792  console.log("listen callback success");
7793}).catch((err: BusinessError) => {
7794  console.log("failed: " + JSON.stringify(err));
7795});
7796
7797interface SocketLinger {
7798  on: boolean;
7799  linger: number;
7800}
7801
7802let tcpExtraOptions: socket.TCPExtraOptions = {
7803  keepAlive: true,
7804  OOBInline: true,
7805  TCPNoDelay: true,
7806  socketLinger: { on: true, linger: 10 } as SocketLinger,
7807  receiveBufferSize: 1000,
7808  sendBufferSize: 1000,
7809  reuseAddress: true,
7810  socketTimeout: 3000
7811}
7812tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => {
7813  if (err) {
7814    console.log('setExtraOptions fail');
7815    return;
7816  }
7817  console.log('setExtraOptions success');
7818});
7819```
7820
7821### setExtraOptions<sup>10+</sup>
7822
7823setExtraOptions(options: TCPExtraOptions): Promise\<void\>
7824
7825在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。
7826
7827> **说明:**
7828> listen方法调用成功后,才可调用此方法。
7829
7830**系统能力**:SystemCapability.Communication.NetStack
7831
7832**参数:**
7833
7834| 参数名  | 类型                                 | 必填 | 说明                            |
7835| ------- | ------------------------------------ | ---- | ------------------------------- |
7836| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TLSSocketServer连接的其他属性。 |
7837
7838**返回值:**
7839
7840| 类型            | 说明                                                      |
7841|  -------------- |  -------------------------------------------------------- |
7842| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
7843
7844**错误码:**
7845
7846| 错误码ID | 错误信息                        |
7847| -------- | ------------------------------- |
7848| 401      | Parameter error.                |
7849| 2303188  | Socket operation on non-socket. |
7850| 2300002  | System internal error.          |
7851
7852**示例:**
7853
7854```ts
7855import { socket } from '@kit.NetworkKit';
7856import { BusinessError } from '@kit.BasicServicesKit';
7857
7858let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7859let netAddress: socket.NetAddress = {
7860  address: '192.168.xx.xxx',
7861  port: 8080
7862}
7863let tlsSecureOptions: socket.TLSSecureOptions = {
7864  key: "xxxx",
7865  cert: "xxxx",
7866  ca: ["xxxx"],
7867  password: "xxxx",
7868  protocols: socket.Protocol.TLSv12,
7869  useRemoteCipherPrefer: true,
7870  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7871  cipherSuite: "AES256-SHA256"
7872}
7873let tlsConnectOptions: socket.TLSConnectOptions = {
7874  address: netAddress,
7875  secureOptions: tlsSecureOptions,
7876  ALPNProtocols: ["spdy/1", "http/1.1"]
7877}
7878tlsServer.listen(tlsConnectOptions).then(() => {
7879  console.log("listen callback success");
7880}).catch((err: BusinessError) => {
7881  console.log("failed: " + JSON.stringify(err));
7882});
7883
7884interface SocketLinger {
7885  on: boolean;
7886  linger: number;
7887}
7888
7889let tcpExtraOptions: socket.TCPExtraOptions = {
7890  keepAlive: true,
7891  OOBInline: true,
7892  TCPNoDelay: true,
7893  socketLinger: { on: true, linger: 10 } as SocketLinger,
7894  receiveBufferSize: 1000,
7895  sendBufferSize: 1000,
7896  reuseAddress: true,
7897  socketTimeout: 3000
7898}
7899tlsServer.setExtraOptions(tcpExtraOptions).then(() => {
7900  console.log('setExtraOptions success');
7901}).catch((err: BusinessError) => {
7902  console.log('setExtraOptions fail');
7903});
7904```
7905
7906### getCertificate<sup>10+</sup>
7907
7908getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
7909
7910在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。
7911
7912> **说明:**
7913> listen方法调用成功后,才可调用此方法。
7914
7915**系统能力**:SystemCapability.Communication.NetStack
7916
7917**参数:**
7918
7919| 参数名   | 类型                                                  | 必填 | 说明                                                     |
7920| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- |
7921| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 |
7922
7923**错误码:**
7924
7925| 错误码ID | 错误信息               |
7926| -------- | ---------------------- |
7927| 401      | Parameter error.       |
7928| 2303501  | SSL is null.           |
7929| 2303504  | An error occurred when verifying the X.509 certificate. |
7930| 2300002  | System internal error. |
7931
7932**示例:**
7933
7934```ts
7935import { socket } from '@kit.NetworkKit';
7936import { BusinessError } from '@kit.BasicServicesKit';
7937import { util } from '@kit.ArkTS';
7938
7939let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
7940let netAddress: socket.NetAddress = {
7941  address: '192.168.xx.xxx',
7942  port: 8080
7943}
7944let tlsSecureOptions: socket.TLSSecureOptions = {
7945  key: "xxxx",
7946  cert: "xxxx",
7947  ca: ["xxxx"],
7948  password: "xxxx",
7949  protocols: socket.Protocol.TLSv12,
7950  useRemoteCipherPrefer: true,
7951  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
7952  cipherSuite: "AES256-SHA256"
7953}
7954let tlsConnectOptions: socket.TLSConnectOptions = {
7955  address: netAddress,
7956  secureOptions: tlsSecureOptions,
7957  ALPNProtocols: ["spdy/1", "http/1.1"]
7958}
7959tlsServer.listen(tlsConnectOptions).then(() => {
7960  console.log("listen callback success");
7961}).catch((err: BusinessError) => {
7962  console.log("failed: " + JSON.stringify(err));
7963});
7964tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => {
7965  if (err) {
7966    console.log("getCertificate callback error = " + err);
7967  } else {
7968    const decoder = util.TextDecoder.create();
7969    const str = decoder.decodeToString(data.data);
7970    console.log("getCertificate callback: " + str);
7971  }
7972});
7973```
7974
7975### getCertificate<sup>10+</sup>
7976
7977getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
7978
7979在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。
7980
7981> **说明:**
7982> listen方法调用成功后,才可调用此方法。
7983
7984**系统能力**:SystemCapability.Communication.NetStack
7985
7986**返回值:**
7987
7988| 类型                                            | 说明                                                         |
7989| ----------------------------------------------- | ------------------------------------------------------------ |
7990| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
7991
7992**错误码:**
7993
7994| 错误码ID | 错误信息               |
7995| -------- | ---------------------- |
7996| 2303501  | SSL is null.           |
7997| 2303504  | An error occurred when verifying the X.509 certificate. |
7998| 2300002  | System internal error. |
7999
8000**示例:**
8001
8002```ts
8003import { socket } from '@kit.NetworkKit';
8004import { BusinessError } from '@kit.BasicServicesKit';
8005import { util } from '@kit.ArkTS';
8006
8007let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8008let netAddress: socket.NetAddress = {
8009  address: '192.168.xx.xxx',
8010  port: 8080
8011}
8012let tlsSecureOptions: socket.TLSSecureOptions = {
8013  key: "xxxx",
8014  cert: "xxxx",
8015  ca: ["xxxx"],
8016  password: "xxxx",
8017  protocols: socket.Protocol.TLSv12,
8018  useRemoteCipherPrefer: true,
8019  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8020  cipherSuite: "AES256-SHA256"
8021}
8022let tlsConnectOptions: socket.TLSConnectOptions = {
8023  address: netAddress,
8024  secureOptions: tlsSecureOptions,
8025  ALPNProtocols: ["spdy/1", "http/1.1"]
8026}
8027tlsServer.listen(tlsConnectOptions).then(() => {
8028  console.log("listen callback success");
8029}).catch((err: BusinessError) => {
8030  console.log("failed: " + JSON.stringify(err));
8031});
8032tlsServer.getCertificate().then((data: socket.X509CertRawData) => {
8033  const decoder = util.TextDecoder.create();
8034  const str = decoder.decodeToString(data.data);
8035  console.log("getCertificate: " + str);
8036}).catch((err: BusinessError) => {
8037  console.error("failed" + err);
8038});
8039```
8040
8041### getProtocol<sup>10+</sup>
8042
8043getProtocol(callback: AsyncCallback\<string\>): void
8044
8045在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
8046
8047> **说明:**
8048> listen方法调用成功后,才可调用此方法。
8049
8050**系统能力**:SystemCapability.Communication.NetStack
8051
8052**参数:**
8053
8054| 参数名   | 类型                    | 必填 | 说明                                                 |
8055| -------- | ----------------------- | ---- | ---------------------------------------------------- |
8056| callback | AsyncCallback\<string\> | 是   | 回调函数,返回通信的协议。失败返回错误码、错误信息。 |
8057
8058**错误码:**
8059
8060| 错误码ID | 错误信息                               |
8061| -------- | -------------------------------------- |
8062| 401      | Parameter error.                       |
8063| 2303501  | SSL is null.                           |
8064| 2303505  | An error occurred in the TLS system call. |
8065| 2300002  | System internal error.                 |
8066
8067**示例:**
8068
8069```ts
8070import { socket } from '@kit.NetworkKit';
8071import { BusinessError } from '@kit.BasicServicesKit';
8072
8073let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8074let netAddress: socket.NetAddress = {
8075  address: '192.168.xx.xxx',
8076  port: 8080
8077}
8078let tlsSecureOptions: socket.TLSSecureOptions = {
8079  key: "xxxx",
8080  cert: "xxxx",
8081  ca: ["xxxx"],
8082  password: "xxxx",
8083  protocols: socket.Protocol.TLSv12,
8084  useRemoteCipherPrefer: true,
8085  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8086  cipherSuite: "AES256-SHA256"
8087}
8088let tlsConnectOptions: socket.TLSConnectOptions = {
8089  address: netAddress,
8090  secureOptions: tlsSecureOptions,
8091  ALPNProtocols: ["spdy/1", "http/1.1"]
8092}
8093tlsServer.listen(tlsConnectOptions).then(() => {
8094  console.log("listen callback success");
8095}).catch((err: BusinessError) => {
8096  console.log("failed: " + JSON.stringify(err));
8097});
8098tlsServer.getProtocol((err: BusinessError, data: string) => {
8099  if (err) {
8100    console.log("getProtocol callback error = " + err);
8101  } else {
8102    console.log("getProtocol callback = " + data);
8103  }
8104});
8105```
8106
8107### getProtocol<sup>10+</sup>
8108
8109getProtocol():Promise\<string\>
8110
8111在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
8112
8113> **说明:**
8114> listen方法调用成功后,才可调用此方法。
8115
8116**系统能力**:SystemCapability.Communication.NetStack
8117
8118**返回值:**
8119
8120| 类型              | 说明                                                    |
8121| ----------------- | ------------------------------------------------------- |
8122| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
8123
8124**错误码:**
8125
8126| 错误码ID | 错误信息                               |
8127| -------- | -------------------------------------- |
8128| 2303501  | SSL is null.                           |
8129| 2303505  | An error occurred in the TLS system call. |
8130| 2300002  | System internal error.                 |
8131
8132**示例:**
8133
8134```ts
8135import { socket } from '@kit.NetworkKit';
8136import { BusinessError } from '@kit.BasicServicesKit';
8137
8138let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8139let netAddress: socket.NetAddress = {
8140  address: '192.168.xx.xxx',
8141  port: 8080
8142}
8143let tlsSecureOptions: socket.TLSSecureOptions = {
8144  key: "xxxx",
8145  cert: "xxxx",
8146  ca: ["xxxx"],
8147  password: "xxxx",
8148  protocols: socket.Protocol.TLSv12,
8149  useRemoteCipherPrefer: true,
8150  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8151  cipherSuite: "AES256-SHA256"
8152}
8153let tlsConnectOptions: socket.TLSConnectOptions = {
8154  address: netAddress,
8155  secureOptions: tlsSecureOptions,
8156  ALPNProtocols: ["spdy/1", "http/1.1"]
8157}
8158tlsServer.listen(tlsConnectOptions).then(() => {
8159  console.log("listen callback success");
8160}).catch((err: BusinessError) => {
8161  console.log("failed: " + JSON.stringify(err));
8162});
8163tlsServer.getProtocol().then((data: string) => {
8164  console.log(data);
8165}).catch((err: BusinessError) => {
8166  console.error("failed" + err);
8167});
8168```
8169
8170### getLocalAddress<sup>12+</sup>
8171
8172getLocalAddress(): Promise\<NetAddress\>
8173
8174获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。
8175
8176> **说明:**
8177> 在TLSSocketServer通信连接成功之后,才可调用此方法。
8178
8179**系统能力**:SystemCapability.Communication.NetStack
8180
8181**返回值:**
8182
8183| 类型            | 说明                                                 |
8184|  -------------- |  --------------------------------------------------- |
8185| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
8186
8187**错误码:**
8188
8189| 错误码ID | 错误信息                                    |
8190| -------- | ------------------------------------------- |
8191| 2300002  | System internal error.                      |
8192| 2301009  | Bad file descriptor.                            |
8193| 2303188  | Socket operation on non-socket. |
8194
8195**示例:**
8196
8197```ts
8198import { socket } from '@kit.NetworkKit';
8199import { BusinessError } from '@kit.BasicServicesKit';
8200
8201let tlsServer: socket.TLSSocket = socket.constructTLSSocketServerInstance();
8202tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => {
8203  console.info("Get success: " + JSON.stringify(localAddress));
8204}).catch((err: BusinessError) => {
8205  console.error("Get failed, error: " + JSON.stringify(err));
8206})
8207```
8208
8209### on('connect')<sup>10+</sup>
8210
8211on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void
8212
8213订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
8214
8215> **说明:**
8216> listen方法调用成功后,才可调用此方法。
8217
8218**系统能力**:SystemCapability.Communication.NetStack
8219
8220**参数:**
8221
8222| 参数名   | 类型                                                    | 必填 | 说明                                  |
8223| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
8224| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
8225| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是   | 回调函数。失败时返回错误码、错误信息。    |
8226
8227**错误码:**
8228
8229| 错误码ID | 错误信息         |
8230| -------- | ---------------- |
8231| 401      | Parameter error. |
8232
8233**示例:**
8234
8235```ts
8236import { socket } from '@kit.NetworkKit';
8237import { BusinessError } from '@kit.BasicServicesKit';
8238
8239let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8240let netAddress: socket.NetAddress = {
8241  address: '192.168.xx.xxx',
8242  port: 8080
8243}
8244let tlsSecureOptions: socket.TLSSecureOptions = {
8245  key: "xxxx",
8246  cert: "xxxx",
8247  ca: ["xxxx"],
8248  password: "xxxx",
8249  protocols: socket.Protocol.TLSv12,
8250  useRemoteCipherPrefer: true,
8251  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8252  cipherSuite: "AES256-SHA256"
8253}
8254let tlsConnectOptions: socket.TLSConnectOptions = {
8255  address: netAddress,
8256  secureOptions: tlsSecureOptions,
8257  ALPNProtocols: ["spdy/1", "http/1.1"]
8258}
8259tlsServer.listen(tlsConnectOptions).then(() => {
8260  console.log("listen callback success");
8261}).catch((err: BusinessError) => {
8262  console.log("failed: " + JSON.stringify(err));
8263});
8264tlsServer.on('connect', (data: socket.TLSSocketConnection) => {
8265  console.log(JSON.stringify(data))
8266});
8267```
8268
8269### off('connect')<sup>10+</sup>
8270
8271off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void
8272
8273取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。
8274
8275> **说明:**
8276> listen方法调用成功后,才可调用此方法。
8277> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8278
8279**系统能力**:SystemCapability.Communication.NetStack
8280
8281**参数:**
8282
8283| 参数名   | 类型                                                    | 必填 | 说明                                  |
8284| -------- | ------------------------------------------------------- | ---- | ------------------------------------- |
8285| type     | string                                                  | 是   | 订阅的事件类型。'connect':连接事件。 |
8286| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否   | 回调函数。失败时返回错误码、错误信息。      |
8287
8288**错误码:**
8289
8290| 错误码ID | 错误信息         |
8291| -------- | ---------------- |
8292| 401      | Parameter error. |
8293
8294**示例:**
8295
8296```ts
8297import { socket } from '@kit.NetworkKit';
8298import { BusinessError } from '@kit.BasicServicesKit';
8299
8300let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8301let netAddress: socket.NetAddress = {
8302  address: '192.168.xx.xxx',
8303  port: 8080
8304}
8305let tlsSecureOptions: socket.TLSSecureOptions = {
8306  key: "xxxx",
8307  cert: "xxxx",
8308  ca: ["xxxx"],
8309  password: "xxxx",
8310  protocols: socket.Protocol.TLSv12,
8311  useRemoteCipherPrefer: true,
8312  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8313  cipherSuite: "AES256-SHA256"
8314}
8315let tlsConnectOptions: socket.TLSConnectOptions = {
8316  address: netAddress,
8317  secureOptions: tlsSecureOptions,
8318  ALPNProtocols: ["spdy/1", "http/1.1"]
8319}
8320tlsServer.listen(tlsConnectOptions).then(() => {
8321  console.log("listen callback success");
8322}).catch((err: BusinessError) => {
8323  console.log("failed: " + JSON.stringify(err));
8324});
8325
8326let callback = (data: socket.TLSSocketConnection) => {
8327  console.log('on connect message: ' + JSON.stringify(data));
8328}
8329tlsServer.on('connect', callback);
8330// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8331tlsServer.off('connect', callback);
8332tlsServer.off('connect');
8333```
8334
8335### on('error')<sup>10+</sup>
8336
8337on(type: 'error', callback: ErrorCallback): void
8338
8339订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
8340
8341> **说明:**
8342> listen方法调用成功后,才可调用此方法。
8343
8344**系统能力**:SystemCapability.Communication.NetStack
8345
8346**参数:**
8347
8348| 参数名   | 类型          | 必填 | 说明                                 |
8349| -------- | ------------- | ---- | ------------------------------------ |
8350| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
8351| callback | ErrorCallback | 是   | 回调函数。失败时返回错误码、错误信息。     |
8352
8353**错误码:**
8354
8355| 错误码ID | 错误信息         |
8356| -------- | ---------------- |
8357| 401      | Parameter error. |
8358
8359**示例:**
8360
8361```ts
8362import { socket } from '@kit.NetworkKit';
8363import { BusinessError } from '@kit.BasicServicesKit';
8364
8365let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8366let netAddress: socket.NetAddress = {
8367  address: '192.168.xx.xxx',
8368  port: 8080
8369}
8370let tlsSecureOptions: socket.TLSSecureOptions = {
8371  key: "xxxx",
8372  cert: "xxxx",
8373  ca: ["xxxx"],
8374  password: "xxxx",
8375  protocols: socket.Protocol.TLSv12,
8376  useRemoteCipherPrefer: true,
8377  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8378  cipherSuite: "AES256-SHA256"
8379}
8380let tlsConnectOptions: socket.TLSConnectOptions = {
8381  address: netAddress,
8382  secureOptions: tlsSecureOptions,
8383  ALPNProtocols: ["spdy/1", "http/1.1"]
8384}
8385tlsServer.listen(tlsConnectOptions).then(() => {
8386  console.log("listen callback success");
8387}).catch((err: BusinessError) => {
8388  console.log("failed: " + JSON.stringify(err));
8389});
8390tlsServer.on('error', (err: BusinessError) => {
8391  console.log("on error, err:" + JSON.stringify(err))
8392});
8393```
8394
8395### off('error')<sup>10+</sup>
8396
8397off(type: 'error', callback?: ErrorCallback): void
8398
8399取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。
8400
8401> **说明:**
8402> listen方法调用成功后,才可调用此方法。
8403> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8404
8405**系统能力**:SystemCapability.Communication.NetStack
8406
8407**参数:**
8408
8409| 参数名   | 类型          | 必填 | 说明                                 |
8410| -------- | ------------- | ---- | ------------------------------------ |
8411| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
8412| callback | ErrorCallback | 否   | 回调函数。失败时返回错误码、错误信息。     |
8413
8414**错误码:**
8415
8416| 错误码ID | 错误信息         |
8417| -------- | ---------------- |
8418| 401      | Parameter error. |
8419
8420**示例:**
8421
8422```ts
8423import { socket } from '@kit.NetworkKit';
8424import { BusinessError } from '@kit.BasicServicesKit';
8425
8426let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8427let netAddress: socket.NetAddress = {
8428  address: '192.168.xx.xxx',
8429  port: 8080
8430}
8431let tlsSecureOptions: socket.TLSSecureOptions = {
8432  key: "xxxx",
8433  cert: "xxxx",
8434  ca: ["xxxx"],
8435  password: "xxxx",
8436  protocols: socket.Protocol.TLSv12,
8437  useRemoteCipherPrefer: true,
8438  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8439  cipherSuite: "AES256-SHA256"
8440}
8441let tlsConnectOptions: socket.TLSConnectOptions = {
8442  address: netAddress,
8443  secureOptions: tlsSecureOptions,
8444  ALPNProtocols: ["spdy/1", "http/1.1"]
8445}
8446tlsServer.listen(tlsConnectOptions).then(() => {
8447  console.log("listen callback success");
8448}).catch((err: BusinessError) => {
8449  console.log("failed: " + JSON.stringify(err));
8450});
8451
8452let callback = (err: BusinessError) => {
8453  console.log("on error, err:" + JSON.stringify(err));
8454}
8455tlsServer.on('error', callback);
8456// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
8457tlsServer.off('error', callback);
8458tlsServer.off('error');
8459```
8460
8461## TLSSocketConnection<sup>10+</sup>
8462
8463TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。
8464
8465> **说明:**
8466> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。
8467
8468**系统能力**:SystemCapability.Communication.NetStack
8469
8470### 属性
8471
8472| 名称     | 类型   | 必填 | 说明                                  |
8473| -------- | ------ | ---- | ------------------------------------- |
8474| clientId | number | 是   | 客户端与TLSSocketServer建立连接的id。 |
8475
8476### send<sup>10+</sup>
8477
8478send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void
8479
8480在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。
8481
8482**系统能力**:SystemCapability.Communication.NetStack
8483
8484**参数:**
8485
8486| 参数名   | 类型                  | 必填 | 说明                                             |
8487| -------- | --------------------- | ---- | ------------------------------------------------ |
8488| data     | string \| ArrayBuffer                | 是   | TLSSocketServer发送数据所需要的参数。            |
8489| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
8490
8491**错误码:**
8492
8493| 错误码ID | 错误信息                               |
8494| -------- | -------------------------------------- |
8495| 401      | Parameter error.                       |
8496| 2303501  | SSL is null.                           |
8497| 2303503  | An error occurred when writing data on the TLS socket.|
8498| 2303505  | An error occurred in the TLS system call.|
8499| 2303506  | Failed to close the TLS connection.    |
8500| 2300002  | System internal error.                 |
8501
8502**示例:**
8503
8504```ts
8505import { socket } from '@kit.NetworkKit';
8506import { BusinessError } from '@kit.BasicServicesKit';
8507
8508let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8509let netAddress: socket.NetAddress = {
8510  address: '192.168.xx.xxx',
8511  port: 8080
8512}
8513let tlsSecureOptions: socket.TLSSecureOptions = {
8514  key: "xxxx",
8515  cert: "xxxx",
8516  ca: ["xxxx"],
8517  password: "xxxx",
8518  protocols: socket.Protocol.TLSv12,
8519  useRemoteCipherPrefer: true,
8520  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8521  cipherSuite: "AES256-SHA256"
8522}
8523let tlsConnectOptions: socket.TLSConnectOptions = {
8524  address: netAddress,
8525  secureOptions: tlsSecureOptions,
8526  ALPNProtocols: ["spdy/1", "http/1.1"]
8527}
8528tlsServer.listen(tlsConnectOptions).then(() => {
8529  console.log("listen callback success");
8530}).catch((err: BusinessError) => {
8531  console.log("failed" + err);
8532});
8533
8534tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8535  client.send('Hello, client!', (err: BusinessError) => {
8536    if (err) {
8537      console.log('send fail');
8538      return;
8539    }
8540    console.log('send success');
8541  });
8542});
8543```
8544
8545### send<sup>10+</sup>
8546
8547send(data: string \| ArrayBuffer): Promise\<void\>
8548
8549在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
8550
8551**系统能力**:SystemCapability.Communication.NetStack
8552
8553**参数:**
8554
8555| 参数名 | 类型   | 必填 | 说明                                  |
8556| ------ | ------ | ---- | ------------------------------------- |
8557| data   | string \| ArrayBuffer | 是   | TLSSocketServer发送数据所需要的参数。 |
8558
8559**返回值:**
8560
8561| 类型            | 说明                                                      |
8562| --------------- | --------------------------------------------------------- |
8563| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 |
8564
8565**错误码:**
8566
8567| 错误码ID | 错误信息                               |
8568| -------- | -------------------------------------- |
8569| 401      | Parameter error.                       |
8570| 2303501  | SSL is null.                           |
8571| 2303503  | An error occurred when writing data on the TLS socket.|
8572| 2303505  | An error occurred in the TLS system call.|
8573| 2303506  | Failed to close the TLS connection.    |
8574| 2300002  | System internal error.                 |
8575
8576**示例:**
8577
8578```ts
8579import { socket } from '@kit.NetworkKit';
8580import { BusinessError } from '@kit.BasicServicesKit';
8581
8582let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8583let netAddress: socket.NetAddress = {
8584  address: '192.168.xx.xxx',
8585  port: 8080
8586}
8587let tlsSecureOptions: socket.TLSSecureOptions = {
8588  key: "xxxx",
8589  cert: "xxxx",
8590  ca: ["xxxx"],
8591  password: "xxxx",
8592  protocols: socket.Protocol.TLSv12,
8593  useRemoteCipherPrefer: true,
8594  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8595  cipherSuite: "AES256-SHA256"
8596}
8597let tlsConnectOptions: socket.TLSConnectOptions = {
8598  address: netAddress,
8599  secureOptions: tlsSecureOptions,
8600  ALPNProtocols: ["spdy/1", "http/1.1"]
8601}
8602tlsServer.listen(tlsConnectOptions).then(() => {
8603  console.log("listen callback success");
8604}).catch((err: BusinessError) => {
8605  console.log("failed" + err);
8606});
8607
8608tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8609  client.send('Hello, client!').then(() => {
8610    console.log('send success');
8611  }).catch((err: BusinessError) => {
8612    console.log('send fail');
8613  });
8614});
8615```
8616
8617### close<sup>10+</sup>
8618
8619close(callback: AsyncCallback\<void\>): void
8620
8621在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。
8622
8623**系统能力**:SystemCapability.Communication.NetStack
8624
8625**参数:**
8626
8627| 参数名   | 类型                  | 必填 | 说明                                             |
8628| -------- | --------------------- | ---- | ------------------------------------------------ |
8629| callback | AsyncCallback\<void\> | 是   | 回调函数,成功返回空,失败返回错误码、错误信息。 |
8630
8631**错误码:**
8632
8633| 错误码ID | 错误信息                               |
8634| -------- | -------------------------------------- |
8635| 401      | Parameter error.                       |
8636| 2303501  | SSL is null.                           |
8637| 2303505  | An error occurred in the TLS system call. |
8638| 2303506  | Failed to close the TLS connection.    |
8639| 2300002  | System internal error.                 |
8640
8641**示例:**
8642
8643```ts
8644import { socket } from '@kit.NetworkKit';
8645import { BusinessError } from '@kit.BasicServicesKit';
8646
8647let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8648let netAddress: socket.NetAddress = {
8649  address: '192.168.xx.xxx',
8650  port: 8080
8651}
8652let tlsSecureOptions: socket.TLSSecureOptions = {
8653  key: "xxxx",
8654  cert: "xxxx",
8655  ca: ["xxxx"],
8656  password: "xxxx",
8657  protocols: socket.Protocol.TLSv12,
8658  useRemoteCipherPrefer: true,
8659  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8660  cipherSuite: "AES256-SHA256"
8661}
8662let tlsConnectOptions: socket.TLSConnectOptions = {
8663  address: netAddress,
8664  secureOptions: tlsSecureOptions,
8665  ALPNProtocols: ["spdy/1", "http/1.1"]
8666}
8667tlsServer.listen(tlsConnectOptions).then(() => {
8668  console.log("listen callback success");
8669}).catch((err: BusinessError) => {
8670  console.log("failed" + err);
8671});
8672
8673tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8674  client.close((err: BusinessError) => {
8675    if (err) {
8676      console.log('close fail');
8677      return;
8678    }
8679    console.log('close success');
8680  });
8681});
8682```
8683
8684### close<sup>10+</sup>
8685
8686close(): Promise\<void\>
8687
8688在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。
8689
8690**系统能力**:SystemCapability.Communication.NetStack
8691
8692**返回值:**
8693
8694| 类型            | 说明                                                      |
8695| --------------- | --------------------------------------------------------- |
8696| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 |
8697
8698**错误码:**
8699
8700| 错误码ID | 错误信息                               |
8701| -------- | -------------------------------------- |
8702| 2303501  | SSL is null.                           |
8703| 2303505  | An error occurred in the TLS system call. |
8704| 2303506  | Failed to close the TLS connection.    |
8705| 2300002  | System internal error.                 |
8706
8707**示例:**
8708
8709```ts
8710import { socket } from '@kit.NetworkKit';
8711import { BusinessError } from '@kit.BasicServicesKit';
8712
8713let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8714let netAddress: socket.NetAddress = {
8715  address: '192.168.xx.xxx',
8716  port: 8080
8717}
8718let tlsSecureOptions: socket.TLSSecureOptions = {
8719  key: "xxxx",
8720  cert: "xxxx",
8721  ca: ["xxxx"],
8722  password: "xxxx",
8723  protocols: socket.Protocol.TLSv12,
8724  useRemoteCipherPrefer: true,
8725  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8726  cipherSuite: "AES256-SHA256"
8727}
8728let tlsConnectOptions: socket.TLSConnectOptions = {
8729  address: netAddress,
8730  secureOptions: tlsSecureOptions,
8731  ALPNProtocols: ["spdy/1", "http/1.1"]
8732}
8733tlsServer.listen(tlsConnectOptions).then(() => {
8734  console.log("listen callback success");
8735}).catch((err: BusinessError) => {
8736  console.log("failed" + err);
8737});
8738tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8739  client.close().then(() => {
8740    console.log('close success');
8741  }).catch((err: BusinessError) => {
8742    console.log('close fail');
8743  });
8744});
8745```
8746
8747### getRemoteAddress<sup>10+</sup>
8748
8749getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
8750
8751在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
8752
8753**系统能力**:SystemCapability.Communication.NetStack
8754
8755**参数:**
8756
8757| 参数名   | 类型                                        | 必填 | 说明                                                         |
8758| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ |
8759| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 |
8760
8761**错误码:**
8762
8763| 错误码ID | 错误信息                        |
8764| -------- | ------------------------------- |
8765| 401      | Parameter error.                |
8766| 2303188  | Socket operation on non-socket. |
8767| 2300002  | System internal error.          |
8768
8769**示例:**
8770
8771```ts
8772import { socket } from '@kit.NetworkKit';
8773import { BusinessError } from '@kit.BasicServicesKit';
8774
8775let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8776let netAddress: socket.NetAddress = {
8777  address: '192.168.xx.xxx',
8778  port: 8080
8779}
8780let tlsSecureOptions: socket.TLSSecureOptions = {
8781  key: "xxxx",
8782  cert: "xxxx",
8783  ca: ["xxxx"],
8784  password: "xxxx",
8785  protocols: socket.Protocol.TLSv12,
8786  useRemoteCipherPrefer: true,
8787  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8788  cipherSuite: "AES256-SHA256"
8789}
8790let tlsConnectOptions: socket.TLSConnectOptions = {
8791  address: netAddress,
8792  secureOptions: tlsSecureOptions,
8793  ALPNProtocols: ["spdy/1", "http/1.1"]
8794}
8795tlsServer.listen(tlsConnectOptions).then(() => {
8796  console.log("listen callback success");
8797}).catch((err: BusinessError) => {
8798  console.log("failed" + err);
8799});
8800tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8801  client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => {
8802    if (err) {
8803      console.log('getRemoteAddress fail');
8804      return;
8805    }
8806    console.log('getRemoteAddress success:' + JSON.stringify(data));
8807  });
8808});
8809```
8810
8811### getRemoteAddress<sup>10+</sup>
8812
8813getRemoteAddress(): Promise\<NetAddress\>
8814
8815在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
8816
8817**系统能力**:SystemCapability.Communication.NetStack
8818
8819**返回值:**
8820
8821| 类型                                 | 说明                                                         |
8822|  ----------------------------------- |  ----------------------------------------------------------- |
8823| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
8824
8825**错误码:**
8826
8827| 错误码ID | 错误信息                        |
8828| -------- | ------------------------------- |
8829| 2303188  | Socket operation on non-socket. |
8830| 2300002  | System internal error.          |
8831
8832**示例:**
8833
8834```ts
8835import { socket } from '@kit.NetworkKit';
8836import { BusinessError } from '@kit.BasicServicesKit';
8837
8838let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8839let netAddress: socket.NetAddress = {
8840  address: '192.168.xx.xxx',
8841  port: 8080
8842}
8843let tlsSecureOptions: socket.TLSSecureOptions = {
8844  key: "xxxx",
8845  cert: "xxxx",
8846  ca: ["xxxx"],
8847  password: "xxxx",
8848  protocols: socket.Protocol.TLSv12,
8849  useRemoteCipherPrefer: true,
8850  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8851  cipherSuite: "AES256-SHA256"
8852}
8853let tlsConnectOptions: socket.TLSConnectOptions = {
8854  address: netAddress,
8855  secureOptions: tlsSecureOptions,
8856  ALPNProtocols: ["spdy/1", "http/1.1"]
8857}
8858tlsServer.listen(tlsConnectOptions).then(() => {
8859  console.log("listen callback success");
8860}).catch((err: BusinessError) => {
8861  console.log("failed" + err);
8862});
8863tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8864  client.getRemoteAddress().then((data: socket.NetAddress) => {
8865    console.log('getRemoteAddress success:' + JSON.stringify(data));
8866  }).catch((err: BusinessError) => {
8867    console.error("failed" + err);
8868  });
8869});
8870```
8871
8872### getRemoteCertificate<sup>10+</sup>
8873
8874getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
8875
8876在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。
8877
8878**系统能力**:SystemCapability.Communication.NetStack
8879
8880**参数:**
8881
8882| 参数名   | 类型                                                  | 必填 | 说明                                                 |
8883| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- |
8884| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是   | 回调函数,返回对端的证书。失败返回错误码、错误信息。 |
8885
8886**错误码:**
8887
8888| 错误码ID | 错误信息               |
8889| -------- | ---------------------- |
8890| 401      | Parameter error.       |
8891| 2303501  | SSL is null.           |
8892| 2300002  | System internal error. |
8893
8894**示例:**
8895
8896```ts
8897import { socket } from '@kit.NetworkKit';
8898import { BusinessError } from '@kit.BasicServicesKit';
8899import { util } from '@kit.ArkTS';
8900
8901let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8902let netAddress: socket.NetAddress = {
8903  address: '192.168.xx.xxx',
8904  port: 8080
8905}
8906let tlsSecureOptions: socket.TLSSecureOptions = {
8907  key: "xxxx",
8908  cert: "xxxx",
8909  ca: ["xxxx"],
8910  password: "xxxx",
8911  protocols: socket.Protocol.TLSv12,
8912  useRemoteCipherPrefer: true,
8913  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8914  cipherSuite: "AES256-SHA256"
8915}
8916let tlsConnectOptions: socket.TLSConnectOptions = {
8917  address: netAddress,
8918  secureOptions: tlsSecureOptions,
8919  ALPNProtocols: ["spdy/1", "http/1.1"]
8920}
8921tlsServer.listen(tlsConnectOptions).then(() => {
8922  console.log("listen callback success");
8923}).catch((err: BusinessError) => {
8924  console.log("failed" + err);
8925});
8926tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8927  client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => {
8928    if (err) {
8929      console.log("getRemoteCertificate callback error: " + err);
8930    } else {
8931      const decoder = util.TextDecoder.create();
8932      const str = decoder.decodeToString(data.data);
8933      console.log("getRemoteCertificate callback: " + str);
8934    }
8935  });
8936});
8937```
8938
8939### getRemoteCertificate<sup>10+</sup>
8940
8941getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
8942
8943在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。
8944
8945**系统能力**:SystemCapability.Communication.NetStack
8946
8947**返回值:**
8948
8949| 类型                                            | 说明                                                         |
8950| ----------------------------------------------- | ------------------------------------------------------------ |
8951| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 |
8952
8953**错误码:**
8954
8955| 错误码ID | 错误信息               |
8956| -------- | ---------------------- |
8957| 2303501  | SSL is null.           |
8958| 2300002  | System internal error. |
8959
8960**示例:**
8961
8962```ts
8963import { socket } from '@kit.NetworkKit';
8964import { BusinessError } from '@kit.BasicServicesKit';
8965import { util } from '@kit.ArkTS';
8966
8967let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
8968let netAddress: socket.NetAddress = {
8969  address: '192.168.xx.xxx',
8970  port: 8080
8971}
8972let tlsSecureOptions: socket.TLSSecureOptions = {
8973  key: "xxxx",
8974  cert: "xxxx",
8975  ca: ["xxxx"],
8976  password: "xxxx",
8977  protocols: socket.Protocol.TLSv12,
8978  useRemoteCipherPrefer: true,
8979  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
8980  cipherSuite: "AES256-SHA256"
8981}
8982let tlsConnectOptions: socket.TLSConnectOptions = {
8983  address: netAddress,
8984  secureOptions: tlsSecureOptions,
8985  ALPNProtocols: ["spdy/1", "http/1.1"]
8986}
8987tlsServer.listen(tlsConnectOptions).then(() => {
8988  console.log("listen callback success");
8989}).catch((err: BusinessError) => {
8990  console.log("failed" + err);
8991});
8992tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
8993  client.getRemoteCertificate().then((data: socket.X509CertRawData) => {
8994    const decoder = util.TextDecoder.create();
8995    const str = decoder.decodeToString(data.data);
8996    console.log("getRemoteCertificate success: " + str);
8997  }).catch((err: BusinessError) => {
8998    console.error("failed" + err);
8999  });
9000});
9001```
9002
9003### getCipherSuite<sup>10+</sup>
9004
9005getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
9006
9007在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
9008
9009**系统能力**:SystemCapability.Communication.NetStack
9010
9011**参数:**
9012
9013| 参数名   | 类型                             | 必填 | 说明                                                         |
9014| -------- | -------------------------------- | ---- | ------------------------------------------------------------ |
9015| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 |
9016
9017**错误码:**
9018
9019| 错误码ID | 错误信息                               |
9020| -------- | -------------------------------------- |
9021| 401      | Parameter error.                       |
9022| 2303501  | SSL is null.                           |
9023| 2303502  | An error occurred when reading data on the TLS socket.|
9024| 2303505  | An error occurred in the TLS system call.|
9025| 2300002  | System internal error.                 |
9026
9027**示例:**
9028
9029```ts
9030import { socket } from '@kit.NetworkKit';
9031import { BusinessError } from '@kit.BasicServicesKit';
9032
9033let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9034let netAddress: socket.NetAddress = {
9035  address: '192.168.xx.xxx',
9036  port: 8080
9037}
9038let tlsSecureOptions: socket.TLSSecureOptions = {
9039  key: "xxxx",
9040  cert: "xxxx",
9041  ca: ["xxxx"],
9042  password: "xxxx",
9043  protocols: socket.Protocol.TLSv12,
9044  useRemoteCipherPrefer: true,
9045  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9046  cipherSuite: "AES256-SHA256"
9047}
9048let tlsConnectOptions: socket.TLSConnectOptions = {
9049  address: netAddress,
9050  secureOptions: tlsSecureOptions,
9051  ALPNProtocols: ["spdy/1", "http/1.1"]
9052}
9053tlsServer.listen(tlsConnectOptions).then(() => {
9054  console.log("listen callback success");
9055}).catch((err: BusinessError) => {
9056  console.log("failed" + err);
9057});
9058tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9059  client.getCipherSuite((err: BusinessError, data: Array<string>) => {
9060    if (err) {
9061      console.log("getCipherSuite callback error = " + err);
9062    } else {
9063      console.log("getCipherSuite callback = " + data);
9064    }
9065  });
9066});
9067```
9068
9069### getCipherSuite<sup>10+</sup>
9070
9071getCipherSuite(): Promise\<Array\<string\>\>
9072
9073在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
9074
9075**系统能力**:SystemCapability.Communication.NetStack
9076
9077**返回值:**
9078
9079| 类型                       | 说明                                                         |
9080| -------------------------- | ------------------------------------------------------------ |
9081| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
9082
9083**错误码:**
9084
9085| 错误码ID | 错误信息                               |
9086| -------- | -------------------------------------- |
9087| 2303501  | SSL is null.                           |
9088| 2303502  | An error occurred when reading data on the TLS socket.|
9089| 2303505  | An error occurred in the TLS system call. |
9090| 2300002  | System internal error.                 |
9091
9092**示例:**
9093
9094```ts
9095import { socket } from '@kit.NetworkKit';
9096import { BusinessError } from '@kit.BasicServicesKit';
9097
9098let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9099let netAddress: socket.NetAddress = {
9100  address: '192.168.xx.xxx',
9101  port: 8080
9102}
9103let tlsSecureOptions: socket.TLSSecureOptions = {
9104  key: "xxxx",
9105  cert: "xxxx",
9106  ca: ["xxxx"],
9107  password: "xxxx",
9108  protocols: socket.Protocol.TLSv12,
9109  useRemoteCipherPrefer: true,
9110  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9111  cipherSuite: "AES256-SHA256"
9112}
9113let tlsConnectOptions: socket.TLSConnectOptions = {
9114  address: netAddress,
9115  secureOptions: tlsSecureOptions,
9116  ALPNProtocols: ["spdy/1", "http/1.1"]
9117}
9118tlsServer.listen(tlsConnectOptions).then(() => {
9119  console.log("listen callback success");
9120}).catch((err: BusinessError) => {
9121  console.log("failed" + err);
9122});
9123tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9124  client.getCipherSuite().then((data: Array<string>) => {
9125    console.log('getCipherSuite success:' + JSON.stringify(data));
9126  }).catch((err: BusinessError) => {
9127    console.error("failed" + err);
9128  });
9129});
9130```
9131
9132### getSignatureAlgorithms<sup>10+</sup>
9133
9134getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
9135
9136在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。
9137
9138**系统能力**:SystemCapability.Communication.NetStack
9139
9140**参数:**
9141
9142| 参数名   | 类型                             | 必填 | 说明                               |
9143| -------- | -------------------------------- | ---- | ---------------------------------- |
9144| callback | AsyncCallback\<Array\<string\>\> | 是   | 回调函数,返回双方支持的签名算法。 |
9145
9146**错误码:**
9147
9148| 错误码ID | 错误信息               |
9149| -------- | ---------------------- |
9150| 401      | Parameter error.       |
9151| 2303501  | SSL is null.           |
9152| 2300002  | System internal error. |
9153
9154**示例:**
9155
9156```ts
9157import { socket } from '@kit.NetworkKit';
9158import { BusinessError } from '@kit.BasicServicesKit';
9159
9160let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9161let netAddress: socket.NetAddress = {
9162  address: '192.168.xx.xxx',
9163  port: 8080
9164}
9165let tlsSecureOptions: socket.TLSSecureOptions = {
9166  key: "xxxx",
9167  cert: "xxxx",
9168  ca: ["xxxx"],
9169  password: "xxxx",
9170  protocols: socket.Protocol.TLSv12,
9171  useRemoteCipherPrefer: true,
9172  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9173  cipherSuite: "AES256-SHA256"
9174}
9175let tlsConnectOptions: socket.TLSConnectOptions = {
9176  address: netAddress,
9177  secureOptions: tlsSecureOptions,
9178  ALPNProtocols: ["spdy/1", "http/1.1"]
9179}
9180tlsServer.listen(tlsConnectOptions).then(() => {
9181  console.log("listen callback success");
9182}).catch((err: BusinessError) => {
9183  console.log("failed" + err);
9184});
9185tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9186  client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => {
9187    if (err) {
9188      console.log("getSignatureAlgorithms callback error = " + err);
9189    } else {
9190      console.log("getSignatureAlgorithms callback = " + data);
9191    }
9192  });
9193});
9194```
9195
9196### getSignatureAlgorithms<sup>10+</sup>
9197
9198getSignatureAlgorithms(): Promise\<Array\<string\>\>
9199
9200在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。
9201
9202**系统能力**:SystemCapability.Communication.NetStack
9203
9204**返回值:**
9205
9206| 类型                       | 说明                                          |
9207| -------------------------- | --------------------------------------------- |
9208| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
9209
9210**错误码:**
9211
9212| 错误码ID | 错误信息               |
9213| -------- | ---------------------- |
9214| 2303501  | SSL is null.           |
9215| 2300002  | System internal error. |
9216
9217**示例:**
9218
9219```ts
9220import { socket } from '@kit.NetworkKit';
9221import { BusinessError } from '@kit.BasicServicesKit';
9222
9223let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9224let netAddress: socket.NetAddress = {
9225  address: '192.168.xx.xxx',
9226  port: 8080
9227}
9228let tlsSecureOptions: socket.TLSSecureOptions = {
9229  key: "xxxx",
9230  cert: "xxxx",
9231  ca: ["xxxx"],
9232  password: "xxxx",
9233  protocols: socket.Protocol.TLSv12,
9234  useRemoteCipherPrefer: true,
9235  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9236  cipherSuite: "AES256-SHA256"
9237}
9238let tlsConnectOptions: socket.TLSConnectOptions = {
9239  address: netAddress,
9240  secureOptions: tlsSecureOptions,
9241  ALPNProtocols: ["spdy/1", "http/1.1"]
9242}
9243tlsServer.listen(tlsConnectOptions).then(() => {
9244  console.log("listen callback success");
9245}).catch((err: BusinessError) => {
9246  console.log("failed" + err);
9247});
9248tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9249  client.getSignatureAlgorithms().then((data: Array<string>) => {
9250    console.log("getSignatureAlgorithms success" + data);
9251  }).catch((err: BusinessError) => {
9252    console.error("failed" + err);
9253  });
9254});
9255```
9256
9257### getLocalAddress<sup>12+</sup>
9258
9259getLocalAddress(): Promise\<NetAddress\>
9260
9261获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。
9262
9263> **说明:**
9264> 在TLSSocketServer通信连接成功之后,才可调用此方法。
9265
9266**系统能力**:SystemCapability.Communication.NetStack
9267
9268**返回值:**
9269
9270| 类型            | 说明                                                 |
9271|  -------------- |  --------------------------------------------------- |
9272| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 |
9273
9274**错误码:**
9275
9276| 错误码ID | 错误信息                                    |
9277| -------- | ------------------------------------------- |
9278| 2300002  | System internal error.                      |
9279| 2301009  | Bad file descriptor.                            |
9280| 2303188  | Socket operation on non-socket. |
9281
9282**示例:**
9283
9284```ts
9285import { socket } from '@kit.NetworkKit';
9286import { BusinessError } from '@kit.BasicServicesKit';
9287
9288let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9289let netAddress: socket.NetAddress = {
9290  address: '192.168.xx.xxx',
9291  port: 8080
9292}
9293let tlsSecureOptions: socket.TLSSecureOptions = {
9294  key: "xxxx",
9295  cert: "xxxx",
9296  ca: ["xxxx"],
9297  password: "xxxx",
9298  protocols: socket.Protocol.TLSv12,
9299  useRemoteCipherPrefer: true,
9300  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9301  cipherSuite: "AES256-SHA256"
9302}
9303let tlsConnectOptions: socket.TLSConnectOptions = {
9304  address: netAddress,
9305  secureOptions: tlsSecureOptions,
9306  ALPNProtocols: ["spdy/1", "http/1.1"]
9307}
9308tlsServer.listen(tlsConnectOptions).then(() => {
9309  console.info("listen callback success");
9310}).catch((err: BusinessError) => {
9311  console.error("failed" + err);
9312});
9313
9314tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9315  client.getLocalAddress().then((localAddress: socket.NetAddress) => {
9316    console.info("Family IP Port: " + JSON.stringify(localAddress));
9317  }).catch((err: BusinessError) => {
9318    console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err));
9319  })
9320});
9321```
9322
9323### on('message')<sup>10+</sup>
9324
9325on(type: 'message', callback: Callback\<SocketMessageInfo\>): void
9326
9327订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
9328
9329**系统能力**:SystemCapability.Communication.NetStack
9330
9331**参数:**
9332
9333| 参数名   | 类型                                                         | 必填 | 说明                                      |
9334| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
9335| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
9336| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是   | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。                               |
9337
9338**错误码:**
9339
9340| 错误码ID | 错误信息         |
9341| -------- | ---------------- |
9342| 401      | Parameter error. |
9343
9344**示例:**
9345
9346```ts
9347import { socket } from '@kit.NetworkKit';
9348import { BusinessError } from '@kit.BasicServicesKit';
9349
9350let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9351let netAddress: socket.NetAddress = {
9352  address: '192.168.xx.xxx',
9353  port: 8080
9354}
9355let tlsSecureOptions: socket.TLSSecureOptions = {
9356  key: "xxxx",
9357  cert: "xxxx",
9358  ca: ["xxxx"],
9359  password: "xxxx",
9360  protocols: socket.Protocol.TLSv12,
9361  useRemoteCipherPrefer: true,
9362  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9363  cipherSuite: "AES256-SHA256"
9364}
9365let tlsConnectOptions: socket.TLSConnectOptions = {
9366  address: netAddress,
9367  secureOptions: tlsSecureOptions,
9368  ALPNProtocols: ["spdy/1", "http/1.1"]
9369}
9370tlsServer.listen(tlsConnectOptions).then(() => {
9371  console.log("listen callback success");
9372}).catch((err: BusinessError) => {
9373  console.log("failed" + err);
9374});
9375
9376tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9377  client.on('message', (value: socket.SocketMessageInfo) => {
9378    let messageView = '';
9379    for (let i: number = 0; i < value.message.byteLength; i++) {
9380      let uint8Array = new Uint8Array(value.message)
9381      let messages = uint8Array[i]
9382      let message = String.fromCharCode(messages);
9383      messageView += message;
9384    }
9385    console.log('on message message: ' + JSON.stringify(messageView));
9386    console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
9387  });
9388});
9389```
9390
9391### off('message')<sup>10+</sup>
9392
9393off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void
9394
9395取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。
9396
9397**系统能力**:SystemCapability.Communication.NetStack
9398
9399**参数:**
9400
9401| 参数名   | 类型                                                         | 必填 | 说明                                      |
9402| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
9403| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
9404| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否   | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。  |
9405
9406**错误码:**
9407
9408| 错误码ID | 错误信息         |
9409| -------- | ---------------- |
9410| 401      | Parameter error. |
9411
9412**示例:**
9413
9414```ts
9415import { socket } from '@kit.NetworkKit';
9416import { BusinessError } from '@kit.BasicServicesKit';
9417
9418let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9419let netAddress: socket.NetAddress = {
9420  address: '192.168.xx.xxx',
9421  port: 8080
9422}
9423let tlsSecureOptions: socket.TLSSecureOptions = {
9424  key: "xxxx",
9425  cert: "xxxx",
9426  ca: ["xxxx"],
9427  password: "xxxx",
9428  protocols: socket.Protocol.TLSv12,
9429  useRemoteCipherPrefer: true,
9430  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9431  cipherSuite: "AES256-SHA256"
9432}
9433let tlsConnectOptions: socket.TLSConnectOptions = {
9434  address: netAddress,
9435  secureOptions: tlsSecureOptions,
9436  ALPNProtocols: ["spdy/1", "http/1.1"]
9437}
9438tlsServer.listen(tlsConnectOptions).then(() => {
9439  console.log("listen callback success");
9440}).catch((err: BusinessError) => {
9441  console.log("failed" + err);
9442});
9443
9444let callback = (value: socket.SocketMessageInfo) => {
9445  let messageView = '';
9446  for (let i: number = 0; i < value.message.byteLength; i++) {
9447    let uint8Array = new Uint8Array(value.message)
9448    let messages = uint8Array[i]
9449    let message = String.fromCharCode(messages);
9450    messageView += message;
9451  }
9452  console.log('on message message: ' + JSON.stringify(messageView));
9453  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
9454}
9455tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9456  client.on('message', callback);
9457  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
9458  client.off('message', callback);
9459  client.off('message');
9460});
9461```
9462
9463### on('close')<sup>10+</sup>
9464
9465on(type: 'close', callback: Callback\<void\>): void
9466
9467订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
9468
9469**系统能力**:SystemCapability.Communication.NetStack
9470
9471**参数:**
9472
9473| 参数名   | 类型             | 必填 | 说明                                |
9474| -------- | ---------------- | ---- | ----------------------------------- |
9475| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
9476| callback | Callback\<void\> | 是   | 回调函数。成功时返回空,失败时返回错误码、错误信息。    |
9477
9478**错误码:**
9479
9480| 错误码ID | 错误信息         |
9481| -------- | ---------------- |
9482| 401      | Parameter error. |
9483
9484**示例:**
9485
9486```ts
9487import { socket } from '@kit.NetworkKit';
9488import { BusinessError } from '@kit.BasicServicesKit';
9489
9490let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9491let netAddress: socket.NetAddress = {
9492  address: '192.168.xx.xxx',
9493  port: 8080
9494}
9495let tlsSecureOptions: socket.TLSSecureOptions = {
9496  key: "xxxx",
9497  cert: "xxxx",
9498  ca: ["xxxx"],
9499  password: "xxxx",
9500  protocols: socket.Protocol.TLSv12,
9501  useRemoteCipherPrefer: true,
9502  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9503  cipherSuite: "AES256-SHA256"
9504}
9505let tlsConnectOptions: socket.TLSConnectOptions = {
9506  address: netAddress,
9507  secureOptions: tlsSecureOptions,
9508  ALPNProtocols: ["spdy/1", "http/1.1"]
9509}
9510tlsServer.listen(tlsConnectOptions).then(() => {
9511  console.log("listen callback success");
9512}).catch((err: BusinessError) => {
9513  console.log("failed" + err);
9514});
9515tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9516  client.on('close', () => {
9517    console.log("on close success")
9518  });
9519});
9520```
9521
9522### off('close')<sup>10+</sup>
9523
9524off(type: 'close', callback?: Callback\<void\>): void
9525
9526取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。
9527
9528**系统能力**:SystemCapability.Communication.NetStack
9529
9530**参数:**
9531
9532| 参数名   | 类型             | 必填 | 说明                                |
9533| -------- | ---------------- | ---- | ----------------------------------- |
9534| type     | string           | 是   | 订阅的事件类型。'close':关闭事件。 |
9535| callback | Callback\<void\> | 否   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                         |
9536
9537**错误码:**
9538
9539| 错误码ID | 错误信息         |
9540| -------- | ---------------- |
9541| 401      | Parameter error. |
9542
9543**示例:**
9544
9545```ts
9546import { socket } from '@kit.NetworkKit';
9547import { BusinessError } from '@kit.BasicServicesKit';
9548
9549let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9550let netAddress: socket.NetAddress = {
9551  address: '192.168.xx.xxx',
9552  port: 8080
9553}
9554let tlsSecureOptions: socket.TLSSecureOptions = {
9555  key: "xxxx",
9556  cert: "xxxx",
9557  ca: ["xxxx"],
9558  password: "xxxx",
9559  protocols: socket.Protocol.TLSv12,
9560  useRemoteCipherPrefer: true,
9561  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9562  cipherSuite: "AES256-SHA256"
9563}
9564let tlsConnectOptions: socket.TLSConnectOptions = {
9565  address: netAddress,
9566  secureOptions: tlsSecureOptions,
9567  ALPNProtocols: ["spdy/1", "http/1.1"]
9568}
9569tlsServer.listen(tlsConnectOptions).then(() => {
9570  console.log("listen callback success");
9571}).catch((err: BusinessError) => {
9572  console.log("failed" + err);
9573});
9574
9575let callback = () => {
9576  console.log("on close success");
9577}
9578tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9579  client.on('close', callback);
9580  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
9581  client.off('close', callback);
9582  client.off('close');
9583});
9584```
9585
9586### on('error')<sup>10+</sup>
9587
9588on(type: 'error', callback: ErrorCallback): void
9589
9590订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
9591
9592**系统能力**:SystemCapability.Communication.NetStack
9593
9594**参数:**
9595
9596| 参数名   | 类型          | 必填 | 说明                                 |
9597| -------- | ------------- | ---- | ------------------------------------ |
9598| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
9599| callback | ErrorCallback | 是   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                        |
9600
9601**错误码:**
9602
9603| 错误码ID | 错误信息         |
9604| -------- | ---------------- |
9605| 401      | Parameter error. |
9606
9607**示例:**
9608
9609```ts
9610import { socket } from '@kit.NetworkKit';
9611import { BusinessError } from '@kit.BasicServicesKit';
9612
9613let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9614let netAddress: socket.NetAddress = {
9615  address: '192.168.xx.xxx',
9616  port: 8080
9617}
9618let tlsSecureOptions: socket.TLSSecureOptions = {
9619  key: "xxxx",
9620  cert: "xxxx",
9621  ca: ["xxxx"],
9622  password: "xxxx",
9623  protocols: socket.Protocol.TLSv12,
9624  useRemoteCipherPrefer: true,
9625  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9626  cipherSuite: "AES256-SHA256"
9627}
9628let tlsConnectOptions: socket.TLSConnectOptions = {
9629  address: netAddress,
9630  secureOptions: tlsSecureOptions,
9631  ALPNProtocols: ["spdy/1", "http/1.1"]
9632}
9633tlsServer.listen(tlsConnectOptions).then(() => {
9634  console.log("listen callback success");
9635}).catch((err: BusinessError) => {
9636  console.log("failed" + err);
9637});
9638
9639tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9640  client.on('error', (err: BusinessError) => {
9641    console.log("on error, err:" + JSON.stringify(err))
9642  });
9643});
9644```
9645
9646### off('error')<sup>10+</sup>
9647
9648off(type: 'error', callback?: ErrorCallback): void
9649
9650取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。
9651
9652**系统能力**:SystemCapability.Communication.NetStack
9653
9654**参数:**
9655
9656| 参数名   | 类型          | 必填 | 说明                                 |
9657| -------- | ------------- | ---- | ------------------------------------ |
9658| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
9659| callback | ErrorCallback | 否   | 回调函数。成功时返回空,失败时返回错误码、错误信息。                        |
9660
9661**错误码:**
9662
9663| 错误码ID | 错误信息         |
9664| -------- | ---------------- |
9665| 401      | Parameter error. |
9666
9667**示例:**
9668
9669```ts
9670import { socket } from '@kit.NetworkKit';
9671import { BusinessError } from '@kit.BasicServicesKit';
9672
9673let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance();
9674let netAddress: socket.NetAddress = {
9675  address: '192.168.xx.xxx',
9676  port: 8080
9677}
9678let tlsSecureOptions: socket.TLSSecureOptions = {
9679  key: "xxxx",
9680  cert: "xxxx",
9681  ca: ["xxxx"],
9682  password: "xxxx",
9683  protocols: socket.Protocol.TLSv12,
9684  useRemoteCipherPrefer: true,
9685  signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
9686  cipherSuite: "AES256-SHA256"
9687}
9688let tlsConnectOptions: socket.TLSConnectOptions = {
9689  address: netAddress,
9690  secureOptions: tlsSecureOptions,
9691  ALPNProtocols: ["spdy/1", "http/1.1"]
9692}
9693tlsServer.listen(tlsConnectOptions).then(() => {
9694  console.log("listen callback success");
9695}).catch((err: BusinessError) => {
9696  console.log("failed" + err);
9697});
9698
9699let callback = (err: BusinessError) => {
9700  console.log("on error, err:" + JSON.stringify(err));
9701}
9702tlsServer.on('connect', (client: socket.TLSSocketConnection) => {
9703  client.on('error', callback);
9704  // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
9705  client.off('error', callback);
9706  client.off('error');
9707});
9708```
9709