• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.net.socket (Socket连接)
2
3本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。
4
5> **说明:**
6>
7> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
8
9## 导入模块
10
11```js
12import socket from '@ohos.net.socket';
13```
14
15## socket.constructUDPSocketInstance
16
17constructUDPSocketInstance(): UDPSocket
18
19创建一个UDPSocket对象。
20
21**系统能力**:SystemCapability.Communication.NetStack
22
23**返回值:**
24
25| 类型                               | 说明                    |
26| :--------------------------------- | :---------------------- |
27| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 |
28
29**示例:**
30
31```js
32let udp = socket.constructUDPSocketInstance();
33```
34
35## UDPSocket
36
37UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。
38
39### bind
40
41bind(address: NetAddress, callback: AsyncCallback\<void\>): void
42
43绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。
44
45> **说明:**
46> 客户端使用该方法创建socket。
47
48**需要权限**:ohos.permission.INTERNET
49
50**系统能力**:SystemCapability.Communication.NetStack
51
52**参数:**
53
54| 参数名   | 类型                               | 必填 | 说明                                                   |
55| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
56| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
57| callback | AsyncCallback\<void\>              | 是   | 回调函数。                                             |
58
59**错误码:**
60
61| 错误码ID | 错误信息                 |
62| ------- | ----------------------- |
63| 401     | Parameter error.        |
64| 201     | Permission denied.      |
65
66**示例:**
67
68```js
69let udp = socket.constructUDPSocketInstance();
70udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
71  if (err) {
72    console.log('bind fail');
73    return;
74  }
75  console.log('bind success');
76})
77```
78
79### bind
80
81bind(address: NetAddress): Promise\<void\>
82
83绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。
84
85> **说明:**
86> 客户端使用该方法创建socket。
87
88**需要权限**:ohos.permission.INTERNET
89
90**系统能力**:SystemCapability.Communication.NetStack
91
92**参数:**
93
94| 参数名  | 类型                               | 必填 | 说明                                                   |
95| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
96| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
97
98**错误码:**
99
100| 错误码ID | 错误信息                 |
101| ------- | ----------------------- |
102| 401     | Parameter error.        |
103| 201     | Permission denied.      |
104
105**返回值:**
106
107| 类型            | 说明                                       |
108| :-------------- | :----------------------------------------- |
109| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 |
110
111**示例:**
112
113```js
114let udp = socket.constructUDPSocketInstance();
115let promise = udp.bind({address: '192.168.xx.xxx', port: 8080, family: 1});
116promise.then(() => {
117  console.log('bind success');
118}).catch(err => {
119  console.log('bind fail');
120});
121```
122
123### send
124
125send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void
126
127通过UDPSocket连接发送数据。使用callback方式作为异步方法。
128
129发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。
130
131**需要权限**:ohos.permission.INTERNET
132
133**系统能力**:SystemCapability.Communication.NetStack
134
135**参数:**
136
137| 参数名   | 类型                                     | 必填 | 说明                                                         |
138| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
139| options  | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
140| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |
141
142**错误码:**
143
144| 错误码ID | 错误信息                 |
145| ------- | ----------------------- |
146| 401     | Parameter error.        |
147| 201     | Permission denied.      |
148
149**示例:**
150
151```js
152let udp = socket.constructUDPSocketInstance();
153udp.send({
154  data: 'Hello, server!',
155  address: {
156    address: '192.168.xx.xxx',
157    port: xxxx,
158    family: 1
159  }
160}, err => {
161  if (err) {
162    console.log('send fail');
163    return;
164  }
165  console.log('send success');
166})
167```
168
169### send
170
171send(options: UDPSendOptions): Promise\<void\>
172
173通过UDPSocket连接发送数据。使用Promise方式作为异步方法。
174
175发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。
176
177**需要权限**:ohos.permission.INTERNET
178
179**系统能力**:SystemCapability.Communication.NetStack
180
181**参数:**
182
183| 参数名  | 类型                                     | 必填 | 说明                                                         |
184| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
185| options | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
186
187**错误码:**
188
189| 错误码ID | 错误信息                 |
190| ------- | ----------------------- |
191| 401     | Parameter error.        |
192| 201     | Permission denied.      |
193
194**返回值:**
195
196| 类型            | 说明                                           |
197| :-------------- | :--------------------------------------------- |
198| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 |
199
200**示例:**
201
202```js
203let udp = socket.constructUDPSocketInstance();
204let promise = udp.send({
205  data: 'Hello, server!',
206  address: {
207    address: '192.168.xx.xxx',
208    port: xxxx,
209    family: 1
210  }
211});
212promise.then(() => {
213  console.log('send success');
214}).catch(err => {
215  console.log('send fail');
216});
217```
218
219### close
220
221close(callback: AsyncCallback\<void\>): void
222
223关闭UDPSocket连接。使用callback方式作为异步方法。
224
225**需要权限**:ohos.permission.INTERNET
226
227**系统能力**:SystemCapability.Communication.NetStack
228
229**参数:**
230
231| 参数名   | 类型                  | 必填 | 说明       |
232| -------- | --------------------- | ---- | ---------- |
233| callback | AsyncCallback\<void\> | 是   | 回调函数。 |
234
235**示例:**
236
237```js
238let udp = socket.constructUDPSocketInstance();
239udp.close(err => {
240  if (err) {
241    console.log('close fail');
242    return;
243  }
244  console.log('close success');
245})
246```
247
248### close
249
250close(): Promise\<void\>
251
252关闭UDPSocket连接。使用Promise方式作为异步方法。
253
254**需要权限**:ohos.permission.INTERNET
255
256**系统能力**:SystemCapability.Communication.NetStack
257
258**返回值:**
259
260| 类型            | 说明                                       |
261| :-------------- | :----------------------------------------- |
262| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 |
263
264**示例:**
265
266```js
267let udp = socket.constructUDPSocketInstance();
268let promise = udp.close();
269promise.then(() => {
270  console.log('close success');
271}).catch(err => {
272  console.log('close fail');
273});
274```
275
276### getState
277
278getState(callback: AsyncCallback\<SocketStateBase\>): void
279
280获取UDPSocket状态。使用callback方式作为异步方法。
281
282> **说明:**
283> bind方法调用成功后,才可调用此方法。
284
285**需要权限**:ohos.permission.INTERNET
286
287**系统能力**:SystemCapability.Communication.NetStack
288
289**参数:**
290
291| 参数名   | 类型                                                   | 必填 | 说明       |
292| -------- | ------------------------------------------------------ | ---- | ---------- |
293| callback | AsyncCallback<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。 |
294
295**错误码:**
296
297| 错误码ID | 错误信息                 |
298| ------- | ----------------------- |
299| 201     | Permission denied.      |
300
301**示例:**
302
303```js
304let udp = socket.constructUDPSocketInstance();
305udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
306  if (err) {
307    console.log('bind fail');
308    return;
309  }
310  console.log('bind success');
311  udp.getState((err, data) => {
312    if (err) {
313      console.log('getState fail');
314      return;
315    }
316    console.log('getState success:' + JSON.stringify(data));
317  })
318})
319```
320
321### getState
322
323getState(): Promise\<SocketStateBase\>
324
325获取UDPSocket状态。使用Promise方式作为异步方法。
326
327> **说明:**
328> bind方法调用成功后,才可调用此方法。
329
330**需要权限**:ohos.permission.INTERNET
331
332**系统能力**:SystemCapability.Communication.NetStack
333
334**返回值:**
335
336| 类型                                             | 说明                                       |
337| :----------------------------------------------- | :----------------------------------------- |
338| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 |
339
340**示例:**
341
342```js
343let udp = socket.constructUDPSocketInstance();
344let promise = udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
345promise.then(err => {
346  if (err) {
347    console.log('bind fail');
348    return;
349  }
350  console.log('bind success');
351  let promise = udp.getState();
352  promise.then(data => {
353    console.log('getState success:' + JSON.stringify(data));
354  }).catch(err => {
355    console.log('getState fail');
356  });
357});
358```
359
360### setExtraOptions
361
362setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void
363
364设置UDPSocket连接的其他属性。使用callback方式作为异步方法。
365
366> **说明:**
367> bind方法调用成功后,才可调用此方法。
368
369**需要权限**:ohos.permission.INTERNET
370
371**系统能力**:SystemCapability.Communication.NetStack
372
373**参数:**
374
375| 参数名   | 类型                                     | 必填 | 说明                                                         |
376| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
377| options  | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
378| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |
379
380**错误码:**
381
382| 错误码ID | 错误信息                 |
383| ------- | ----------------------- |
384| 401     | Parameter error.        |
385| 201     | Permission denied.      |
386
387**示例:**
388
389```js
390let udp = socket.constructUDPSocketInstance();
391udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
392  if (err) {
393    console.log('bind fail');
394    return;
395  }
396  console.log('bind success');
397  udp.setExtraOptions({
398    receiveBufferSize: 1000,
399    sendBufferSize: 1000,
400    reuseAddress: false,
401    socketTimeout: 6000,
402    broadcast: true
403  }, err => {
404    if (err) {
405      console.log('setExtraOptions fail');
406      return;
407    }
408    console.log('setExtraOptions success');
409  })
410})
411```
412
413### setExtraOptions
414
415setExtraOptions(options: UDPExtraOptions): Promise\<void\>
416
417设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。
418
419> **说明:**
420> bind方法调用成功后,才可调用此方法。
421
422**需要权限**:ohos.permission.INTERNET
423
424**系统能力**:SystemCapability.Communication.NetStack
425
426**参数:**
427
428| 参数名  | 类型                                     | 必填 | 说明                                                         |
429| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
430| options | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
431
432**返回值:**
433
434| 类型            | 说明                                                 |
435| :-------------- | :--------------------------------------------------- |
436| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 |
437
438**错误码:**
439
440| 错误码ID | 错误信息                 |
441| ------- | ----------------------- |
442| 401     | Parameter error.        |
443| 201     | Permission denied.      |
444
445**示例:**
446
447```js
448let udp = socket.constructUDPSocketInstance();
449let promise = udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
450promise.then(() => {
451  console.log('bind success');
452  let promise1 = udp.setExtraOptions({
453    receiveBufferSize: 1000,
454    sendBufferSize: 1000,
455    reuseAddress: false,
456    socketTimeout: 6000,
457    broadcast: true
458  });
459  promise1.then(() => {
460    console.log('setExtraOptions success');
461  }).catch(err => {
462    console.log('setExtraOptions fail');
463  });
464}).catch(err => {
465  console.log('bind fail');
466});
467```
468
469### on('message')
470
471on(type: 'message', callback: Callback\<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
472
473订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
474
475**系统能力**:SystemCapability.Communication.NetStack
476
477**参数:**
478
479| 参数名   | 类型                                                         | 必填 | 说明                                      |
480| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
481| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
482| callback | Callback\<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}\> | 是   | 回调函数。                                |
483
484**示例:**
485
486```js
487let udp = socket.constructUDPSocketInstance();
488udp.on('message', value => {
489  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo);
490});
491```
492
493### off('message')
494
495off(type: 'message', callback?: Callback\<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
496
497取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。
498
499> **说明:**
500> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
501
502**系统能力**:SystemCapability.Communication.NetStack
503
504**参数:**
505
506| 参数名   | 类型                                                         | 必填 | 说明                                      |
507| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
508| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
509| callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | 否   | 回调函数。                                |
510
511**示例:**
512
513```js
514let udp = socket.constructUDPSocketInstance();
515let callback = value => {
516  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo);
517}
518udp.on('message', callback);
519// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
520udp.off('message', callback);
521udp.off('message');
522```
523
524### on('listening' | 'close')
525
526on(type: 'listening' | 'close', callback: Callback\<void\>): void
527
528订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
529
530**系统能力**:SystemCapability.Communication.NetStack
531
532**参数:**
533
534| 参数名   | 类型             | 必填 | 说明                                                         |
535| -------- | ---------------- | ---- | ------------------------------------------------------------ |
536| type     | string           | 是   | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
537| callback | Callback\<void\> | 是   | 回调函数。                                                   |
538
539**示例:**
540
541```js
542let udp = socket.constructUDPSocketInstance();
543udp.on('listening', () => {
544  console.log("on listening success");
545});
546udp.on('close', () => {
547  console.log("on close success");
548});
549```
550
551### off('listening' | 'close')
552
553off(type: 'listening' | 'close', callback?: Callback\<void\>): void
554
555取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。
556
557> **说明:**
558> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
559
560**系统能力**:SystemCapability.Communication.NetStack
561
562**参数:**
563
564| 参数名   | 类型             | 必填 | 说明                                                         |
565| -------- | ---------------- | ---- | ------------------------------------------------------------ |
566| type     | string           | 是   | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
567| callback | Callback\<void\> | 否   | 回调函数。                                                   |
568
569**示例:**
570
571```js
572let udp = socket.constructUDPSocketInstance();
573let callback1 = () => {
574  console.log("on listening, success");
575}
576udp.on('listening', callback1);
577// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
578udp.off('listening', callback1);
579udp.off('listening');
580let callback2 = () => {
581  console.log("on close, success");
582}
583udp.on('close', callback2);
584// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
585udp.off('close', callback2);
586udp.off('close');
587```
588
589### on('error')
590
591on(type: 'error', callback: ErrorCallback): void
592
593订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
594
595**系统能力**:SystemCapability.Communication.NetStack
596
597**参数:**
598
599| 参数名   | 类型          | 必填 | 说明                                 |
600| -------- | ------------- | ---- | ------------------------------------ |
601| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
602| callback | ErrorCallback | 是   | 回调函数。                           |
603
604**示例:**
605
606```js
607let udp = socket.constructUDPSocketInstance();
608udp.on('error', err => {
609  console.log("on error, err:" + JSON.stringify(err))
610});
611```
612
613### off('error')
614
615off(type: 'error', callback?: ErrorCallback): void
616
617取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。
618
619> **说明:**
620> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
621
622**系统能力**:SystemCapability.Communication.NetStack
623
624**参数:**
625
626| 参数名   | 类型          | 必填 | 说明                                 |
627| -------- | ------------- | ---- | ------------------------------------ |
628| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
629| callback | ErrorCallback | 否   | 回调函数。                           |
630
631**示例:**
632
633```js
634let udp = socket.constructUDPSocketInstance();
635let callback = err => {
636  console.log("on error, err:" + JSON.stringify(err));
637}
638udp.on('error', callback);
639// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
640udp.off('error', callback);
641udp.off('error');
642```
643
644## NetAddress
645
646目标地址信息。
647
648**系统能力**:SystemCapability.Communication.NetStack
649
650| 名称  | 类型   | 必填 | 说明                                                         |
651| ------- | ------ | ---- | ------------------------------------------------------------ |
652| address | string | 是   | 本地绑定的ip地址。                                           |
653| port    | number | 否   | 端口号 ,范围0~65535。如果不指定系统随机分配端口。           |
654| family  | number | 否   | 网络协议类型,可选类型:<br />- 1:IPv4<br />- 2:IPv6<br />默认为1。 |
655
656## UDPSendOptions
657
658UDPSocket发送参数。
659
660**系统能力**:SystemCapability.Communication.NetStack
661
662| 名称  | 类型                               | 必填 | 说明           |
663| ------- | ---------------------------------- | ---- | -------------- |
664| data    | string \| ArrayBuffer<sup>7+</sup>                          | 是   | 发送的数据。   |
665| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
666
667## UDPExtraOptions
668
669UDPSocket连接的其他属性。
670
671**系统能力**:SystemCapability.Communication.NetStack
672
673| 名称            | 类型    | 必填 | 说明                             |
674| ----------------- | ------- | ---- | -------------------------------- |
675| broadcast         | boolean | 否   | 是否可以发送广播。默认为false。  |
676| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte)。   |
677| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte)。   |
678| reuseAddress      | boolean | 否   | 是否重用地址。默认为false。      |
679| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。 |
680
681## SocketStateBase
682
683Socket的状态信息。
684
685**系统能力**:SystemCapability.Communication.NetStack
686
687| 名称      | 类型    | 必填 | 说明       |
688| ----------- | ------- | ---- | ---------- |
689| isBound     | boolean | 是   | 是否绑定。 |
690| isClose     | boolean | 是   | 是否关闭。 |
691| isConnected | boolean | 是   | 是否连接。 |
692
693## SocketRemoteInfo
694
695Socket的连接信息。
696
697**系统能力**:SystemCapability.Communication.NetStack
698
699| 名称  | 类型   | 必填 | 说明                                                         |
700| ------- | ------ | ---- | ------------------------------------------------------------ |
701| address | string | 是   | 本地绑定的ip地址。                                           |
702| family  | string | 是   | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 |
703| port    | number | 是   | 端口号,范围0~65535。                                        |
704| size    | number | 是   | 服务器响应信息的字节长度。                                   |
705
706## UDP 错误码说明
707
708UDP 其余错误码映射形式为:2301000 + Linux内核错误码。
709
710错误码的详细介绍参见[Socket错误码](../errorcodes/errorcode-net-socket.md)
711
712## socket.constructTCPSocketInstance
713
714constructTCPSocketInstance(): TCPSocket
715
716创建一个TCPSocket对象。
717
718**系统能力**:SystemCapability.Communication.NetStack
719
720**返回值:**
721
722| 类型                               | 说明                    |
723  | :--------------------------------- | :---------------------- |
724| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 |
725
726**示例:**
727
728```js
729let tcp = socket.constructTCPSocketInstance();
730```
731
732## TCPSocket
733
734TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance)创建TCPSocket对象。
735
736### bind
737
738bind(address: NetAddress, callback: AsyncCallback\<void\>): void
739
740绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方法作为异步方法。
741
742> **说明:**
743> 客户端使用该方法创建socket。
744
745**需要权限**:ohos.permission.INTERNET
746
747**系统能力**:SystemCapability.Communication.NetStack
748
749**参数:**
750
751| 参数名   | 类型                               | 必填 | 说明                                                   |
752| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
753| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
754| callback | AsyncCallback\<void\>              | 是   | 回调函数。                                             |
755
756**错误码:**
757
758| 错误码ID | 错误信息                 |
759| ------- | ----------------------- |
760| 401     | Parameter error.        |
761| 201     | Permission denied.      |
762
763**示例:**
764
765```js
766let tcp = socket.constructTCPSocketInstance();
767tcp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
768  if (err) {
769    console.log('bind fail');
770    return;
771  }
772  console.log('bind success');
773})
774```
775
776### bind
777
778bind(address: NetAddress): Promise\<void\>
779
780绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方法作为异步方法。
781
782> **说明:**
783> 客户端使用该方法创建socket。
784
785**需要权限**:ohos.permission.INTERNET
786
787**系统能力**:SystemCapability.Communication.NetStack
788
789**参数:**
790
791| 参数名  | 类型                               | 必填 | 说明                                                   |
792| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
793| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
794
795**返回值:**
796
797| 类型            | 说明                                                     |
798| :-------------- | :------------------------------------------------------- |
799| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 |
800
801**错误码:**
802
803| 错误码ID | 错误信息                 |
804| ------- | ----------------------- |
805| 401     | Parameter error.        |
806| 201     | Permission denied.      |
807
808**示例:**
809
810```js
811let tcp = socket.constructTCPSocketInstance();
812let promise = tcp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
813promise.then(() => {
814  console.log('bind success');
815}).catch(err => {
816  console.log('bind fail');
817});
818```
819
820### connect
821
822connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void
823
824连接到指定的IP地址和端口。使用callback方法作为异步方法。
825
826> **说明:**
827> bind方法调用成功后,才可调用此方法。
828
829**需要权限**:ohos.permission.INTERNET
830
831**系统能力**:SystemCapability.Communication.NetStack
832
833**参数:**
834
835| 参数名   | 类型                                     | 必填 | 说明                                                         |
836| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
837| options  | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
838| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |
839
840**错误码:**
841
842| 错误码ID | 错误信息                 |
843| ------- | ----------------------- |
844| 401     | Parameter error.        |
845| 201     | Permission denied.      |
846
847**示例:**
848
849```js
850let tcp = socket.constructTCPSocketInstance();
851tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, err => {
852  if (err) {
853    console.log('connect fail');
854    return;
855  }
856  console.log('connect success');
857})
858```
859
860### connect
861
862connect(options: TCPConnectOptions): Promise\<void\>
863
864连接到指定的IP地址和端口。使用promise方法作为异步方法。
865
866**需要权限**:ohos.permission.INTERNET
867
868**系统能力**:SystemCapability.Communication.NetStack
869
870**参数:**
871
872| 参数名  | 类型                                     | 必填 | 说明                                                         |
873| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
874| options | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
875
876**返回值:**
877
878| 类型            | 说明                                                       |
879| :-------------- | :--------------------------------------------------------- |
880| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 |
881
882**错误码:**
883
884| 错误码ID | 错误信息                 |
885| ------- | ----------------------- |
886| 401     | Parameter error.        |
887| 201     | Permission denied.      |
888
889**示例:**
890
891```js
892let tcp = socket.constructTCPSocketInstance();
893let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
894promise.then(() => {
895  console.log('connect success')
896}).catch(err => {
897  console.log('connect fail');
898});
899```
900
901### send
902
903send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
904
905通过TCPSocket连接发送数据。使用callback方式作为异步方法。
906
907> **说明:**
908> connect方法调用成功后,才可调用此方法。
909
910**需要权限**:ohos.permission.INTERNET
911
912**系统能力**:SystemCapability.Communication.NetStack
913
914**参数:**
915
916| 参数名   | 类型                                    | 必填 | 说明                                                         |
917| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
918| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
919| callback | AsyncCallback\<void\>                   | 是   | 回调函数。                                                   |
920
921**错误码:**
922
923| 错误码ID | 错误信息                 |
924| ------- | ----------------------- |
925| 401     | Parameter error.        |
926| 201     | Permission denied.      |
927
928**示例:**
929
930```js
931let tcp = socket.constructTCPSocketInstance();
932tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
933  console.log('connect success');
934  tcp.send({
935    data: 'Hello, server!'
936    //此处省略encoding, 默认为utf-8编码格式
937  }, err => {
938    if (err) {
939      console.log('send fail');
940      return;
941    }
942    console.log('send success');
943  })
944})
945```
946
947### send
948
949send(options: TCPSendOptions): Promise\<void\>
950
951通过TCPSocket连接发送数据。使用Promise方式作为异步方法。
952
953> **说明:**
954> connect方法调用成功后,才可调用此方法。
955
956**需要权限**:ohos.permission.INTERNET
957
958**系统能力**:SystemCapability.Communication.NetStack
959
960**参数:**
961
962| 参数名  | 类型                                    | 必填 | 说明                                                         |
963| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
964| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
965
966**返回值:**
967
968| 类型            | 说明                                               |
969| :-------------- | :------------------------------------------------- |
970| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 |
971
972**错误码:**
973
974| 错误码ID | 错误信息                 |
975| ------- | ----------------------- |
976| 401     | Parameter error.        |
977| 201     | Permission denied.      |
978
979**示例:**
980
981```js
982let tcp = socket.constructTCPSocketInstance();
983let promise1 = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
984promise1.then(() => {
985  console.log('connect success');
986  let promise2 = tcp.send({
987    data: 'Hello, server!'
988  });
989  promise2.then(() => {
990    console.log('send success');
991  }).catch(err => {
992    console.log('send fail');
993  });
994}).catch(err => {
995  console.log('connect fail');
996});
997```
998
999### close
1000
1001close(callback: AsyncCallback\<void\>): void
1002
1003关闭TCPSocket连接。使用callback方式作为异步方法。
1004
1005**需要权限**:ohos.permission.INTERNET
1006
1007**系统能力**:SystemCapability.Communication.NetStack
1008
1009**参数:**
1010
1011| 参数名   | 类型                  | 必填 | 说明       |
1012| -------- | --------------------- | ---- | ---------- |
1013| callback | AsyncCallback\<void\> | 是   | 回调函数。 |
1014
1015**错误码:**
1016
1017| 错误码ID | 错误信息                 |
1018| ------- | ----------------------- |
1019| 201     | Permission denied.      |
1020
1021**示例:**
1022
1023```js
1024let tcp = socket.constructTCPSocketInstance();
1025tcp.close(err => {
1026  if (err) {
1027    console.log('close fail');
1028    return;
1029  }
1030  console.log('close success');
1031})
1032```
1033
1034### close
1035
1036close(): Promise\<void\>
1037
1038关闭TCPSocket连接。使用Promise方式作为异步方法。
1039
1040**需要权限**:ohos.permission.INTERNET
1041
1042**系统能力**:SystemCapability.Communication.NetStack
1043
1044**返回值:**
1045
1046| 类型            | 说明                                       |
1047| :-------------- | :----------------------------------------- |
1048| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 |
1049
1050**错误码:**
1051
1052| 错误码ID | 错误信息                 |
1053| ------- | ----------------------- |
1054| 201     | Permission denied.      |
1055
1056**示例:**
1057
1058```js
1059let tcp = socket.constructTCPSocketInstance();
1060let promise = tcp.close();
1061promise.then(() => {
1062  console.log('close success');
1063}).catch(err => {
1064  console.log('close fail');
1065});
1066```
1067
1068### getRemoteAddress
1069
1070getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
1071
1072获取对端Socket地址。使用callback方式作为异步方法。
1073
1074> **说明:**
1075> connect方法调用成功后,才可调用此方法。
1076
1077**需要权限**:ohos.permission.INTERNET
1078
1079**系统能力**:SystemCapability.Communication.NetStack
1080
1081**参数:**
1082
1083| 参数名   | 类型                                              | 必填 | 说明       |
1084| -------- | ------------------------------------------------- | ---- | ---------- |
1085| callback | AsyncCallback<[NetAddress](#netaddress)> | 是   | 回调函数。 |
1086
1087**错误码:**
1088
1089| 错误码ID | 错误信息                 |
1090| ------- | ----------------------- |
1091| 201     | Permission denied.      |
1092
1093**示例:**
1094
1095```js
1096let tcp = socket.constructTCPSocketInstance();
1097tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
1098  console.log('connect success');
1099  tcp.getRemoteAddress((err, data) => {
1100    if (err) {
1101      console.log('getRemoteAddressfail');
1102      return;
1103    }
1104    console.log('getRemoteAddresssuccess:' + JSON.stringify(data));
1105  })
1106});
1107```
1108
1109### getRemoteAddress
1110
1111getRemoteAddress(): Promise\<NetAddress\>
1112
1113获取对端Socket地址。使用Promise方式作为异步方法。
1114
1115> **说明:**
1116> connect方法调用成功后,才可调用此方法。
1117
1118**需要权限**:ohos.permission.INTERNET
1119
1120**系统能力**:SystemCapability.Communication.NetStack
1121
1122**返回值:**
1123
1124| 类型                                        | 说明                                        |
1125| :------------------------------------------ | :------------------------------------------ |
1126| Promise<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。 |
1127
1128**错误码:**
1129
1130| 错误码ID | 错误信息                 |
1131| ------- | ----------------------- |
1132| 201     | Permission denied.      |
1133
1134**示例:**
1135
1136```js
1137let tcp = socket.constructTCPSocketInstance();
1138let promise1 = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
1139promise1.then(() => {
1140  console.log('connect success');
1141  let promise2 = tcp.getRemoteAddress();
1142  promise2.then(() => {
1143    console.log('getRemoteAddress success');
1144  }).catch(err => {
1145    console.log('getRemoteAddressfail');
1146  });
1147}).catch(err => {
1148  console.log('connect fail');
1149});
1150```
1151
1152### getState
1153
1154getState(callback: AsyncCallback\<SocketStateBase\>): void
1155
1156获取TCPSocket状态。使用callback方式作为异步方法。
1157
1158> **说明:**
1159> bind或connect方法调用成功后,才可调用此方法。
1160
1161**需要权限**:ohos.permission.INTERNET
1162
1163**系统能力**:SystemCapability.Communication.NetStack
1164
1165**参数:**
1166
1167| 参数名   | 类型                                                   | 必填 | 说明       |
1168| -------- | ------------------------------------------------------ | ---- | ---------- |
1169| callback | AsyncCallback<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。 |
1170
1171**错误码:**
1172
1173| 错误码ID | 错误信息                 |
1174| ------- | ----------------------- |
1175| 201     | Permission denied.      |
1176
1177**示例:**
1178
1179```js
1180let tcp = socket.constructTCPSocketInstance();
1181let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
1182  console.log('connect success');
1183  tcp.getState((err, data) => {
1184    if (err) {
1185      console.log('getState fail');
1186      return;
1187    }
1188    console.log('getState success:' + JSON.stringify(data));
1189  });
1190});
1191```
1192
1193### getState
1194
1195getState(): Promise\<SocketStateBase\>
1196
1197获取TCPSocket状态。使用Promise方式作为异步方法。
1198
1199> **说明:**
1200> bind或connect方法调用成功后,才可调用此方法。
1201
1202**需要权限**:ohos.permission.INTERNET
1203
1204**系统能力**:SystemCapability.Communication.NetStack
1205
1206**返回值:**
1207
1208| 类型                                             | 说明                                       |
1209| :----------------------------------------------- | :----------------------------------------- |
1210| Promise<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TCPSocket状态的结果。 |
1211
1212**错误码:**
1213
1214| 错误码ID | 错误信息                 |
1215| ------- | ----------------------- |
1216| 201     | Permission denied.      |
1217
1218**示例:**
1219
1220```js
1221let tcp = socket.constructTCPSocketInstance();
1222let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
1223promise.then(() => {
1224  console.log('connect success');
1225  let promise1 = tcp.getState();
1226  promise1.then(() => {
1227    console.log('getState success');
1228  }).catch(err => {
1229    console.log('getState fail');
1230  });
1231}).catch(err => {
1232  console.log('connect fail');
1233});
1234```
1235
1236### setExtraOptions
1237
1238setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
1239
1240设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
1241
1242> **说明:**
1243> bind或connect方法调用成功后,才可调用此方法。
1244
1245**需要权限**:ohos.permission.INTERNET
1246
1247**系统能力**:SystemCapability.Communication.NetStack
1248
1249**参数:**
1250
1251| 参数名   | 类型                                      | 必填 | 说明                                                         |
1252| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1253| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
1254| callback | AsyncCallback\<void\>                     | 是   | 回调函数。                                                   |
1255
1256**错误码:**
1257
1258| 错误码ID | 错误信息                 |
1259| ------- | ----------------------- |
1260| 401     | Parameter error.        |
1261| 201     | Permission denied.      |
1262
1263**示例:**
1264
1265```js
1266let tcp = socket.constructTCPSocketInstance();
1267let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
1268  console.log('connect success');
1269  tcp.setExtraOptions({
1270    keepAlive: true,
1271    OOBInline: true,
1272    TCPNoDelay: true,
1273    socketLinger: {on: true, linger: 10},
1274    receiveBufferSize: 1000,
1275    sendBufferSize: 1000,
1276    reuseAddress: true,
1277    socketTimeout: 3000,
1278  }, err => {
1279    if (err) {
1280      console.log('setExtraOptions fail');
1281      return;
1282    }
1283    console.log('setExtraOptions success');
1284  });
1285});
1286```
1287
1288### setExtraOptions
1289
1290setExtraOptions(options: TCPExtraOptions): Promise\<void\>
1291
1292设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
1293
1294> **说明:**
1295> bind或connect方法调用成功后,才可调用此方法。
1296
1297**需要权限**:ohos.permission.INTERNET
1298
1299**系统能力**:SystemCapability.Communication.NetStack
1300
1301**参数:**
1302
1303| 参数名  | 类型                                      | 必填 | 说明                                                         |
1304| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1305| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
1306
1307**返回值:**
1308
1309| 类型            | 说明                                                 |
1310| :-------------- | :--------------------------------------------------- |
1311| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 |
1312
1313**错误码:**
1314
1315| 错误码ID | 错误信息                 |
1316| ------- | ----------------------- |
1317| 401     | Parameter error.        |
1318| 201     | Permission denied.      |
1319
1320**示例:**
1321
1322```js
1323let tcp = socket.constructTCPSocketInstance();
1324let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
1325promise.then(() => {
1326  console.log('connect success');
1327  let promise1 = tcp.setExtraOptions({
1328    keepAlive: true,
1329    OOBInline: true,
1330    TCPNoDelay: true,
1331    socketLinger: {on: true, linger: 10},
1332    receiveBufferSize: 1000,
1333    sendBufferSize: 1000,
1334    reuseAddress: true,
1335    socketTimeout: 3000,
1336  });
1337  promise1.then(() => {
1338    console.log('setExtraOptions success');
1339  }).catch(err => {
1340    console.log('setExtraOptions fail');
1341  });
1342}).catch(err => {
1343  console.log('connect fail');
1344});
1345```
1346
1347### on('message')
1348
1349on(type: 'message', callback: Callback<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
1350
1351订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
1352
1353**系统能力**:SystemCapability.Communication.NetStack
1354
1355**参数:**
1356
1357| 参数名   | 类型                                                         | 必填 | 说明                                      |
1358| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
1359| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
1360| callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | 是   | 回调函数。                                |
1361
1362**示例:**
1363
1364```js
1365let tcp = socket.constructTCPSocketInstance();
1366tcp.on('message', value => {
1367  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo)
1368});
1369```
1370
1371### off('message')
1372
1373off(type: 'message', callback?: Callback<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
1374
1375取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。
1376
1377> **说明:**
1378> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1379
1380**系统能力**:SystemCapability.Communication.NetStack
1381
1382**参数:**
1383
1384| 参数名   | 类型                                                         | 必填 | 说明                                      |
1385| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
1386| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
1387| callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | 否   | 回调函数。                                |
1388
1389**示例:**
1390
1391```js
1392let tcp = socket.constructTCPSocketInstance();
1393let callback = value => {
1394  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo);
1395}
1396tcp.on('message', callback);
1397// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1398tcp.off('message', callback);
1399tcp.off('message');
1400```
1401
1402### on('connect' | 'close')
1403
1404on(type: 'connect' | 'close', callback: Callback\<void\>): void
1405
1406订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
1407
1408**系统能力**:SystemCapability.Communication.NetStack
1409
1410**参数:**
1411
1412| 参数名   | 类型             | 必填 | 说明                                                         |
1413| -------- | ---------------- | ---- | ------------------------------------------------------------ |
1414| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
1415| callback | Callback\<void\> | 是   | 回调函数。                                                   |
1416
1417**示例:**
1418
1419```js
1420let tcp = socket.constructTCPSocketInstance();
1421tcp.on('connect', () => {
1422  console.log("on connect success")
1423});
1424tcp.on('close', data => {
1425  console.log("on close success")
1426});
1427```
1428
1429### off('connect' | 'close')
1430
1431off(type: 'connect' | 'close', callback?: Callback\<void\>): void
1432
1433取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。
1434
1435> **说明:**
1436> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1437
1438**系统能力**:SystemCapability.Communication.NetStack
1439
1440**参数:**
1441
1442| 参数名   | 类型             | 必填 | 说明                                                         |
1443| -------- | ---------------- | ---- | ------------------------------------------------------------ |
1444| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
1445| callback | Callback\<void\> | 否   | 回调函数。                                                   |
1446
1447**示例:**
1448
1449```js
1450let tcp = socket.constructTCPSocketInstance();
1451let callback1 = () => {
1452  console.log("on connect success");
1453}
1454tcp.on('connect', callback1);
1455// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1456tcp.off('connect', callback1);
1457tcp.off('connect');
1458let callback2 = () => {
1459  console.log("on close success");
1460}
1461tcp.on('close', callback2);
1462// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1463tcp.off('close', callback2);
1464tcp.off('close');
1465```
1466
1467### on('error')
1468
1469on(type: 'error', callback: ErrorCallback): void
1470
1471订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
1472
1473**系统能力**:SystemCapability.Communication.NetStack
1474
1475**参数:**
1476
1477| 参数名   | 类型          | 必填 | 说明                                 |
1478| -------- | ------------- | ---- | ------------------------------------ |
1479| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
1480| callback | ErrorCallback | 是   | 回调函数。                           |
1481
1482**示例:**
1483
1484```js
1485let tcp = socket.constructTCPSocketInstance();
1486tcp.on('error', err => {
1487  console.log("on error, err:" + JSON.stringify(err))
1488});
1489```
1490
1491### off('error')
1492
1493off(type: 'error', callback?: ErrorCallback): void
1494
1495取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。
1496
1497> **说明:**
1498> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1499
1500**系统能力**:SystemCapability.Communication.NetStack
1501
1502**参数:**
1503
1504| 参数名   | 类型          | 必填 | 说明                                 |
1505| -------- | ------------- | ---- | ------------------------------------ |
1506| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
1507| callback | ErrorCallback | 否   | 回调函数。                           |
1508
1509**示例:**
1510
1511```js
1512let tcp = socket.constructTCPSocketInstance();
1513let callback = err => {
1514  console.log("on error, err:" + JSON.stringify(err));
1515}
1516tcp.on('error', callback);
1517// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1518tcp.off('error', callback);
1519tcp.off('error');
1520```
1521
1522## TCPConnectOptions
1523
1524TCPSocket连接的参数。
1525
1526**系统能力**:SystemCapability.Communication.NetStack
1527
1528| 名称  | 类型                               | 必填 | 说明                       |
1529| ------- | ---------------------------------- | ---- | -------------------------- |
1530| address | [NetAddress](#netaddress) | 是   | 绑定的地址以及端口。       |
1531| timeout | number                             | 否   | 超时时间,单位毫秒(ms)。 |
1532
1533## TCPSendOptions
1534
1535TCPSocket发送请求的参数。
1536
1537**系统能力**:SystemCapability.Communication.NetStack
1538
1539| 名称   | 类型   | 必填 | 说明                                                         |
1540| -------- | ------ | ---- | ------------------------------------------------------------ |
1541| data     | string\| ArrayBuffer<sup>7+</sup>  | 是   | 发送的数据。                                                 |
1542| encoding | string | 否   | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 |
1543
1544## TCPExtraOptions
1545
1546TCPSocket连接的其他属性。
1547
1548**系统能力**:SystemCapability.Communication.NetStack
1549
1550| 名称            | 类型    | 必填 | 说明                                                         |
1551| ----------------- | ------- | ---- | ------------------------------------------------------------ |
1552| keepAlive         | boolean | 否   | 是否保持连接。默认为false。                                  |
1553| OOBInline         | boolean | 否   | 是否为OOB内联。默认为false。                                 |
1554| TCPNoDelay        | boolean | 否   | TCPSocket连接是否无时延。默认为false。                       |
1555| socketLinger      | Object  | 是   | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 |
1556| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte)。                               |
1557| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte)。                               |
1558| reuseAddress      | boolean | 否   | 是否重用地址。默认为false。                                  |
1559| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。                             |
1560
1561## TCP 错误码说明
1562
1563TCP 其余错误码映射形式为:2301000 + Linux内核错误码。
1564
1565错误码的详细介绍参见[Socket错误码](../errorcodes/errorcode-net-socket.md)
1566
1567## socket.constructTLSSocketInstance<sup>9+</sup>
1568
1569constructTLSSocketInstance(): TLSSocket
1570
1571创建并返回一个TLSSocket对象。
1572
1573**系统能力**:SystemCapability.Communication.NetStack
1574
1575**返回值:**
1576
1577| 类型                               | 说明                    |
1578| :--------------------------------- | :---------------------- |
1579| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |
1580
1581**示例:**
1582
1583```js
1584let tls = socket.constructTLSSocketInstance();
1585```
1586
1587## TLSSocket<sup>9+</sup>
1588
1589TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。
1590
1591### bind<sup>9+</sup>
1592
1593bind(address: NetAddress, callback: AsyncCallback\<void\>): void
1594
1595绑定IP地址和端口。使用callback方法作为异步方法。
1596
1597**需要权限**:ohos.permission.INTERNET
1598
1599**系统能力**:SystemCapability.Communication.NetStack
1600
1601**参数:**
1602
1603| 参数名   | 类型                               | 必填 | 说明                                                   |
1604| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1605| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1606| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。 失败返回错误码,错误信息。|
1607
1608**错误码:**
1609
1610| 错误码ID | 错误信息                 |
1611| ------- | ----------------------- |
1612| 401     | Parameter error.        |
1613| 201     | Permission denied.      |
1614| 2303198 | Address already in use. |
1615| 2300002 | System internal error.  |
1616
1617**示例:**
1618
1619```js
1620tls.bind({ address: '192.168.xx.xxx', port: xxxx, family: 1 }, err => {
1621  if (err) {
1622    console.log('bind fail');
1623    return;
1624  }
1625  console.log('bind success');
1626});
1627```
1628
1629### bind<sup>9+</sup>
1630
1631bind(address: NetAddress): Promise\<void\>
1632
1633绑定IP地址和端口。使用Promise方法作为异步方法。
1634
1635**需要权限**:ohos.permission.INTERNET
1636
1637**系统能力**:SystemCapability.Communication.NetStack
1638
1639**参数:**
1640
1641| 参数名  | 类型                               | 必填 | 说明                                                   |
1642| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
1643| address | [NetAddress](#netaddress)          | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
1644
1645**返回值:**
1646
1647| 类型            | 说明                                                     |
1648| :-------------- | :------------------------------------------------------- |
1649| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 |
1650
1651**错误码:**
1652
1653| 错误码ID | 错误信息                 |
1654| ------- | ----------------------- |
1655| 401     | Parameter error.        |
1656| 201     | Permission denied.      |
1657| 2303198 | Address already in use. |
1658| 2300002 | System internal error.  |
1659
1660**示例:**
1661
1662```js
1663let promise = tls.bind({ address: '192.168.xx.xxx', port: xxxx, family: 1 });
1664promise.then(() => {
1665  console.log('bind success');
1666}).catch(err => {
1667  console.log('bind fail');
1668});
1669```
1670
1671### getState<sup>9+</sup>
1672
1673getState(callback: AsyncCallback\<SocketStateBase\>): void
1674
1675在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。
1676
1677**系统能力**:SystemCapability.Communication.NetStack
1678
1679**参数:**
1680
1681| 参数名   | 类型                                                   | 必填 | 说明       |
1682| -------- | ------------------------------------------------------ | ---- | ---------- |
1683| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。成功返回TLSSocket状态,失败返回错误码,错误信息。 |
1684
1685**错误码:**
1686
1687| 错误码ID | 错误信息                        |
1688| ------- | ------------------------------ |
1689| 2303188 | Socket operation on non-socket.|
1690| 2300002 | System internal error.         |
1691
1692**示例:**
1693
1694```js
1695let promise = tls.bind({ address: '192.168.xx.xxx', port: xxxx, family: 1 }, err => {
1696  if (err) {
1697    console.log('bind fail');
1698    return;
1699  }
1700  console.log('bind success');
1701});
1702tls.getState((err, data) => {
1703  if (err) {
1704    console.log('getState fail');
1705    return;
1706  }
1707  console.log('getState success:' + JSON.stringify(data));
1708});
1709```
1710
1711### getState<sup>9+</sup>
1712
1713getState(): Promise\<SocketStateBase\>
1714
1715在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。
1716
1717**系统能力**:SystemCapability.Communication.NetStack
1718
1719**返回值:**
1720
1721| 类型                                             | 说明                                       |
1722| :----------------------------------------------- | :----------------------------------------- |
1723| Promise\<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。|
1724
1725**错误码:**
1726
1727| 错误码ID | 错误信息                        |
1728| ------- | ------------------------------ |
1729| 2303188 | Socket operation on non-socket.|
1730| 2300002 | System internal error.         |
1731
1732**示例:**
1733
1734```js
1735let promiseBind = tls.bind({ address: '192.168.xx.xxx', port: xxxx, family: 1 });
1736promiseBind.then(() => {
1737  console.log('bind success');
1738}).catch((err) => {
1739  console.log('bind fail');
1740});
1741let promise = tls.getState();
1742promise.then(() => {
1743  console.log('getState success');
1744}).catch(err => {
1745  console.log('getState fail');
1746});
1747```
1748
1749### setExtraOptions<sup>9+</sup>
1750
1751setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
1752
1753在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。
1754
1755**系统能力**:SystemCapability.Communication.NetStack
1756
1757**参数:**
1758
1759| 参数名   | 类型                                      | 必填 | 说明                                                         |
1760| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1761| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
1762| callback | AsyncCallback\<void\>                     | 是   | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码,错误信息。|
1763
1764**错误码:**
1765
1766| 错误码ID | 错误信息                        |
1767| ------- | -----------------------------  |
1768| 401     | Parameter error.               |
1769| 2303188 | Socket operation on non-socket.|
1770| 2300002 | System internal error.         |
1771
1772**示例:**
1773
1774```js
1775tls.bind({ address: '192.168.xx.xxx', port: xxxx, family: 1 }, err => {
1776  if (err) {
1777    console.log('bind fail');
1778    return;
1779  }
1780  console.log('bind success');
1781});
1782
1783tls.setExtraOptions({
1784  keepAlive: true,
1785  OOBInline: true,
1786  TCPNoDelay: true,
1787  socketLinger: { on: true, linger: 10 },
1788  receiveBufferSize: 1000,
1789  sendBufferSize: 1000,
1790  reuseAddress: true,
1791  socketTimeout: 3000,
1792}, err => {
1793  if (err) {
1794    console.log('setExtraOptions fail');
1795    return;
1796  }
1797  console.log('setExtraOptions success');
1798});
1799```
1800
1801### setExtraOptions<sup>9+</sup>
1802
1803setExtraOptions(options: TCPExtraOptions): Promise\<void\>
1804
1805在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。
1806
1807**系统能力**:SystemCapability.Communication.NetStack
1808
1809**参数:**
1810
1811| 参数名  | 类型                                      | 必填 | 说明                                                         |
1812| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
1813| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
1814
1815**返回值:**
1816
1817| 类型            | 说明                                                 |
1818| :-------------- | :--------------------------------------------------- |
1819| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 |
1820
1821**错误码:**
1822
1823| 错误码ID | 错误信息                        |
1824| ------- | ------------------------------ |
1825| 401     | Parameter error.               |
1826| 2303188 | Socket operation on non-socket.|
1827| 2300002 | System internal error.         |
1828
1829**示例:**
1830
1831```js
1832tls.bind({ address: '192.168.xx.xxx', port: xxxx, family: 1 }, err => {
1833  if (err) {
1834    console.log('bind fail');
1835    return;
1836  }
1837  console.log('bind success');
1838});
1839let promise = tls.setExtraOptions({
1840  keepAlive: true,
1841  OOBInline: true,
1842  TCPNoDelay: true,
1843  socketLinger: { on: true, linger: 10 },
1844  receiveBufferSize: 1000,
1845  sendBufferSize: 1000,
1846  reuseAddress: true,
1847  socketTimeout: 3000,
1848});
1849promise.then(() => {
1850  console.log('setExtraOptions success');
1851}).catch(err => {
1852  console.log('setExtraOptions fail');
1853});
1854```
1855
1856### on('message')
1857
1858on(type: 'message', callback: Callback<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}>): void;
1859
1860订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
1861
1862**系统能力**:SystemCapability.Communication.NetStack
1863
1864**参数:**
1865
1866| 参数名   | 类型                                                         | 必填 | 说明                                      |
1867| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
1868| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
1869| callback | Callback\<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}\> | 是   | 回调函数。message:接收到的消息;remoteInfo:socket连接信息。 |
1870
1871**示例:**
1872
1873```js
1874let tls = socket.constructTLSSocketInstance();
1875tls.on('message', value => {
1876  for (var i = 0; i < value.message.length; i++) {
1877    let messages = value.message[i]
1878    let message = String.fromCharCode(messages);
1879    let messageView = '';
1880    messageView += item;
1881  }
1882  console.log('on message message: ' + JSON.stringify(messageView));
1883  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
1884});
1885```
1886
1887### off('message')
1888
1889off(type: 'message', callback?: Callback\<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
1890
1891取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。
1892
1893> **说明:**
1894> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1895
1896**系统能力**:SystemCapability.Communication.NetStack
1897
1898**参数:**
1899
1900| 参数名   | 类型                                                         | 必填 | 说明                                      |
1901| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
1902| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
1903| callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | 否   | 回调函数。message:接收到的消息;remoteInfo:socket连接信息。|
1904
1905**示例:**
1906
1907```js
1908let tls = socket.constructTLSSocketInstance();
1909let callback = value => {
1910  for (var i = 0; i < value.message.length; i++) {
1911    let messages = value.message[i]
1912    let message = String.fromCharCode(messages);
1913    let messageView = '';
1914    messageView += item;
1915  }
1916  console.log('on message message: ' + JSON.stringify(messageView));
1917  console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo));
1918}
1919tls.on('message', callback);
1920// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1921tls.off('message', callback);
1922```
1923### on('connect' | 'close')
1924
1925on(type: 'connect' | 'close', callback: Callback\<void\>): void
1926
1927订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
1928
1929**系统能力**:SystemCapability.Communication.NetStack
1930
1931**参数:**
1932
1933| 参数名   | 类型             | 必填 | 说明                                                         |
1934| -------- | ---------------- | ---- | ------------------------------------------------------------ |
1935| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
1936| callback | Callback\<void\> | 是   | 回调函数。                                                   |
1937
1938**示例:**
1939
1940```js
1941let tls = socket.constructTLSSocketInstance();
1942tls.on('connect', () => {
1943  console.log("on connect success")
1944});
1945tls.on('close', () => {
1946  console.log("on close success")
1947});
1948```
1949
1950### off('connect' | 'close')
1951
1952off(type: 'connect' | 'close', callback?: Callback\<void\>): void
1953
1954取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。
1955
1956> **说明:**
1957> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1958
1959**系统能力**:SystemCapability.Communication.NetStack
1960
1961**参数:**
1962
1963| 参数名   | 类型             | 必填 | 说明                                                         |
1964| -------- | ---------------- | ---- | ------------------------------------------------------------ |
1965| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
1966| callback | Callback\<void\> | 否   | 回调函数。                                                   |
1967
1968**示例:**
1969
1970```js
1971let tls = socket.constructTLSSocketInstance();
1972let callback1 = () => {
1973  console.log("on connect success");
1974}
1975tls.on('connect', callback1);
1976// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1977tls.off('connect', callback1);
1978tls.off('connect');
1979let callback2 = () => {
1980  console.log("on close success");
1981}
1982tls.on('close', callback2);
1983// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
1984tls.off('close', callback2);
1985```
1986
1987### on('error')
1988
1989on(type: 'error', callback: ErrorCallback): void
1990
1991订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
1992
1993**系统能力**:SystemCapability.Communication.NetStack
1994
1995**参数:**
1996
1997| 参数名   | 类型          | 必填 | 说明                                 |
1998| -------- | ------------- | ---- | ------------------------------------ |
1999| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2000| callback | ErrorCallback | 是   | 回调函数。                           |
2001
2002**示例:**
2003
2004```js
2005let tls = socket.constructTLSSocketInstance();
2006tls.on('error', err => {
2007  console.log("on error, err:" + JSON.stringify(err))
2008});
2009```
2010
2011### off('error')
2012
2013off(type: 'error', callback?: ErrorCallback): void
2014
2015取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。
2016
2017> **说明:**
2018> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2019
2020**系统能力**:SystemCapability.Communication.NetStack
2021
2022**参数:**
2023
2024| 参数名   | 类型          | 必填 | 说明                                 |
2025| -------- | ------------- | ---- | ------------------------------------ |
2026| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
2027| callback | ErrorCallback | 否   | 回调函数。                           |
2028
2029**示例:**
2030
2031```js
2032let tls = socket.constructTLSSocketInstance();
2033let callback = err => {
2034  console.log("on error, err:" + JSON.stringify(err));
2035}
2036tls.on('error', callback);
2037// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
2038tls.off('error', callback);
2039```
2040
2041### connect<sup>9+</sup>
2042
2043connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
2044
2045在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。
2046
2047**系统能力**:SystemCapability.Communication.NetStack
2048
2049**参数:**
2050
2051| 参数名   | 类型                                   | 必填 | 说明 |
2052| -------- | ---------------------------------------| ----| --------------- |
2053| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocket连接所需要的参数。|
2054| callback | AsyncCallback\<void>                  | 是   | 回调函数,成功无返回,失败返回错误码,错误信息。|
2055
2056**错误码:**
2057
2058| 错误码ID | 错误信息                                      |
2059| ------- | -------------------------------------------- |
2060| 401     | Parameter error.                             |
2061| 2303104 | Interrupted system call.                     |
2062| 2303109 | Bad file number.                             |
2063| 2303111 | Resource temporarily unavailable try again.  |
2064| 2303188 | Socket operation on non-socket.              |
2065| 2303191 | Protocol wrong type for socket.              |
2066| 2303198 | Address already in use.                      |
2067| 2303199 | Cannot assign requested address.             |
2068| 2303210 | Connection timed out.                        |
2069| 2303501 | SSL is null.                                 |
2070| 2303502 | Error in tls reading.                        |
2071| 2303503 | Error in tls writing                         |
2072| 2303505 | Error occurred in the tls system call.       |
2073| 2303506 | Error clearing tls connection.               |
2074| 2300002 | System internal error.                       |
2075
2076**示例:**
2077
2078```js
2079let tlsTwoWay = socket.constructTLSSocketInstance(); // Two way authentication
2080tlsTwoWay.bind({ address: '192.168.xxx.xxx', port: 8080, family: 1 }, err => {
2081  if (err) {
2082    console.log('bind fail');
2083    return;
2084  }
2085  console.log('bind success');
2086});
2087let options = {
2088  ALPNProtocols: ["spdy/1", "http/1.1"],
2089  address: {
2090    address: "192.168.xx.xxx",
2091    port: 8080,
2092    family: 1,
2093  },
2094  secureOptions: {
2095    key: "xxxx",
2096    cert: "xxxx",
2097    ca: ["xxxx"],
2098    password: "xxxx",
2099    protocols: [socket.Protocol.TLSv12],
2100    useRemoteCipherPrefer: true,
2101    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
2102    cipherSuite: "AES256-SHA256",
2103  },
2104};
2105tlsTwoWay.connect(options, (err, data) => {
2106  console.error("connect callback error" + err);
2107  console.log(JSON.stringify(data));
2108});
2109
2110let tlsOneWay = socket.constructTLSSocketInstance(); // One way authentication
2111tlsOneWay.bind({ address: '192.168.xxx.xxx', port: 8080, family: 1 }, err => {
2112  if (err) {
2113    console.log('bind fail');
2114    return;
2115  }
2116  console.log('bind success');
2117});
2118let oneWayOptions = {
2119  address: {
2120    address: "192.168.xxx.xxx",
2121    port: 8080,
2122    family: 1,
2123  },
2124  secureOptions: {
2125    ca: ["xxxx", "xxxx"],
2126    cipherSuite: "AES256-SHA256",
2127  },
2128};
2129tlsOneWay.connect(oneWayOptions, (err, data) => {
2130  console.error("connect callback error" + err);
2131  console.log(JSON.stringify(data));
2132});
2133```
2134
2135### connect<sup>9+</sup>
2136
2137connect(options: TLSConnectOptions): Promise\<void\>
2138
2139在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。
2140
2141**系统能力**:SystemCapability.Communication.NetStack
2142
2143**参数:**
2144
2145| 参数名   | 类型                                   | 必填 | 说明 |
2146| -------- | --------------------------------------| ----| --------------- |
2147| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。|
2148
2149**返回值:**
2150
2151| 类型                                        | 说明                          |
2152| ------------------------------------------- | ----------------------------- |
2153| Promise\<void\>                              | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。|
2154
2155**错误码:**
2156
2157| 错误码ID | 错误信息                                      |
2158| ------- | -------------------------------------------- |
2159| 401     | Parameter error.                             |
2160| 2303104 | Interrupted system call.                     |
2161| 2303109 | Bad file number.                             |
2162| 2303111 | Resource temporarily unavailable try again.  |
2163| 2303188 | Socket operation on non-socket.              |
2164| 2303191 | Protocol wrong type for socket.              |
2165| 2303198 | Address already in use.                      |
2166| 2303199 | Cannot assign requested address.             |
2167| 2303210 | Connection timed out.                        |
2168| 2303501 | SSL is null.                                 |
2169| 2303502 | Error in tls reading.                        |
2170| 2303503 | Error in tls writing                         |
2171| 2303505 | Error occurred in the tls system call.       |
2172| 2303506 | Error clearing tls connection.               |
2173| 2300002 | System internal error.                       |
2174
2175**示例:**
2176
2177```js
2178let tlsTwoWay = socket.constructTLSSocketInstance(); // Two way authentication
2179tlsTwoWay.bind({ address: '192.168.xxx.xxx', port: 8080, family: 1 }, err => {
2180  if (err) {
2181    console.log('bind fail');
2182    return;
2183  }
2184  console.log('bind success');
2185});
2186let options = {
2187  ALPNProtocols: ["spdy/1", "http/1.1"],
2188  address: {
2189    address: "xxxx",
2190    port: 8080,
2191    family: 1,
2192  },
2193  secureOptions: {
2194    key: "xxxx",
2195    cert: "xxxx",
2196    ca: ["xxxx"],
2197    password: "xxxx",
2198    protocols: [socket.Protocol.TLSv12],
2199    useRemoteCipherPrefer: true,
2200    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
2201    cipherSuite: "AES256-SHA256",
2202  },
2203};
2204tlsTwoWay.connect(options).then(data => {
2205  console.log(JSON.stringify(data));
2206}).catch(err => {
2207  console.error(err);
2208});
2209
2210let tlsOneWay = socket.constructTLSSocketInstance(); // One way authentication
2211tlsOneWay.bind({ address: '192.168.xxx.xxx', port: 8080, family: 1 }, err => {
2212  if (err) {
2213    console.log('bind fail');
2214    return;
2215  }
2216  console.log('bind success');
2217});
2218let oneWayOptions = {
2219  address: {
2220    address: "192.168.xxx.xxx",
2221    port: 8080,
2222    family: 1,
2223  },
2224  secureOptions: {
2225    ca: ["xxxx", "xxxx"],
2226    cipherSuite: "AES256-SHA256",
2227  },
2228};
2229tlsOneWay.connect(oneWayOptions).then(data => {
2230  console.log(JSON.stringify(data));
2231}).catch(err => {
2232  console.error(err);
2233});
2234```
2235
2236### getRemoteAddress<sup>9+</sup>
2237
2238getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
2239
2240在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。
2241
2242**系统能力**:SystemCapability.Communication.NetStack
2243
2244**参数:**
2245
2246| 参数名   | 类型                                              | 必填 | 说明       |
2247| -------- | ------------------------------------------------- | ---- | ---------- |
2248| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码,错误信息。 |
2249
2250**错误码:**
2251
2252| 错误码ID | 错误信息                        |
2253| ------- | -----------------------------  |
2254| 2303188 | Socket operation on non-socket.|
2255| 2300002 | System internal error.         |
2256
2257**示例:**
2258
2259```js
2260tls.getRemoteAddress((err, data) => {
2261  if (err) {
2262    console.log('getRemoteAddress fail');
2263    return;
2264  }
2265  console.log('getRemoteAddress success:' + JSON.stringify(data));
2266});
2267```
2268
2269### getRemoteAddress<sup>9+</sup>
2270
2271getRemoteAddress(): Promise\<NetAddress\>
2272
2273在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。
2274
2275**系统能力**:SystemCapability.Communication.NetStack
2276
2277**返回值:**
2278
2279| 类型                                        | 说明                                        |
2280| :------------------------------------------ | :------------------------------------------ |
2281| Promise\<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |
2282
2283**错误码:**
2284
2285| 错误码ID | 错误信息                        |
2286| ------- | ------------------------------ |
2287| 2303188 | Socket operation on non-socket.|
2288| 2300002 | System internal error.         |
2289
2290**示例:**
2291
2292```js
2293let promise = tls.getRemoteAddress();
2294promise.then(() => {
2295  console.log('getRemoteAddress success');
2296}).catch(err => {
2297  console.log('getRemoteAddress fail');
2298});
2299```
2300
2301### getCertificate<sup>9+</sup>
2302
2303getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
2304
2305在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。
2306
2307**系统能力**:SystemCapability.Communication.NetStack
2308
2309**参数:**
2310
2311| 参数名   | 类型                                   | 必填 | 说明 |
2312| -------- | ----------------------------------------| ---- | ---------------|
2313| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>    | 是   | 回调函数,成功返回本地的证书,失败返回错误码,错误信息。|
2314
2315**错误码:**
2316
2317| 错误码ID | 错误信息                        |
2318| ------- | ------------------------------ |
2319| 2303501 | SSL is null.                   |
2320| 2303504 | Error looking up x509.         |
2321| 2300002 | System internal error.         |
2322
2323**示例:**
2324
2325```js
2326tls.getCertificate((err, data) => {
2327  if (err) {
2328    console.log("getCertificate callback error = " + err);
2329  } else {
2330    console.log("getCertificate callback = " + data);
2331  }
2332});
2333```
2334
2335### getCertificate<sup>9+</sup>
2336
2337getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
2338
2339在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。
2340
2341**系统能力**:SystemCapability.Communication.NetStack
2342
2343**返回值:**
2344
2345| 类型            | 说明                  |
2346| -------------- | -------------------- |
2347| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
2348
2349**错误码:**
2350
2351| 错误码ID | 错误信息                        |
2352| ------- | ------------------------------ |
2353| 2303501 | SSL is null.                   |
2354| 2303504 | Error looking up x509.         |
2355| 2300002 | System internal error.         |
2356
2357**示例:**
2358
2359```js
2360tls.getCertificate().then(data => {
2361  console.log(data);
2362}).catch(err => {
2363  console.error(err);
2364});
2365```
2366
2367### getRemoteCertificate<sup>9+</sup>
2368
2369getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
2370
2371在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。
2372
2373**系统能力**:SystemCapability.Communication.NetStack
2374
2375**参数:**
2376
2377| 参数名    | 类型                                    | 必填  | 说明           |
2378| -------- | ----------------------------------------| ---- | ---------------|
2379| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>  | 是   | 回调函数,返回服务端的证书。失败返回错误码,错误信息。 |
2380
2381**错误码:**
2382
2383| 错误码ID | 错误信息                        |
2384| ------- | ------------------------------ |
2385| 2303501 | SSL is null.                   |
2386| 2300002 | System internal error.         |
2387
2388**示例:**
2389
2390```js
2391tls.getRemoteCertificate((err, data) => {
2392  if (err) {
2393    console.log("getRemoteCertificate callback error = " + err);
2394  } else {
2395    console.log("getRemoteCertificate callback = " + data);
2396  }
2397});
2398```
2399
2400### getRemoteCertificate<sup>9+</sup>
2401
2402getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
2403
2404在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。
2405
2406**系统能力**:SystemCapability.Communication.NetStack
2407
2408**返回值:**
2409
2410| 类型            | 说明                  |
2411| -------------- | -------------------- |
2412| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 |
2413
2414**错误码:**
2415
2416| 错误码ID | 错误信息                        |
2417| ------- | ------------------------------ |
2418| 2303501 | SSL is null.                   |
2419| 2300002 | System internal error.         |
2420
2421**示例:**
2422
2423```js
2424tls.getRemoteCertificate().then(data => {
2425  console.log(data);
2426}).catch(err => {
2427  console.error(err);
2428});
2429```
2430
2431### getProtocol<sup>9+</sup>
2432
2433getProtocol(callback: AsyncCallback\<string\>): void
2434
2435在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。
2436
2437**系统能力**:SystemCapability.Communication.NetStack
2438
2439**参数:**
2440
2441| 参数名   | 类型                                       | 必填 | 说明           |
2442| -------- | ----------------------------------------| ---- | ---------------|
2443| callback | AsyncCallback\<string\>                  | 是   | 回调函数,返回通信的协议。失败返回错误码,错误信息。|
2444
2445**错误码:**
2446
2447| 错误码ID | 错误信息                        |
2448| ------- | -----------------------------  |
2449| 2303501 | SSL is null.                   |
2450| 2303505 | Error occurred in the tls system call. |
2451| 2300002 | System internal error.         |
2452
2453**示例:**
2454
2455```js
2456tls.getProtocol((err, data) => {
2457  if (err) {
2458    console.log("getProtocol callback error = " + err);
2459  } else {
2460    console.log("getProtocol callback = " + data);
2461  }
2462});
2463```
2464
2465### getProtocol<sup>9+</sup>
2466
2467getProtocol():Promise\<string\>
2468
2469在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。
2470
2471**系统能力**:SystemCapability.Communication.NetStack
2472
2473**返回值:**
2474
2475| 类型            | 说明                  |
2476| -------------- | -------------------- |
2477| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
2478
2479**错误码:**
2480
2481| 错误码ID | 错误信息                        |
2482| ------- | ------------------------------ |
2483| 2303501 | SSL is null.                   |
2484| 2303505 | Error occurred in the tls system call. |
2485| 2300002 | System internal error.         |
2486
2487**示例:**
2488
2489```js
2490tls.getProtocol().then(data => {
2491  console.log(data);
2492}).catch(err => {
2493  console.error(err);
2494});
2495```
2496
2497### getCipherSuite<sup>9+</sup>
2498
2499getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
2500
2501在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。
2502
2503**系统能力**:SystemCapability.Communication.NetStack
2504
2505**参数:**
2506
2507| 参数名   | 类型                                     | 必填 | 说明 |
2508| -------- | ----------------------------------------| ---- | ---------------|
2509| callback | AsyncCallback\<Array\<string\>\>          | 是   | 回调函数,返回通信双方支持的加密套件。 失败返回错误码,错误信息。 |
2510
2511**错误码:**
2512
2513| 错误码ID | 错误信息                        |
2514| ------- | ------------------------------ |
2515| 2303501 | SSL is null.                   |
2516| 2303502 | Error in tls reading.          |
2517| 2303505 | Error occurred in the tls system call. |
2518| 2300002 | System internal error.         |
2519
2520**示例:**
2521
2522```js
2523tls.getCipherSuite((err, data) => {
2524  if (err) {
2525    console.log("getCipherSuite callback error = " + err);
2526  } else {
2527    console.log("getCipherSuite callback = " + data);
2528  }
2529});
2530```
2531
2532### getCipherSuite<sup>9+</sup>
2533
2534getCipherSuite(): Promise\<Array\<string\>\>
2535
2536在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。
2537
2538**系统能力**:SystemCapability.Communication.NetStack
2539
2540**返回值:**
2541
2542| 类型                    | 说明                  |
2543| ---------------------- | --------------------- |
2544| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
2545
2546**错误码:**
2547
2548| 错误码ID | 错误信息                        |
2549| ------- | ------------------------------ |
2550| 2303501 | SSL is null.                   |
2551| 2303502 | Error in tls reading.          |
2552| 2303505 | Error occurred in the tls system call. |
2553| 2300002 | System internal error.         |
2554
2555**示例:**
2556
2557```js
2558tls.getCipherSuite().then(data => {
2559  console.log('getCipherSuite success:' + JSON.stringify(data));
2560}).catch(err => {
2561  console.error(err);
2562});
2563```
2564
2565### getSignatureAlgorithms<sup>9+</sup>
2566
2567getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
2568
2569在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。
2570
2571**系统能力**:SystemCapability.Communication.NetStack
2572
2573**参数:**
2574
2575| 参数名   | 类型                                   | 必填 | 说明            |
2576| -------- | -------------------------------------| ---- | ---------------|
2577| callback | AsyncCallback\<Array\<string\>\>         | 是   | 回调函数,返回双方支持的签名算法。  |
2578
2579**错误码:**
2580
2581| 错误码ID | 错误信息                        |
2582| ------- | ------------------------------ |
2583| 2303501 | SSL is null.                   |
2584| 2300002 | System internal error.         |
2585
2586**示例:**
2587
2588```js
2589tls.getSignatureAlgorithms((err, data) => {
2590  if (err) {
2591    console.log("getSignatureAlgorithms callback error = " + err);
2592  } else {
2593    console.log("getSignatureAlgorithms callback = " + data);
2594  }
2595});
2596```
2597
2598### getSignatureAlgorithms<sup>9+</sup>
2599
2600getSignatureAlgorithms(): Promise\<Array\<string\>\>
2601
2602在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。
2603
2604**系统能力**:SystemCapability.Communication.NetStack
2605
2606**返回值:**
2607
2608| 类型                    | 说明                  |
2609| ---------------------- | -------------------- |
2610| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
2611
2612**错误码:**
2613
2614| 错误码ID | 错误信息                        |
2615| ------- | ------------------------------ |
2616| 2303501 | SSL is null.                   |
2617| 2300002 | System internal error.         |
2618
2619**示例:**
2620
2621```js
2622tls.getSignatureAlgorithms().then(data => {
2623  console.log("getSignatureAlgorithms success" + data);
2624}).catch(err => {
2625  console.error(err);
2626});
2627```
2628
2629### send<sup>9+</sup>
2630
2631send(data: string, callback: AsyncCallback\<void\>): void
2632
2633在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。
2634
2635**系统能力**:SystemCapability.Communication.NetStack
2636
2637**参数:**
2638
2639| 参数名    | 类型                          | 必填 | 说明            |
2640| -------- | -----------------------------| ---- | ---------------|
2641|   data   | string                       | 是   | 发送的数据内容。   |
2642| callback | AsyncCallback\<void\>         | 是   | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
2643
2644**错误码:**
2645
2646| 错误码ID | 错误信息                                      |
2647| ------- | -------------------------------------------- |
2648| 401     | Parameter error.                             |
2649| 2303501 | SSL is null.                                 |
2650| 2303503 | Error in tls writing                         |
2651| 2303505 | Error occurred in the tls system call.       |
2652| 2303506 | Error clearing tls connection.               |
2653| 2300002 | System internal error.                       |
2654
2655**示例:**
2656
2657```js
2658tls.send("xxxx", (err) => {
2659  if (err) {
2660    console.log("send callback error = " + err);
2661  } else {
2662    console.log("send success");
2663  }
2664});
2665```
2666
2667### send<sup>9+</sup>
2668
2669send(data: string): Promise\<void\>
2670
2671在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。
2672
2673**系统能力**:SystemCapability.Communication.NetStack
2674
2675**参数:**
2676
2677| 参数名    | 类型                          | 必填 | 说明            |
2678| -------- | -----------------------------| ---- | ---------------|
2679|   data   | string                       | 是   | 发送的数据内容。   |
2680
2681**错误码:**
2682
2683| 错误码ID | 错误信息                                      |
2684| ------- | -------------------------------------------- |
2685| 401     | Parameter error.                             |
2686| 2303501 | SSL is null.                                 |
2687| 2303503 | Error in tls writing                         |
2688| 2303505 | Error occurred in the tls system call.       |
2689| 2303506 | Error clearing tls connection.               |
2690| 2300002 | System internal error.                       |
2691
2692**返回值:**
2693
2694| 类型           | 说明                  |
2695| -------------- | -------------------- |
2696| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
2697
2698**示例:**
2699
2700```js
2701tls.send("xxxx").then(() => {
2702  console.log("send success");
2703}).catch(err => {
2704  console.error(err);
2705});
2706```
2707
2708### close<sup>9+</sup>
2709
2710close(callback: AsyncCallback\<void\>): void
2711
2712在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。
2713
2714**系统能力**:SystemCapability.Communication.NetStack
2715
2716**参数:**
2717
2718| 参数名    | 类型                          | 必填 | 说明            |
2719| -------- | -----------------------------| ---- | ---------------|
2720| callback | AsyncCallback\<void\>         | 是   | 回调函数,成功返回TLSSocket关闭连接的结果。 失败返回错误码,错误信息。 |
2721
2722**错误码:**
2723
2724| 错误码ID | 错误信息                                      |
2725| ------- | -------------------------------------------- |
2726| 2303501 | SSL is null.                                 |
2727| 2303505 | Error occurred in the tls system call.       |
2728| 2303506 | Error clearing tls connection.               |
2729| 2300002 | System internal error.                       |
2730
2731**示例:**
2732
2733```js
2734tls.close((err) => {
2735  if (err) {
2736    console.log("close callback error = " + err);
2737  } else {
2738    console.log("close success");
2739  }
2740});
2741```
2742
2743### close<sup>9+</sup>
2744
2745close(): Promise\<void\>
2746
2747在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。
2748
2749**系统能力**:SystemCapability.Communication.NetStack
2750
2751**返回值:**
2752
2753| 类型           | 说明                  |
2754| -------------- | -------------------- |
2755| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 |
2756
2757**错误码:**
2758
2759| 错误码ID | 错误信息                                      |
2760| ------- | -------------------------------------------- |
2761| 2303501 | SSL is null.                                 |
2762| 2303505 | Error occurred in the tls system call.       |
2763| 2303506 | Error clearing tls connection.               |
2764| 2300002 | System internal error.                       |
2765
2766**示例:**
2767
2768```js
2769tls.close().then(() => {
2770  console.log("close success");
2771}).catch(err => {
2772  console.error(err);
2773});
2774```
2775
2776## TLSConnectOptions<sup>9+</sup>
2777
2778TLS连接的操作。
2779
2780**系统能力**:SystemCapability.Communication.NetStack
2781
2782| 名称          | 类型                                     | 必填 | 说明            |
2783| -------------- | ------------------------------------- | ---  |-------------- |
2784| address        | [NetAddress](#netaddress)             | 是  |  网关地址。       |
2785| secureOptions  | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。|
2786| ALPNProtocols  | Array\<string\>                         | 否 | ALPN协议。      |
2787
2788## TLSSecureOptions<sup>9+</sup>
2789
2790TLS安全相关操作,其中ca证书为必选参数,其他参数为可选参数。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。
2791
2792**系统能力**:SystemCapability.Communication.NetStack
2793
2794| 名称                 | 类型                                                    | 必填 | 说明                                |
2795| --------------------- | ------------------------------------------------------ | --- |----------------------------------- |
2796| ca                    | string \| Array\<string\>                               | 是 | 服务端的ca证书,用于认证校验服务端的数字证书。|
2797| cert                  | string                                                  | 否 | 本地客户端的数字证书。                 |
2798| key                   | string                                                  | 否 | 本地数字证书的私钥。                   |
2799| password                | string                                                  | 否 | 读取私钥的密码。                      |
2800| protocols             | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本。                  |
2801| useRemoteCipherPrefer | boolean                                                 | 否 | 优先使用对等方的密码套件。          |
2802| signatureAlgorithms   | string                                                 | 否 | 通信过程中的签名算法。               |
2803| cipherSuite           | string                                                 | 否 | 通信过程中的加密套件。               |
2804
2805## Protocol<sup>9+</sup>
2806
2807TLS通信的协议版本。
2808
2809**系统能力**:SystemCapability.Communication.NetStack
2810
2811| 名称      |    值    | 说明                |
2812| --------- | --------- |------------------ |
2813| TLSv12    | "TLSv1.2" | 使用TLSv1.2协议通信。 |
2814| TLSv13    | "TLSv1.3" | 使用TLSv1.3协议通信。 |
2815
2816## X509CertRawData<sup>9+</sup>
2817
2818存储证书的数据。
2819
2820**系统能力**:SystemCapability.Communication.NetStack
2821
2822| 类型                                                                   | 说明                   |
2823| --------------------------------------------------------------------- | --------------------- |
2824|[cert.EncodingBlob](js-apis-cert.md#datablob) | 存储证书的数据和编码格式 |
2825