js-apis-socket.md 84.2 KB
Newer Older
1
# @ohos.net.socket (Socket连接)
C
clevercong 已提交
2

Y
Yangys 已提交
3 4
本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。

Y
Yangys 已提交
5
> **说明:**
C
clevercong 已提交
6
>
7
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
C
clevercong 已提交
8

C
clevercong 已提交
9
## 导入模块
C
clevercong 已提交
10

Z
zengyawen 已提交
11
```js
C
clevercong 已提交
12 13 14
import socket from '@ohos.net.socket';
```

C
clevercong 已提交
15
## socket.constructUDPSocketInstance
C
clevercong 已提交
16

Y
Yangys 已提交
17
constructUDPSocketInstance(): UDPSocket
C
clevercong 已提交
18 19 20

创建一个UDPSocket对象。

C
clevercong 已提交
21
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
22

C
clevercong 已提交
23
**返回值:**
C
clevercong 已提交
24

C
clevercong 已提交
25 26
| 类型                               | 说明                    |
| :--------------------------------- | :---------------------- |
C
clevercong 已提交
27
| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 |
C
clevercong 已提交
28

C
clevercong 已提交
29
**示例:**
C
clevercong 已提交
30

Z
zengyawen 已提交
31
```js
C
clevercong 已提交
32 33
let udp = socket.constructUDPSocketInstance();
```
C
clevercong 已提交
34

C
clevercong 已提交
35
## UDPSocket
C
clevercong 已提交
36

C
clevercong 已提交
37
UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。
C
clevercong 已提交
38

C
clevercong 已提交
39
### bind
C
clevercong 已提交
40

Y
Yangys 已提交
41
bind(address: NetAddress, callback: AsyncCallback\<void\>): void
C
clevercong 已提交
42 43 44

绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。

C
clevercong 已提交
45 46
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
47
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
48

C
clevercong 已提交
49
**参数:**
C
clevercong 已提交
50

C
clevercong 已提交
51 52
| 参数名   | 类型                               | 必填 | 说明                                                   |
| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
C
clevercong 已提交
53
| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
C
clevercong 已提交
54
| callback | AsyncCallback\<void\>              | 是   | 回调函数。                                             |
C
clevercong 已提交
55

Y
Yangys 已提交
56 57 58 59 60 61 62
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
63
**示例:**
C
clevercong 已提交
64

Z
zengyawen 已提交
65
```js
C
clevercong 已提交
66 67
let udp = socket.constructUDPSocketInstance();
udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
68 69 70 71 72
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
C
clevercong 已提交
73 74
})
```
C
clevercong 已提交
75

C
clevercong 已提交
76
### bind
C
clevercong 已提交
77

Y
Yangys 已提交
78
bind(address: NetAddress): Promise\<void\>
C
clevercong 已提交
79 80 81

绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。

C
clevercong 已提交
82 83
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
84
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
85

C
clevercong 已提交
86
**参数:**
C
clevercong 已提交
87

C
clevercong 已提交
88 89
| 参数名  | 类型                               | 必填 | 说明                                                   |
| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
C
clevercong 已提交
90
| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
C
clevercong 已提交
91

Y
Yangys 已提交
92 93 94 95 96 97
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
C
clevercong 已提交
98

C
clevercong 已提交
99
**返回值:**
C
clevercong 已提交
100

C
clevercong 已提交
101 102 103
| 类型            | 说明                                       |
| :-------------- | :----------------------------------------- |
| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 |
C
clevercong 已提交
104

C
clevercong 已提交
105
**示例:**
C
clevercong 已提交
106

Z
zengyawen 已提交
107
```js
C
clevercong 已提交
108 109
let udp = socket.constructUDPSocketInstance();
let promise = udp.bind({address: '192.168.xx.xxx', port: 8080, family: 1});
Y
Yangys 已提交
110
promise.then(() => {
Y
Yangys 已提交
111
  console.log('bind success');
C
clevercong 已提交
112
}).catch(err => {
Y
Yangys 已提交
113
  console.log('bind fail');
C
clevercong 已提交
114 115
});
```
C
clevercong 已提交
116

C
clevercong 已提交
117
### send
C
clevercong 已提交
118

Y
Yangys 已提交
119
send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void
C
clevercong 已提交
120 121 122

通过UDPSocket连接发送数据。使用callback方式作为异步方法。

123 124
发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。

C
clevercong 已提交
125 126
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
127
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
128

C
clevercong 已提交
129 130 131 132
**参数:**

| 参数名   | 类型                                     | 必填 | 说明                                                         |
| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
133
| options  | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
C
clevercong 已提交
134 135
| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |

Y
Yangys 已提交
136 137 138 139 140 141 142
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
143 144
**示例:**

Z
zengyawen 已提交
145
```js
C
clevercong 已提交
146 147
let udp = socket.constructUDPSocketInstance();
udp.send({
Y
Yangys 已提交
148 149 150 151 152 153
  data: 'Hello, server!',
  address: {
    address: '192.168.xx.xxx',
    port: xxxx,
    family: 1
  }
Y
Yangys 已提交
154
}, err => {
Y
Yangys 已提交
155 156 157 158 159
  if (err) {
    console.log('send fail');
    return;
  }
  console.log('send success');
C
clevercong 已提交
160 161
})
```
C
clevercong 已提交
162

C
clevercong 已提交
163
### send
C
clevercong 已提交
164

Y
Yangys 已提交
165
send(options: UDPSendOptions): Promise\<void\>
C
clevercong 已提交
166 167 168

通过UDPSocket连接发送数据。使用Promise方式作为异步方法。

169 170
发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。

C
clevercong 已提交
171 172
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
173
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
174

C
clevercong 已提交
175
**参数:**
C
clevercong 已提交
176

C
clevercong 已提交
177 178
| 参数名  | 类型                                     | 必填 | 说明                                                         |
| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
179
| options | [UDPSendOptions](#udpsendoptions) | 是   | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 |
C
clevercong 已提交
180

Y
Yangys 已提交
181 182 183 184 185 186 187
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
188
**返回值:**
C
clevercong 已提交
189

C
clevercong 已提交
190 191 192
| 类型            | 说明                                           |
| :-------------- | :--------------------------------------------- |
| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 |
C
clevercong 已提交
193

C
clevercong 已提交
194
**示例:**
C
clevercong 已提交
195

Z
zengyawen 已提交
196
```js
C
clevercong 已提交
197 198
let udp = socket.constructUDPSocketInstance();
let promise = udp.send({
Y
Yangys 已提交
199 200 201 202 203 204
  data: 'Hello, server!',
  address: {
    address: '192.168.xx.xxx',
    port: xxxx,
    family: 1
  }
C
clevercong 已提交
205 206
});
promise.then(() => {
Y
Yangys 已提交
207
  console.log('send success');
C
clevercong 已提交
208
}).catch(err => {
Y
Yangys 已提交
209
  console.log('send fail');
C
clevercong 已提交
210 211
});
```
C
clevercong 已提交
212

C
clevercong 已提交
213
### close
C
clevercong 已提交
214

Y
Yangys 已提交
215
close(callback: AsyncCallback\<void\>): void
C
clevercong 已提交
216 217 218

关闭UDPSocket连接。使用callback方式作为异步方法。

C
clevercong 已提交
219 220
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
221
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
222

C
clevercong 已提交
223
**参数:**
C
clevercong 已提交
224

C
clevercong 已提交
225 226 227
| 参数名   | 类型                  | 必填 | 说明       |
| -------- | --------------------- | ---- | ---------- |
| callback | AsyncCallback\<void\> | 是   | 回调函数。 |
C
clevercong 已提交
228

C
clevercong 已提交
229
**示例:**
C
clevercong 已提交
230

Z
zengyawen 已提交
231
```js
C
clevercong 已提交
232 233
let udp = socket.constructUDPSocketInstance();
udp.close(err => {
Y
Yangys 已提交
234 235 236 237 238
  if (err) {
    console.log('close fail');
    return;
  }
  console.log('close success');
C
clevercong 已提交
239 240
})
```
C
clevercong 已提交
241

C
clevercong 已提交
242
### close
C
clevercong 已提交
243

Y
Yangys 已提交
244
close(): Promise\<void\>
C
clevercong 已提交
245 246 247

关闭UDPSocket连接。使用Promise方式作为异步方法。

C
clevercong 已提交
248 249
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
250
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
251

C
clevercong 已提交
252
**返回值:**
C
clevercong 已提交
253

C
clevercong 已提交
254 255 256
| 类型            | 说明                                       |
| :-------------- | :----------------------------------------- |
| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 |
C
clevercong 已提交
257

C
clevercong 已提交
258
**示例:**
C
clevercong 已提交
259

Z
zengyawen 已提交
260
```js
C
clevercong 已提交
261 262 263
let udp = socket.constructUDPSocketInstance();
let promise = udp.close();
promise.then(() => {
Y
Yangys 已提交
264
  console.log('close success');
C
clevercong 已提交
265
}).catch(err => {
Y
Yangys 已提交
266
  console.log('close fail');
C
clevercong 已提交
267 268
});
```
C
clevercong 已提交
269

C
clevercong 已提交
270
### getState
C
clevercong 已提交
271

Y
Yangys 已提交
272
getState(callback: AsyncCallback\<SocketStateBase\>): void
C
clevercong 已提交
273 274 275

获取UDPSocket状态。使用callback方式作为异步方法。

Y
Yangys 已提交
276 277
> **说明:**
> bind方法调用成功后,才可调用此方法。
C
clevercong 已提交
278 279

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
280

C
clevercong 已提交
281
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
282

C
clevercong 已提交
283 284 285 286
**参数:**

| 参数名   | 类型                                                   | 必填 | 说明       |
| -------- | ------------------------------------------------------ | ---- | ---------- |
C
clevercong 已提交
287
| callback | AsyncCallback<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。 |
C
clevercong 已提交
288

Y
Yangys 已提交
289 290 291 292 293 294
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 201     | Permission denied.      |

C
clevercong 已提交
295 296
**示例:**

Z
zengyawen 已提交
297
```js
C
clevercong 已提交
298 299
let udp = socket.constructUDPSocketInstance();
udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
300 301 302 303 304 305
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
  udp.getState((err, data) => {
Y
Yangys 已提交
306
    if (err) {
Y
Yangys 已提交
307 308
      console.log('getState fail');
      return;
Y
Yangys 已提交
309
    }
Y
Yangys 已提交
310 311
    console.log('getState success:' + JSON.stringify(data));
  })
C
clevercong 已提交
312 313
})
```
C
clevercong 已提交
314

C
clevercong 已提交
315
### getState
C
clevercong 已提交
316

Y
Yangys 已提交
317
getState(): Promise\<SocketStateBase\>
C
clevercong 已提交
318 319 320

获取UDPSocket状态。使用Promise方式作为异步方法。

Y
Yangys 已提交
321 322
> **说明:**
> bind方法调用成功后,才可调用此方法。
C
clevercong 已提交
323 324

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
325

C
clevercong 已提交
326
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
327

C
clevercong 已提交
328
**返回值:**
C
clevercong 已提交
329

C
clevercong 已提交
330 331
| 类型                                             | 说明                                       |
| :----------------------------------------------- | :----------------------------------------- |
Y
Yangys 已提交
332
| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 |
C
clevercong 已提交
333

C
clevercong 已提交
334
**示例:**
C
clevercong 已提交
335

Z
zengyawen 已提交
336
```js
C
clevercong 已提交
337
let udp = socket.constructUDPSocketInstance();
Y
Yangys 已提交
338 339
let promise = udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
promise.then(err => {
Y
Yangys 已提交
340 341 342 343 344 345 346 347 348 349 350
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
  let promise = udp.getState();
  promise.then(data => {
    console.log('getState success:' + JSON.stringify(data));
  }).catch(err => {
    console.log('getState fail');
  });
Y
Yangys 已提交
351
});
C
clevercong 已提交
352
```
C
clevercong 已提交
353

C
clevercong 已提交
354
### setExtraOptions
C
clevercong 已提交
355

Y
Yangys 已提交
356
setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void
C
clevercong 已提交
357 358 359

设置UDPSocket连接的其他属性。使用callback方式作为异步方法。

Y
Yangys 已提交
360 361
> **说明:**
> bind方法调用成功后,才可调用此方法。
C
clevercong 已提交
362 363

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
364

C
clevercong 已提交
365
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
366

C
clevercong 已提交
367 368 369 370
**参数:**

| 参数名   | 类型                                     | 必填 | 说明                                                         |
| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
371
| options  | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
C
clevercong 已提交
372 373
| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |

Y
Yangys 已提交
374 375 376 377 378 379
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
C
clevercong 已提交
380 381 382

**示例:**

Z
zengyawen 已提交
383
```js
C
clevercong 已提交
384
let udp = socket.constructUDPSocketInstance();
Y
Yangys 已提交
385
udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
386 387 388 389 390 391 392 393 394 395 396 397
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
  udp.setExtraOptions({
    receiveBufferSize: 1000,
    sendBufferSize: 1000,
    reuseAddress: false,
    socketTimeout: 6000,
    broadcast: true
  }, err => {
Y
Yangys 已提交
398
    if (err) {
Y
Yangys 已提交
399 400
      console.log('setExtraOptions fail');
      return;
Y
Yangys 已提交
401
    }
Y
Yangys 已提交
402 403
    console.log('setExtraOptions success');
  })
C
clevercong 已提交
404 405
})
```
C
clevercong 已提交
406

C
clevercong 已提交
407
### setExtraOptions
C
clevercong 已提交
408

Y
Yangys 已提交
409
setExtraOptions(options: UDPExtraOptions): Promise\<void\>
C
clevercong 已提交
410 411 412

设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。

Y
Yangys 已提交
413 414
> **说明:**
> bind方法调用成功后,才可调用此方法。
C
clevercong 已提交
415 416

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
417

C
clevercong 已提交
418
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
419

C
clevercong 已提交
420 421 422 423
**参数:**

| 参数名  | 类型                                     | 必填 | 说明                                                         |
| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
424
| options | [UDPExtraOptions](#udpextraoptions) | 是   | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 |
C
clevercong 已提交
425 426 427 428 429 430 431

**返回值:**

| 类型            | 说明                                                 |
| :-------------- | :--------------------------------------------------- |
| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 |

Y
Yangys 已提交
432 433 434 435 436 437 438
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
439 440
**示例:**

Z
zengyawen 已提交
441
```js
C
clevercong 已提交
442
let udp = socket.constructUDPSocketInstance();
Y
Yangys 已提交
443
let promise = udp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
C
clevercong 已提交
444
promise.then(() => {
Y
Yangys 已提交
445 446 447 448 449 450 451 452 453 454 455 456 457
  console.log('bind success');
  let promise1 = udp.setExtraOptions({
    receiveBufferSize: 1000,
    sendBufferSize: 1000,
    reuseAddress: false,
    socketTimeout: 6000,
    broadcast: true
  });
  promise1.then(() => {
    console.log('setExtraOptions success');
  }).catch(err => {
    console.log('setExtraOptions fail');
  });
C
clevercong 已提交
458
}).catch(err => {
Y
Yangys 已提交
459
  console.log('bind fail');
C
clevercong 已提交
460 461
});
```
C
clevercong 已提交
462

Y
Yangys 已提交
463
### on('message')
C
clevercong 已提交
464

Y
Yangys 已提交
465
on(type: 'message', callback: Callback\<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
C
clevercong 已提交
466 467 468

订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。

C
clevercong 已提交
469
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
470

C
clevercong 已提交
471
**参数:**
C
clevercong 已提交
472

C
clevercong 已提交
473 474 475
| 参数名   | 类型                                                         | 必填 | 说明                                      |
| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
Y
Yangys 已提交
476
| callback | Callback\<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}\> | 是   | 回调函数。                                |
C
clevercong 已提交
477

C
clevercong 已提交
478
**示例:**
C
clevercong 已提交
479

Z
zengyawen 已提交
480
```js
C
clevercong 已提交
481 482
let udp = socket.constructUDPSocketInstance();
udp.on('message', value => {
Y
Yangys 已提交
483
  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo);
C
clevercong 已提交
484 485
});
```
C
clevercong 已提交
486

Y
Yangys 已提交
487
### off('message')
C
clevercong 已提交
488

Y
Yangys 已提交
489
off(type: 'message', callback?: Callback\<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
C
clevercong 已提交
490 491 492

取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。

Y
Yangys 已提交
493 494
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
495

C
clevercong 已提交
496
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
497

C
clevercong 已提交
498
**参数:**
C
clevercong 已提交
499

C
clevercong 已提交
500 501 502
| 参数名   | 类型                                                         | 必填 | 说明                                      |
| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
C
clevercong 已提交
503
| callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | 否   | 回调函数。                                |
C
clevercong 已提交
504

C
clevercong 已提交
505
**示例:**
C
clevercong 已提交
506

Z
zengyawen 已提交
507
```js
C
clevercong 已提交
508
let udp = socket.constructUDPSocketInstance();
Y
Yangys 已提交
509
let callback = value => {
Y
Yangys 已提交
510
  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo);
C
clevercong 已提交
511 512 513 514 515 516
}
udp.on('message', callback);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
udp.off('message', callback);
udp.off('message');
```
C
clevercong 已提交
517

Y
Yangys 已提交
518
### on('listening' | 'close')
C
clevercong 已提交
519

Y
Yangys 已提交
520
on(type: 'listening' | 'close', callback: Callback\<void\>): void
C
clevercong 已提交
521 522 523

订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。

C
clevercong 已提交
524
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
525

C
clevercong 已提交
526
**参数:**
C
clevercong 已提交
527

C
clevercong 已提交
528 529 530 531
| 参数名   | 类型             | 必填 | 说明                                                         |
| -------- | ---------------- | ---- | ------------------------------------------------------------ |
| type     | string           | 是   | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
| callback | Callback\<void\> | 是   | 回调函数。                                                   |
C
clevercong 已提交
532

C
clevercong 已提交
533
**示例:**
C
clevercong 已提交
534

Z
zengyawen 已提交
535
```js
C
clevercong 已提交
536 537
let udp = socket.constructUDPSocketInstance();
udp.on('listening', () => {
Y
Yangys 已提交
538
  console.log("on listening success");
C
clevercong 已提交
539 540
});
udp.on('close', () => {
Y
Yangys 已提交
541
  console.log("on close success");
C
clevercong 已提交
542 543
});
```
C
clevercong 已提交
544

Y
Yangys 已提交
545
### off('listening' | 'close')
C
clevercong 已提交
546

Y
Yangys 已提交
547
off(type: 'listening' | 'close', callback?: Callback\<void\>): void
C
clevercong 已提交
548 549 550

取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。

Y
Yangys 已提交
551 552
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
553

C
clevercong 已提交
554
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
555

C
clevercong 已提交
556 557 558 559 560 561 562 563 564
**参数:**

| 参数名   | 类型             | 必填 | 说明                                                         |
| -------- | ---------------- | ---- | ------------------------------------------------------------ |
| type     | string           | 是   | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 |
| callback | Callback\<void\> | 否   | 回调函数。                                                   |

**示例:**

Z
zengyawen 已提交
565
```js
C
clevercong 已提交
566
let udp = socket.constructUDPSocketInstance();
Y
Yangys 已提交
567
let callback1 = () => {
Y
Yangys 已提交
568
  console.log("on listening, success");
C
clevercong 已提交
569 570 571 572 573
}
udp.on('listening', callback1);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
udp.off('listening', callback1);
udp.off('listening');
Y
Yangys 已提交
574
let callback2 = () => {
Y
Yangys 已提交
575
  console.log("on close, success");
C
clevercong 已提交
576 577 578 579 580 581
}
udp.on('close', callback2);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
udp.off('close', callback2);
udp.off('close');
```
C
clevercong 已提交
582

Y
Yangys 已提交
583
### on('error')
C
clevercong 已提交
584

Y
Yangys 已提交
585
on(type: 'error', callback: ErrorCallback): void
C
clevercong 已提交
586 587 588

订阅UDPSocket连接的error事件。使用callback方式作为异步方法。

C
clevercong 已提交
589
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
590

C
clevercong 已提交
591
**参数:**
C
clevercong 已提交
592

C
clevercong 已提交
593 594 595 596
| 参数名   | 类型          | 必填 | 说明                                 |
| -------- | ------------- | ---- | ------------------------------------ |
| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
| callback | ErrorCallback | 是   | 回调函数。                           |
C
clevercong 已提交
597

C
clevercong 已提交
598
**示例:**
C
clevercong 已提交
599

Z
zengyawen 已提交
600
```js
Z
zengyawen 已提交
601
let udp = socket.constructUDPSocketInstance();
C
clevercong 已提交
602
udp.on('error', err => {
Y
Yangys 已提交
603
  console.log("on error, err:" + JSON.stringify(err))
C
clevercong 已提交
604 605
});
```
C
clevercong 已提交
606

Y
Yangys 已提交
607
### off('error')
C
clevercong 已提交
608

Y
Yangys 已提交
609
off(type: 'error', callback?: ErrorCallback): void
C
clevercong 已提交
610 611 612

取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。

Y
Yangys 已提交
613 614
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
615

C
clevercong 已提交
616
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
617

C
clevercong 已提交
618
**参数:**
C
clevercong 已提交
619

C
clevercong 已提交
620 621 622 623
| 参数名   | 类型          | 必填 | 说明                                 |
| -------- | ------------- | ---- | ------------------------------------ |
| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
| callback | ErrorCallback | 否   | 回调函数。                           |
C
clevercong 已提交
624

C
clevercong 已提交
625
**示例:**
C
clevercong 已提交
626

Z
zengyawen 已提交
627
```js
Z
zengyawen 已提交
628
let udp = socket.constructUDPSocketInstance();
Y
Yangys 已提交
629
let callback = err => {
Y
Yangys 已提交
630
  console.log("on error, err:" + JSON.stringify(err));
C
clevercong 已提交
631 632 633 634 635 636
}
udp.on('error', callback);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
udp.off('error', callback);
udp.off('error');
```
C
clevercong 已提交
637

C
clevercong 已提交
638
## NetAddress
C
clevercong 已提交
639 640 641

目标地址信息。

Z
zengyawen 已提交
642
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
643

L
liyufan 已提交
644
| 名称  | 类型   | 必填 | 说明                                                         |
C
clevercong 已提交
645 646 647 648 649
| ------- | ------ | ---- | ------------------------------------------------------------ |
| address | string | 是   | 本地绑定的ip地址。                                           |
| port    | number | 否   | 端口号 ,范围0~65535。如果不指定系统随机分配端口。           |
| family  | number | 否   | 网络协议类型,可选类型:<br />- 1:IPv4<br />- 2:IPv6<br />默认为1。 |

C
clevercong 已提交
650
## UDPSendOptions
C
clevercong 已提交
651 652 653

UDPSocket发送参数。

Z
zengyawen 已提交
654
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
655

L
liyufan 已提交
656
| 名称  | 类型                               | 必填 | 说明           |
C
clevercong 已提交
657
| ------- | ---------------------------------- | ---- | -------------- |
Z
zhuwenchao 已提交
658
| data    | string \| ArrayBuffer<sup>7+</sup>                          | 是   | 发送的数据。   |
C
clevercong 已提交
659
| address | [NetAddress](#netaddress) | 是   | 目标地址信息。 |
C
clevercong 已提交
660

C
clevercong 已提交
661
## UDPExtraOptions
C
clevercong 已提交
662 663 664

UDPSocket连接的其他属性。

Z
zengyawen 已提交
665
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
666

L
liyufan 已提交
667
| 名称            | 类型    | 必填 | 说明                             |
C
clevercong 已提交
668 669 670 671 672 673 674
| ----------------- | ------- | ---- | -------------------------------- |
| broadcast         | boolean | 否   | 是否可以发送广播。默认为false。  |
| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte)。   |
| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte)。   |
| reuseAddress      | boolean | 否   | 是否重用地址。默认为false。      |
| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。 |

C
clevercong 已提交
675
## SocketStateBase
C
clevercong 已提交
676 677 678

Socket的状态信息。

Z
zengyawen 已提交
679
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
680

L
liyufan 已提交
681
| 名称      | 类型    | 必填 | 说明       |
C
clevercong 已提交
682 683 684 685 686
| ----------- | ------- | ---- | ---------- |
| isBound     | boolean | 是   | 是否绑定。 |
| isClose     | boolean | 是   | 是否关闭。 |
| isConnected | boolean | 是   | 是否连接。 |

C
clevercong 已提交
687
## SocketRemoteInfo
C
clevercong 已提交
688 689 690

Socket的连接信息。

Z
zengyawen 已提交
691
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
692

L
liyufan 已提交
693
| 名称  | 类型   | 必填 | 说明                                                         |
C
clevercong 已提交
694 695 696 697 698 699
| ------- | ------ | ---- | ------------------------------------------------------------ |
| address | string | 是   | 本地绑定的ip地址。                                           |
| family  | string | 是   | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 |
| port    | number | 是   | 端口号,范围0~65535。                                        |
| size    | number | 是   | 服务器响应信息的字节长度。                                   |

Y
Yangys 已提交
700
## UDP 错误码说明
Y
Yangys 已提交
701

Y
Yangys 已提交
702
UDP 其余错误码映射形式为:2301000 + Linux内核错误码。
Y
Yangys 已提交
703

Y
Yangys 已提交
704
错误码的详细介绍参见[Socket错误码](../errorcodes/errorcode-net-socket.md)
Y
Yangys 已提交
705

C
clevercong 已提交
706
## socket.constructTCPSocketInstance
C
clevercong 已提交
707

Y
Yangys 已提交
708
constructTCPSocketInstance(): TCPSocket
C
clevercong 已提交
709 710 711

创建一个TCPSocket对象。

C
clevercong 已提交
712
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
713

C
clevercong 已提交
714
**返回值:**
C
clevercong 已提交
715

Y
Yangys 已提交
716
| 类型                               | 说明                    |
C
clevercong 已提交
717
  | :--------------------------------- | :---------------------- |
Y
Yangys 已提交
718
| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 |
C
clevercong 已提交
719

C
clevercong 已提交
720
**示例:**
C
clevercong 已提交
721

Z
zengyawen 已提交
722
```js
C
clevercong 已提交
723 724
let tcp = socket.constructTCPSocketInstance();
```
C
clevercong 已提交
725

C
clevercong 已提交
726
## TCPSocket
C
clevercong 已提交
727

C
clevercong 已提交
728
TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance)创建TCPSocket对象。
C
clevercong 已提交
729

C
clevercong 已提交
730
### bind
C
clevercong 已提交
731

Y
Yangys 已提交
732
bind(address: NetAddress, callback: AsyncCallback\<void\>): void
C
clevercong 已提交
733 734 735

绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方法作为异步方法。

C
clevercong 已提交
736 737
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
738
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
739

C
clevercong 已提交
740
**参数:**
C
clevercong 已提交
741

C
clevercong 已提交
742 743
| 参数名   | 类型                               | 必填 | 说明                                                   |
| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
C
clevercong 已提交
744
| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
C
clevercong 已提交
745
| callback | AsyncCallback\<void\>              | 是   | 回调函数。                                             |
C
clevercong 已提交
746

Y
Yangys 已提交
747 748 749 750 751 752
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
C
clevercong 已提交
753

C
clevercong 已提交
754
**示例:**
C
clevercong 已提交
755

Z
zengyawen 已提交
756
```js
C
clevercong 已提交
757 758
let tcp = socket.constructTCPSocketInstance();
tcp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
759 760 761 762 763
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
C
clevercong 已提交
764 765
})
```
C
clevercong 已提交
766

C
clevercong 已提交
767
### bind
C
clevercong 已提交
768

Y
Yangys 已提交
769
bind(address: NetAddress): Promise\<void\>
C
clevercong 已提交
770 771 772

绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方法作为异步方法。

C
clevercong 已提交
773 774
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
775
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
776

C
clevercong 已提交
777
**参数:**
C
clevercong 已提交
778

C
clevercong 已提交
779 780
| 参数名  | 类型                               | 必填 | 说明                                                   |
| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
C
clevercong 已提交
781
| address | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
C
clevercong 已提交
782

C
clevercong 已提交
783
**返回值:**
C
clevercong 已提交
784

C
clevercong 已提交
785 786 787
| 类型            | 说明                                                     |
| :-------------- | :------------------------------------------------------- |
| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 |
C
clevercong 已提交
788

Y
Yangys 已提交
789 790 791 792 793 794 795
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
796
**示例:**
C
clevercong 已提交
797

Z
zengyawen 已提交
798
```js
C
clevercong 已提交
799 800 801
let tcp = socket.constructTCPSocketInstance();
let promise = tcp.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
promise.then(() => {
Y
Yangys 已提交
802
  console.log('bind success');
C
clevercong 已提交
803
}).catch(err => {
Y
Yangys 已提交
804
  console.log('bind fail');
C
clevercong 已提交
805 806
});
```
C
clevercong 已提交
807

C
clevercong 已提交
808
### connect
C
clevercong 已提交
809

Y
Yangys 已提交
810
connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void
C
clevercong 已提交
811 812 813

连接到指定的IP地址和端口。使用callback方法作为异步方法。

Y
Yangys 已提交
814 815
> **说明:**
> bind方法调用成功后,才可调用此方法。
Y
Yangys 已提交
816

C
clevercong 已提交
817 818
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
819
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
820

C
clevercong 已提交
821
**参数:**
C
clevercong 已提交
822

C
clevercong 已提交
823 824
| 参数名   | 类型                                     | 必填 | 说明                                                         |
| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
825
| options  | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
C
clevercong 已提交
826
| callback | AsyncCallback\<void\>                    | 是   | 回调函数。                                                   |
C
clevercong 已提交
827

Y
Yangys 已提交
828 829 830 831 832 833 834
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
835
**示例:**
C
clevercong 已提交
836

Z
zengyawen 已提交
837
```js
C
clevercong 已提交
838
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
839
tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, err => {
Y
Yangys 已提交
840 841 842 843 844
  if (err) {
    console.log('connect fail');
    return;
  }
  console.log('connect success');
C
clevercong 已提交
845 846
})
```
C
clevercong 已提交
847

C
clevercong 已提交
848
### connect
C
clevercong 已提交
849

Y
Yangys 已提交
850
connect(options: TCPConnectOptions): Promise\<void\>
C
clevercong 已提交
851 852 853

连接到指定的IP地址和端口。使用promise方法作为异步方法。

C
clevercong 已提交
854 855
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
856
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
857

C
clevercong 已提交
858
**参数:**
C
clevercong 已提交
859

C
clevercong 已提交
860 861
| 参数名  | 类型                                     | 必填 | 说明                                                         |
| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
862
| options | [TCPConnectOptions](#tcpconnectoptions) | 是   | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 |
C
clevercong 已提交
863

C
clevercong 已提交
864
**返回值:**
C
clevercong 已提交
865

C
clevercong 已提交
866 867 868
| 类型            | 说明                                                       |
| :-------------- | :--------------------------------------------------------- |
| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 |
C
clevercong 已提交
869

Y
Yangys 已提交
870 871 872 873 874 875 876
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
877
**示例:**
C
clevercong 已提交
878

Z
zengyawen 已提交
879
```js
C
clevercong 已提交
880
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
881
let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
C
clevercong 已提交
882
promise.then(() => {
Y
Yangys 已提交
883
  console.log('connect success')
C
clevercong 已提交
884
}).catch(err => {
Y
Yangys 已提交
885
  console.log('connect fail');
C
clevercong 已提交
886 887
});
```
C
clevercong 已提交
888

C
clevercong 已提交
889
### send
C
clevercong 已提交
890

Y
Yangys 已提交
891
send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void
C
clevercong 已提交
892 893 894

通过TCPSocket连接发送数据。使用callback方式作为异步方法。

Y
Yangys 已提交
895 896
> **说明:**
> connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
897 898

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
899

C
clevercong 已提交
900
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
901

C
clevercong 已提交
902 903 904 905
**参数:**

| 参数名   | 类型                                    | 必填 | 说明                                                         |
| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
906
| options  | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
C
clevercong 已提交
907 908
| callback | AsyncCallback\<void\>                   | 是   | 回调函数。                                                   |

Y
Yangys 已提交
909 910 911 912 913 914 915
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
916 917
**示例:**

Z
zengyawen 已提交
918
```js
C
clevercong 已提交
919
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
920
tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
Y
Yangys 已提交
921 922 923 924 925 926 927 928 929 930 931
  console.log('connect success');
  tcp.send({
    data: 'Hello, server!'
    //此处省略encoding, 默认为utf-8编码格式
  }, err => {
    if (err) {
      console.log('send fail');
      return;
    }
    console.log('send success');
  })
Y
Yangys 已提交
932
})
C
clevercong 已提交
933
```
C
clevercong 已提交
934

C
clevercong 已提交
935
### send
C
clevercong 已提交
936

Y
Yangys 已提交
937
send(options: TCPSendOptions): Promise\<void\>
C
clevercong 已提交
938 939 940

通过TCPSocket连接发送数据。使用Promise方式作为异步方法。

Y
Yangys 已提交
941 942
> **说明:**
> connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
943 944

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
945

C
clevercong 已提交
946
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
947

C
clevercong 已提交
948 949 950 951
**参数:**

| 参数名  | 类型                                    | 必填 | 说明                                                         |
| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
952
| options | [TCPSendOptions](#tcpsendoptions) | 是   | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 |
C
clevercong 已提交
953 954 955 956 957 958 959

**返回值:**

| 类型            | 说明                                               |
| :-------------- | :------------------------------------------------- |
| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 |

Y
Yangys 已提交
960 961 962 963 964 965 966
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
967 968
**示例:**

Z
zengyawen 已提交
969
```js
C
clevercong 已提交
970
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
971
let promise1 = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
C
clevercong 已提交
972
promise1.then(() => {
Y
Yangys 已提交
973 974 975 976 977 978 979 980 981
  console.log('connect success');
  let promise2 = tcp.send({
    data: 'Hello, server!'
  });
  promise2.then(() => {
    console.log('send success');
  }).catch(err => {
    console.log('send fail');
  });
C
clevercong 已提交
982
}).catch(err => {
Y
Yangys 已提交
983
  console.log('connect fail');
C
clevercong 已提交
984 985
});
```
C
clevercong 已提交
986

C
clevercong 已提交
987
### close
C
clevercong 已提交
988

Y
Yangys 已提交
989
close(callback: AsyncCallback\<void\>): void
C
clevercong 已提交
990 991 992

关闭TCPSocket连接。使用callback方式作为异步方法。

C
clevercong 已提交
993 994
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
995
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
996

C
clevercong 已提交
997
**参数:**
C
clevercong 已提交
998

C
clevercong 已提交
999 1000 1001
| 参数名   | 类型                  | 必填 | 说明       |
| -------- | --------------------- | ---- | ---------- |
| callback | AsyncCallback\<void\> | 是   | 回调函数。 |
C
clevercong 已提交
1002

Y
Yangys 已提交
1003 1004 1005 1006 1007
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 201     | Permission denied.      |
C
clevercong 已提交
1008

C
clevercong 已提交
1009
**示例:**
C
clevercong 已提交
1010

Z
zengyawen 已提交
1011
```js
C
clevercong 已提交
1012 1013
let tcp = socket.constructTCPSocketInstance();
tcp.close(err => {
Y
Yangys 已提交
1014 1015 1016 1017 1018
  if (err) {
    console.log('close fail');
    return;
  }
  console.log('close success');
C
clevercong 已提交
1019 1020
})
```
C
clevercong 已提交
1021

C
clevercong 已提交
1022
### close
C
clevercong 已提交
1023

Y
Yangys 已提交
1024
close(): Promise\<void\>
C
clevercong 已提交
1025 1026 1027

关闭TCPSocket连接。使用Promise方式作为异步方法。

C
clevercong 已提交
1028 1029
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
1030
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1031

C
clevercong 已提交
1032
**返回值:**
C
clevercong 已提交
1033

C
clevercong 已提交
1034 1035 1036
| 类型            | 说明                                       |
| :-------------- | :----------------------------------------- |
| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 |
C
clevercong 已提交
1037

Y
Yangys 已提交
1038 1039 1040 1041 1042 1043
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 201     | Permission denied.      |

C
clevercong 已提交
1044
**示例:**
C
clevercong 已提交
1045

Z
zengyawen 已提交
1046
```js
C
clevercong 已提交
1047 1048 1049
let tcp = socket.constructTCPSocketInstance();
let promise = tcp.close();
promise.then(() => {
Y
Yangys 已提交
1050
  console.log('close success');
C
clevercong 已提交
1051
}).catch(err => {
Y
Yangys 已提交
1052
  console.log('close fail');
C
clevercong 已提交
1053 1054
});
```
C
clevercong 已提交
1055

C
clevercong 已提交
1056
### getRemoteAddress
C
clevercong 已提交
1057

Y
Yangys 已提交
1058
getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
C
clevercong 已提交
1059 1060 1061

获取对端Socket地址。使用callback方式作为异步方法。

Y
Yangys 已提交
1062 1063
> **说明:**
> connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
1064 1065

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
1066

C
clevercong 已提交
1067
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1068

C
clevercong 已提交
1069
**参数:**
C
clevercong 已提交
1070

C
clevercong 已提交
1071 1072
| 参数名   | 类型                                              | 必填 | 说明       |
| -------- | ------------------------------------------------- | ---- | ---------- |
C
clevercong 已提交
1073
| callback | AsyncCallback<[NetAddress](#netaddress)> | 是   | 回调函数。 |
C
clevercong 已提交
1074

Y
Yangys 已提交
1075 1076 1077 1078 1079 1080
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 201     | Permission denied.      |

C
clevercong 已提交
1081
**示例:**
C
clevercong 已提交
1082

Z
zengyawen 已提交
1083
```js
C
clevercong 已提交
1084
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1085
tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
Y
Yangys 已提交
1086 1087 1088 1089 1090 1091 1092 1093
  console.log('connect success');
  tcp.getRemoteAddress((err, data) => {
    if (err) {
      console.log('getRemoteAddressfail');
      return;
    }
    console.log('getRemoteAddresssuccess:' + JSON.stringify(data));
  })
C
clevercong 已提交
1094 1095
});
```
C
clevercong 已提交
1096

C
clevercong 已提交
1097
### getRemoteAddress
C
clevercong 已提交
1098

Y
Yangys 已提交
1099
getRemoteAddress(): Promise\<NetAddress\>
C
clevercong 已提交
1100 1101 1102

获取对端Socket地址。使用Promise方式作为异步方法。

Y
Yangys 已提交
1103 1104
> **说明:**
> connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
1105 1106

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
1107

C
clevercong 已提交
1108
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1109

C
clevercong 已提交
1110
**返回值:**
C
clevercong 已提交
1111

C
clevercong 已提交
1112 1113
| 类型                                        | 说明                                        |
| :------------------------------------------ | :------------------------------------------ |
C
clevercong 已提交
1114
| Promise<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。 |
C
clevercong 已提交
1115

Y
Yangys 已提交
1116 1117 1118 1119 1120 1121
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 201     | Permission denied.      |

C
clevercong 已提交
1122
**示例:**
C
clevercong 已提交
1123

Z
zengyawen 已提交
1124
```js
C
clevercong 已提交
1125
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1126
let promise1 = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
C
clevercong 已提交
1127
promise1.then(() => {
Y
Yangys 已提交
1128 1129 1130 1131 1132 1133 1134
  console.log('connect success');
  let promise2 = tcp.getRemoteAddress();
  promise2.then(() => {
    console.log('getRemoteAddress success');
  }).catch(err => {
    console.log('getRemoteAddressfail');
  });
C
clevercong 已提交
1135
}).catch(err => {
Y
Yangys 已提交
1136
  console.log('connect fail');
C
clevercong 已提交
1137 1138
});
```
C
clevercong 已提交
1139

C
clevercong 已提交
1140
### getState
C
clevercong 已提交
1141

Y
Yangys 已提交
1142
getState(callback: AsyncCallback\<SocketStateBase\>): void
C
clevercong 已提交
1143 1144 1145

获取TCPSocket状态。使用callback方式作为异步方法。

Y
Yangys 已提交
1146 1147
> **说明:**
> bind或connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
1148 1149

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
1150

C
clevercong 已提交
1151
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1152

C
clevercong 已提交
1153
**参数:**
C
clevercong 已提交
1154

C
clevercong 已提交
1155 1156
| 参数名   | 类型                                                   | 必填 | 说明       |
| -------- | ------------------------------------------------------ | ---- | ---------- |
C
clevercong 已提交
1157
| callback | AsyncCallback<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。 |
C
clevercong 已提交
1158

Y
Yangys 已提交
1159 1160 1161 1162 1163
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 201     | Permission denied.      |
C
clevercong 已提交
1164

C
clevercong 已提交
1165
**示例:**
C
clevercong 已提交
1166

Z
zengyawen 已提交
1167
```js
C
clevercong 已提交
1168
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1169
let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
Y
Yangys 已提交
1170 1171 1172 1173 1174 1175 1176 1177
  console.log('connect success');
  tcp.getState((err, data) => {
    if (err) {
      console.log('getState fail');
      return;
    }
    console.log('getState success:' + JSON.stringify(data));
  });
C
clevercong 已提交
1178 1179
});
```
C
clevercong 已提交
1180

C
clevercong 已提交
1181
### getState
C
clevercong 已提交
1182

Y
Yangys 已提交
1183
getState(): Promise\<SocketStateBase\>
C
clevercong 已提交
1184 1185 1186

获取TCPSocket状态。使用Promise方式作为异步方法。

Y
Yangys 已提交
1187 1188
> **说明:**
> bind或connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
1189 1190

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
1191

C
clevercong 已提交
1192
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1193

C
clevercong 已提交
1194
**返回值:**
C
clevercong 已提交
1195

C
clevercong 已提交
1196 1197
| 类型                                             | 说明                                       |
| :----------------------------------------------- | :----------------------------------------- |
C
clevercong 已提交
1198
| Promise<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TCPSocket状态的结果。 |
C
clevercong 已提交
1199

Y
Yangys 已提交
1200 1201 1202 1203 1204
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 201     | Permission denied.      |
C
clevercong 已提交
1205

C
clevercong 已提交
1206
**示例:**
C
clevercong 已提交
1207

Z
zengyawen 已提交
1208
```js
C
clevercong 已提交
1209
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1210
let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
C
clevercong 已提交
1211
promise.then(() => {
Y
Yangys 已提交
1212 1213 1214 1215 1216 1217 1218
  console.log('connect success');
  let promise1 = tcp.getState();
  promise1.then(() => {
    console.log('getState success');
  }).catch(err => {
    console.log('getState fail');
  });
C
clevercong 已提交
1219
}).catch(err => {
Y
Yangys 已提交
1220
  console.log('connect fail');
C
clevercong 已提交
1221 1222
});
```
C
clevercong 已提交
1223

C
clevercong 已提交
1224
### setExtraOptions
C
clevercong 已提交
1225

Y
Yangys 已提交
1226
setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
C
clevercong 已提交
1227 1228 1229

设置TCPSocket连接的其他属性。使用callback方式作为异步方法。

Y
Yangys 已提交
1230 1231
> **说明:**
> bind或connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
1232 1233

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
1234

C
clevercong 已提交
1235
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1236

C
clevercong 已提交
1237 1238 1239 1240
**参数:**

| 参数名   | 类型                                      | 必填 | 说明                                                         |
| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
1241
| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
C
clevercong 已提交
1242 1243
| callback | AsyncCallback\<void\>                     | 是   | 回调函数。                                                   |

Y
Yangys 已提交
1244 1245 1246 1247 1248 1249 1250
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |

C
clevercong 已提交
1251 1252
**示例:**

Z
zengyawen 已提交
1253
```js
C
clevercong 已提交
1254
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1255
let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000}, () => {
Y
Yangys 已提交
1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272
  console.log('connect success');
  tcp.setExtraOptions({
    keepAlive: true,
    OOBInline: true,
    TCPNoDelay: true,
    socketLinger: {on: true, linger: 10},
    receiveBufferSize: 1000,
    sendBufferSize: 1000,
    reuseAddress: true,
    socketTimeout: 3000,
  }, err => {
    if (err) {
      console.log('setExtraOptions fail');
      return;
    }
    console.log('setExtraOptions success');
  });
C
clevercong 已提交
1273 1274
});
```
C
clevercong 已提交
1275

C
clevercong 已提交
1276
### setExtraOptions
C
clevercong 已提交
1277

Y
Yangys 已提交
1278
setExtraOptions(options: TCPExtraOptions): Promise\<void\>
C
clevercong 已提交
1279 1280 1281

设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。

Y
Yangys 已提交
1282 1283
> **说明:**
> bind或connect方法调用成功后,才可调用此方法。
C
clevercong 已提交
1284 1285

**需要权限**:ohos.permission.INTERNET
C
clevercong 已提交
1286

C
clevercong 已提交
1287
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1288

C
clevercong 已提交
1289 1290 1291 1292
**参数:**

| 参数名  | 类型                                      | 必填 | 说明                                                         |
| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
C
clevercong 已提交
1293
| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
C
clevercong 已提交
1294 1295 1296 1297 1298 1299 1300

**返回值:**

| 类型            | 说明                                                 |
| :-------------- | :--------------------------------------------------- |
| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 |

Y
Yangys 已提交
1301 1302 1303 1304 1305 1306
**错误码:**

| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
C
clevercong 已提交
1307 1308 1309

**示例:**

Z
zengyawen 已提交
1310
```js
C
clevercong 已提交
1311
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1312
let promise = tcp.connect({address: {address: '192.168.xx.xxx', port: xxxx, family: 1}, timeout: 6000});
C
clevercong 已提交
1313
promise.then(() => {
Y
Yangys 已提交
1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329
  console.log('connect success');
  let promise1 = tcp.setExtraOptions({
    keepAlive: true,
    OOBInline: true,
    TCPNoDelay: true,
    socketLinger: {on: true, linger: 10},
    receiveBufferSize: 1000,
    sendBufferSize: 1000,
    reuseAddress: true,
    socketTimeout: 3000,
  });
  promise1.then(() => {
    console.log('setExtraOptions success');
  }).catch(err => {
    console.log('setExtraOptions fail');
  });
C
clevercong 已提交
1330
}).catch(err => {
Y
Yangys 已提交
1331
  console.log('connect fail');
C
clevercong 已提交
1332 1333
});
```
C
clevercong 已提交
1334

Y
Yangys 已提交
1335
### on('message')
C
clevercong 已提交
1336

Y
Yangys 已提交
1337
on(type: 'message', callback: Callback<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
C
clevercong 已提交
1338 1339 1340

订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。

C
clevercong 已提交
1341
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1342

C
clevercong 已提交
1343
**参数:**
C
clevercong 已提交
1344

C
clevercong 已提交
1345 1346 1347
| 参数名   | 类型                                                         | 必填 | 说明                                      |
| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
C
clevercong 已提交
1348
| callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | 是   | 回调函数。                                |
C
clevercong 已提交
1349

C
clevercong 已提交
1350
**示例:**
C
clevercong 已提交
1351

Z
zengyawen 已提交
1352
```js
C
clevercong 已提交
1353 1354
let tcp = socket.constructTCPSocketInstance();
tcp.on('message', value => {
Y
Yangys 已提交
1355
  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo)
C
clevercong 已提交
1356 1357
});
```
C
clevercong 已提交
1358

Y
Yangys 已提交
1359
### off('message')
C
clevercong 已提交
1360

Y
Yangys 已提交
1361
off(type: 'message', callback?: Callback<{message: ArrayBuffer, remoteInfo: SocketRemoteInfo}\>): void
C
clevercong 已提交
1362 1363 1364

取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。

Y
Yangys 已提交
1365 1366
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
1367

C
clevercong 已提交
1368
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1369

C
clevercong 已提交
1370
**参数:**
C
clevercong 已提交
1371

C
clevercong 已提交
1372 1373 1374
| 参数名   | 类型                                                         | 必填 | 说明                                      |
| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- |
| type     | string                                                       | 是   | 订阅的事件类型。'message':接收消息事件。 |
C
clevercong 已提交
1375
| callback | Callback<{message: ArrayBuffer, remoteInfo: [SocketRemoteInfo](#socketremoteinfo)}> | 否   | 回调函数。                                |
C
clevercong 已提交
1376

C
clevercong 已提交
1377
**示例:**
C
clevercong 已提交
1378

Z
zengyawen 已提交
1379
```js
C
clevercong 已提交
1380
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1381
let callback = value => {
Y
Yangys 已提交
1382
  console.log("on message, message:" + value.message + ", remoteInfo:" + value.remoteInfo);
C
clevercong 已提交
1383 1384 1385 1386 1387 1388
}
tcp.on('message', callback);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
tcp.off('message', callback);
tcp.off('message');
```
C
clevercong 已提交
1389

Y
Yangys 已提交
1390
### on('connect' | 'close')
C
clevercong 已提交
1391

Y
Yangys 已提交
1392
on(type: 'connect' | 'close', callback: Callback\<void\>): void
C
clevercong 已提交
1393 1394 1395

订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。

C
clevercong 已提交
1396
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1397

C
clevercong 已提交
1398
**参数:**
C
clevercong 已提交
1399

C
clevercong 已提交
1400 1401 1402 1403
| 参数名   | 类型             | 必填 | 说明                                                         |
| -------- | ---------------- | ---- | ------------------------------------------------------------ |
| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
| callback | Callback\<void\> | 是   | 回调函数。                                                   |
C
clevercong 已提交
1404

C
clevercong 已提交
1405
**示例:**
C
clevercong 已提交
1406

Z
zengyawen 已提交
1407
```js
C
clevercong 已提交
1408 1409
let tcp = socket.constructTCPSocketInstance();
tcp.on('connect', () => {
Y
Yangys 已提交
1410
  console.log("on connect success")
C
clevercong 已提交
1411 1412
});
tcp.on('close', data => {
Y
Yangys 已提交
1413
  console.log("on close success")
C
clevercong 已提交
1414 1415
});
```
C
clevercong 已提交
1416

Y
Yangys 已提交
1417
### off('connect' | 'close')
C
clevercong 已提交
1418

Y
Yangys 已提交
1419
off(type: 'connect' | 'close', callback?: Callback\<void\>): void
C
clevercong 已提交
1420 1421 1422

取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。

Y
Yangys 已提交
1423 1424
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
1425

C
clevercong 已提交
1426
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1427

C
clevercong 已提交
1428 1429 1430 1431 1432 1433 1434 1435 1436
**参数:**

| 参数名   | 类型             | 必填 | 说明                                                         |
| -------- | ---------------- | ---- | ------------------------------------------------------------ |
| type     | string           | 是   | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 |
| callback | Callback\<void\> | 否   | 回调函数。                                                   |

**示例:**

Z
zengyawen 已提交
1437
```js
C
clevercong 已提交
1438
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1439
let callback1 = () => {
Y
Yangys 已提交
1440
  console.log("on connect success");
C
clevercong 已提交
1441 1442 1443 1444 1445
}
tcp.on('connect', callback1);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
tcp.off('connect', callback1);
tcp.off('connect');
Y
Yangys 已提交
1446
let callback2 = () => {
Y
Yangys 已提交
1447
  console.log("on close success");
C
clevercong 已提交
1448 1449 1450 1451 1452 1453
}
tcp.on('close', callback2);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
tcp.off('close', callback2);
tcp.off('close');
```
C
clevercong 已提交
1454

Y
Yangys 已提交
1455
### on('error')
C
clevercong 已提交
1456

Y
Yangys 已提交
1457
on(type: 'error', callback: ErrorCallback): void
C
clevercong 已提交
1458 1459 1460

订阅TCPSocket连接的error事件。使用callback方式作为异步方法。

C
clevercong 已提交
1461
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1462

C
clevercong 已提交
1463
**参数:**
C
clevercong 已提交
1464

C
clevercong 已提交
1465 1466 1467 1468
| 参数名   | 类型          | 必填 | 说明                                 |
| -------- | ------------- | ---- | ------------------------------------ |
| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
| callback | ErrorCallback | 是   | 回调函数。                           |
C
clevercong 已提交
1469

C
clevercong 已提交
1470
**示例:**
C
clevercong 已提交
1471

Z
zengyawen 已提交
1472
```js
C
clevercong 已提交
1473 1474
let tcp = socket.constructTCPSocketInstance();
tcp.on('error', err => {
Y
Yangys 已提交
1475
  console.log("on error, err:" + JSON.stringify(err))
C
clevercong 已提交
1476 1477
});
```
C
clevercong 已提交
1478

Y
Yangys 已提交
1479
### off('error')
C
clevercong 已提交
1480

Y
Yangys 已提交
1481
off(type: 'error', callback?: ErrorCallback): void
C
clevercong 已提交
1482 1483 1484

取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。

Y
Yangys 已提交
1485 1486
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
1487

C
clevercong 已提交
1488
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1489

C
clevercong 已提交
1490 1491 1492 1493 1494 1495 1496 1497 1498
**参数:**

| 参数名   | 类型          | 必填 | 说明                                 |
| -------- | ------------- | ---- | ------------------------------------ |
| type     | string        | 是   | 订阅的事件类型。'error':error事件。 |
| callback | ErrorCallback | 否   | 回调函数。                           |

**示例:**

Z
zengyawen 已提交
1499
```js
C
clevercong 已提交
1500
let tcp = socket.constructTCPSocketInstance();
Y
Yangys 已提交
1501
let callback = err => {
Y
Yangys 已提交
1502
  console.log("on error, err:" + JSON.stringify(err));
C
clevercong 已提交
1503 1504 1505 1506 1507 1508
}
tcp.on('error', callback);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
tcp.off('error', callback);
tcp.off('error');
```
C
clevercong 已提交
1509

C
clevercong 已提交
1510
## TCPConnectOptions
C
clevercong 已提交
1511 1512 1513

TCPSocket连接的参数。

Z
zengyawen 已提交
1514
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1515

L
liyufan 已提交
1516
| 名称  | 类型                               | 必填 | 说明                       |
C
clevercong 已提交
1517
| ------- | ---------------------------------- | ---- | -------------------------- |
C
clevercong 已提交
1518
| address | [NetAddress](#netaddress) | 是   | 绑定的地址以及端口。       |
C
clevercong 已提交
1519 1520
| timeout | number                             | 否   | 超时时间,单位毫秒(ms)。 |

C
clevercong 已提交
1521
## TCPSendOptions
C
clevercong 已提交
1522 1523 1524

TCPSocket发送请求的参数。

Z
zengyawen 已提交
1525
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1526

L
liyufan 已提交
1527
| 名称   | 类型   | 必填 | 说明                                                         |
C
clevercong 已提交
1528
| -------- | ------ | ---- | ------------------------------------------------------------ |
Z
zhuwenchao 已提交
1529
| data     | string\| ArrayBuffer<sup>7+</sup>  | 是   | 发送的数据。                                                 |
C
clevercong 已提交
1530 1531
| encoding | string | 否   | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 |

C
clevercong 已提交
1532
## TCPExtraOptions
C
clevercong 已提交
1533 1534 1535

TCPSocket连接的其他属性。

Z
zengyawen 已提交
1536
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
1537

L
liyufan 已提交
1538
| 名称            | 类型    | 必填 | 说明                                                         |
C
clevercong 已提交
1539 1540 1541 1542 1543 1544 1545 1546 1547
| ----------------- | ------- | ---- | ------------------------------------------------------------ |
| keepAlive         | boolean | 否   | 是否保持连接。默认为false。                                  |
| OOBInline         | boolean | 否   | 是否为OOB内联。默认为false。                                 |
| TCPNoDelay        | boolean | 否   | TCPSocket连接是否无时延。默认为false。                       |
| socketLinger      | Object  | 是   | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 |
| receiveBufferSize | number  | 否   | 接收缓冲区大小(单位:Byte)。                               |
| sendBufferSize    | number  | 否   | 发送缓冲区大小(单位:Byte)。                               |
| reuseAddress      | boolean | 否   | 是否重用地址。默认为false。                                  |
| socketTimeout     | number  | 否   | 套接字超时时间,单位毫秒(ms)。                             |
L
liyufan 已提交
1548

Y
Yangys 已提交
1549
## TCP 错误码说明
Y
Yangys 已提交
1550

Y
Yangys 已提交
1551
TCP 其余错误码映射形式为:2301000 + Linux内核错误码。
Y
Yangys 已提交
1552

Y
Yangys 已提交
1553
错误码的详细介绍参见[Socket错误码](../errorcodes/errorcode-net-socket.md)
Y
Yangys 已提交
1554

L
liyufan 已提交
1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580
## socket.constructTLSSocketInstance<sup>9+</sup>

constructTLSSocketInstance(): TLSSocket

创建并返回一个TLSSocket对象。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型                               | 说明                    |
| :--------------------------------- | :---------------------- |
| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 |

**示例:**

```js
let tls = socket.constructTLSSocketInstance();
```

## TLSSocket<sup>9+</sup>

TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。

### bind<sup>9+</sup>

Y
Yangys 已提交
1581
bind(address: NetAddress, callback: AsyncCallback\<void\>): void
L
liyufan 已提交
1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598

绑定IP地址和端口。使用callback方法作为异步方法。

**需要权限**:ohos.permission.INTERNET

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                               | 必填 | 说明                                                   |
| -------- | ---------------------------------- | ---- | ------------------------------------------------------ |
| address  | [NetAddress](#netaddress) | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
| callback | AsyncCallback\<void\>              | 是   | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。 失败返回错误码,错误信息。|

**错误码:**

| 错误码ID | 错误信息                 |
L
liyufan 已提交
1599
| ------- | ----------------------- |
L
liyufan 已提交
1600 1601 1602 1603 1604 1605 1606 1607 1608
| 401     | Parameter error.        |
| 201     | Permission denied.      |
| 2303198 | Address already in use. |
| 2300002 | System internal error.  |

**示例:**

```js
tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
1609 1610 1611 1612 1613
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
1614 1615 1616 1617 1618
});
```

### bind<sup>9+</sup>

Y
Yangys 已提交
1619
bind(address: NetAddress): Promise\<void\>
L
liyufan 已提交
1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630

绑定IP地址和端口。使用Promise方法作为异步方法。

**需要权限**:ohos.permission.INTERNET

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名  | 类型                               | 必填 | 说明                                                   |
| ------- | ---------------------------------- | ---- | ------------------------------------------------------ |
L
liyufan 已提交
1631
| address | [NetAddress](#netaddress)          | 是   | 目标地址信息,参考[NetAddress](#netaddress)。 |
L
liyufan 已提交
1632 1633 1634 1635 1636 1637 1638 1639 1640 1641

**返回值:**

| 类型            | 说明                                                     |
| :-------------- | :------------------------------------------------------- |
| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 |

**错误码:**

| 错误码ID | 错误信息                 |
L
liyufan 已提交
1642
| ------- | ----------------------- |
L
liyufan 已提交
1643 1644 1645 1646 1647 1648 1649 1650 1651 1652
| 401     | Parameter error.        |
| 201     | Permission denied.      |
| 2303198 | Address already in use. |
| 2300002 | System internal error.  |

**示例:**

```js
let promise = tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
promise.then(() => {
Y
Yangys 已提交
1653
  console.log('bind success');
L
liyufan 已提交
1654
}).catch(err => {
Y
Yangys 已提交
1655
  console.log('bind fail');
L
liyufan 已提交
1656 1657 1658 1659 1660
});
```

### getState<sup>9+</sup>

Y
Yangys 已提交
1661
getState(callback: AsyncCallback\<SocketStateBase\>): void
L
liyufan 已提交
1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675

在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                                   | 必填 | 说明       |
| -------- | ------------------------------------------------------ | ---- | ---------- |
| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)> | 是   | 回调函数。成功返回TLSSocket状态,失败返回错误码,错误信息。 |

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
1676
| ------- | ------------------------------ |
L
liyufan 已提交
1677 1678 1679 1680 1681 1682 1683
| 2303188 | Socket operation on non-socket.|
| 2300002 | System internal error.         |

**示例:**

```js
let promise = tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
1684 1685 1686 1687 1688
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
1689 1690
});
tls.getState((err, data) => {
Y
Yangys 已提交
1691 1692 1693 1694 1695
  if (err) {
    console.log('getState fail');
    return;
  }
  console.log('getState success:' + JSON.stringify(data));
L
liyufan 已提交
1696 1697 1698 1699 1700
});
```

### getState<sup>9+</sup>

Y
Yangys 已提交
1701
getState(): Promise\<SocketStateBase\>
L
liyufan 已提交
1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715

在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型                                             | 说明                                       |
| :----------------------------------------------- | :----------------------------------------- |
| Promise\<[SocketStateBase](#socketstatebase)> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。|

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
1716
| ------- | ------------------------------ |
L
liyufan 已提交
1717 1718 1719 1720 1721 1722
| 2303188 | Socket operation on non-socket.|
| 2300002 | System internal error.         |

**示例:**

```js
Y
Yangys 已提交
1723 1724
let promiseBind = tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1});
promiseBind.then(() => {
Y
Yangys 已提交
1725
  console.log('bind success');
Y
Yangys 已提交
1726
}).catch((err) => {
Y
Yangys 已提交
1727
  console.log('bind fail');
L
liyufan 已提交
1728 1729 1730
});
let promise = tls.getState();
promise.then(() => {
Y
Yangys 已提交
1731
  console.log('getState success');
L
liyufan 已提交
1732
}).catch(err => {
Y
Yangys 已提交
1733
  console.log('getState fail');
L
liyufan 已提交
1734 1735 1736 1737 1738
});
```

### setExtraOptions<sup>9+</sup>

Y
Yangys 已提交
1739
setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void
L
liyufan 已提交
1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754

在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                      | 必填 | 说明                                                         |
| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
| options  | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |
| callback | AsyncCallback\<void\>                     | 是   | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码,错误信息。|

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
1755
| ------- | -----------------------------  |
L
liyufan 已提交
1756 1757 1758 1759 1760 1761 1762 1763
| 401     | Parameter error.               |
| 2303188 | Socket operation on non-socket.|
| 2300002 | System internal error.         |

**示例:**

```js
tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
1764 1765 1766 1767 1768
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
1769 1770 1771
});

tls.setExtraOptions({
Y
Yangys 已提交
1772 1773 1774 1775 1776 1777 1778 1779
  keepAlive: true,
  OOBInline: true,
  TCPNoDelay: true,
  socketLinger: {on: true, linger: 10},
  receiveBufferSize: 1000,
  sendBufferSize: 1000,
  reuseAddress: true,
  socketTimeout: 3000,
Y
Yangys 已提交
1780
}, err => {
Y
Yangys 已提交
1781 1782 1783 1784 1785
  if (err) {
    console.log('setExtraOptions fail');
    return;
  }
  console.log('setExtraOptions success');
L
liyufan 已提交
1786
});
Y
Yangys 已提交
1787

L
liyufan 已提交
1788 1789 1790 1791
```

### setExtraOptions<sup>9+</sup>

Y
Yangys 已提交
1792
setExtraOptions(options: TCPExtraOptions): Promise\<void\>
L
liyufan 已提交
1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812

在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名  | 类型                                      | 必填 | 说明                                                         |
| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ |
| options | [TCPExtraOptions](#tcpextraoptions) | 是   | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 |

**返回值:**

| 类型            | 说明                                                 |
| :-------------- | :--------------------------------------------------- |
| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 |

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
1813
| ------- | ------------------------------ |
L
liyufan 已提交
1814 1815 1816 1817 1818 1819 1820 1821
| 401     | Parameter error.               |
| 2303188 | Socket operation on non-socket.|
| 2300002 | System internal error.         |

**示例:**

```js
tls.bind({address: '192.168.xx.xxx', port: xxxx, family: 1}, err => {
Y
Yangys 已提交
1822 1823 1824 1825 1826
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
1827 1828
});
let promise = tls.setExtraOptions({
Y
Yangys 已提交
1829 1830 1831 1832 1833 1834 1835 1836
  keepAlive: true,
  OOBInline: true,
  TCPNoDelay: true,
  socketLinger: {on: true, linger: 10},
  receiveBufferSize: 1000,
  sendBufferSize: 1000,
  reuseAddress: true,
  socketTimeout: 3000,
L
liyufan 已提交
1837 1838
});
promise.then(() => {
Y
Yangys 已提交
1839
  console.log('setExtraOptions success');
L
liyufan 已提交
1840
}).catch(err => {
Y
Yangys 已提交
1841
  console.log('setExtraOptions fail');
L
liyufan 已提交
1842 1843 1844 1845 1846
});
```

### connect<sup>9+</sup>

Y
Yangys 已提交
1847
connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void
L
liyufan 已提交
1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862

在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                   | 必填 | 说明 |
| -------- | ---------------------------------------| ----| --------------- |
| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | TLSSocket连接所需要的参数。|
| callback | AsyncCallback\<void>                  | 是   | 回调函数,成功无返回,失败返回错误码,错误信息。|

**错误码:**

| 错误码ID | 错误信息                                      |
L
liyufan 已提交
1863
| ------- | -------------------------------------------- |
L
liyufan 已提交
1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882
| 401     | Parameter error.                             |
| 2303104 | Interrupted system call.                     |
| 2303109 | Bad file number.                             |
| 2303111 | Resource temporarily unavailable try again.  |
| 2303188 | Socket operation on non-socket.              |
| 2303191 | Protocol wrong type for socket.              |
| 2303198 | Address already in use.                      |
| 2303199 | Cannot assign requested address.             |
| 2303210 | Connection timed out.                        |
| 2303501 | SSL is null.                                 |
| 2303502 | Error in tls reading.                        |
| 2303503 | Error in tls writing                         |
| 2303505 | Error occurred in the tls system call.       |
| 2303506 | Error clearing tls connection.               |
| 2300002 | System internal error.                       |

**示例:**

```js
Y
YOUR_NAME 已提交
1883
let tlsTwoWay = socket.constructTLSSocketInstance(); // Two way authentication
Z
zhanghaifeng 已提交
1884
tlsTwoWay.bind({address: '192.168.xxx.xxx', port: 8080, family: 1}, err => {
Y
Yangys 已提交
1885 1886 1887 1888 1889
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
1890 1891
});
let options = {
Y
Yangys 已提交
1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907
  ALPNProtocols: ["spdy/1", "http/1.1"],
  address: {
    address: "192.168.xx.xxx",
    port: 8080,
    family: 1,
  },
  secureOptions: {
    key: "xxxx",
    cert: "xxxx",
    ca: ["xxxx"],
    password: "xxxx",
    protocols: [socket.Protocol.TLSv12],
    useRemoteCipherPrefer: true,
    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
    cipherSuite: "AES256-SHA256",
  },
L
liyufan 已提交
1908
};
Y
YOUR_NAME 已提交
1909
tlsTwoWay.connect(options, (err, data) => {
Y
Yangys 已提交
1910 1911
  console.error("connect callback error" + err);
  console.log(JSON.stringify(data));
L
liyufan 已提交
1912 1913 1914
});

let tlsOneWay = socket.constructTLSSocketInstance(); // One way authentication
Y
Yangys 已提交
1915
tlsOneWay.bind({address: '192.168.xxx.xxx', port: 8080, family: 1}, err => {
Y
Yangys 已提交
1916 1917 1918 1919 1920
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
1921 1922
});
let oneWayOptions = {
Y
Yangys 已提交
1923 1924 1925 1926 1927 1928 1929 1930 1931
  address: {
    address: "192.168.xxx.xxx",
    port: 8080,
    family: 1,
  },
  secureOptions: {
    ca: ["xxxx", "xxxx"],
    cipherSuite: "AES256-SHA256",
  },
L
liyufan 已提交
1932
};
Y
YOUR_NAME 已提交
1933
tlsOneWay.connect(oneWayOptions, (err, data) => {
Y
Yangys 已提交
1934 1935
  console.error("connect callback error" + err);
  console.log(JSON.stringify(data));
L
liyufan 已提交
1936 1937 1938 1939 1940
});
```

### connect<sup>9+</sup>

Y
Yangys 已提交
1941
connect(options: TLSConnectOptions): Promise\<void\>
L
liyufan 已提交
1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956

在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                   | 必填 | 说明 |
| -------- | --------------------------------------| ----| --------------- |
| options  | [TLSConnectOptions](#tlsconnectoptions9) | 是   | 连接所需要的参数。|

**返回值:**

| 类型                                        | 说明                          |
| ------------------------------------------- | ----------------------------- |
Y
Yangys 已提交
1957
| Promise\<void\>                              | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。|
L
liyufan 已提交
1958 1959 1960 1961

**错误码:**

| 错误码ID | 错误信息                                      |
L
liyufan 已提交
1962
| ------- | -------------------------------------------- |
L
liyufan 已提交
1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981
| 401     | Parameter error.                             |
| 2303104 | Interrupted system call.                     |
| 2303109 | Bad file number.                             |
| 2303111 | Resource temporarily unavailable try again.  |
| 2303188 | Socket operation on non-socket.              |
| 2303191 | Protocol wrong type for socket.              |
| 2303198 | Address already in use.                      |
| 2303199 | Cannot assign requested address.             |
| 2303210 | Connection timed out.                        |
| 2303501 | SSL is null.                                 |
| 2303502 | Error in tls reading.                        |
| 2303503 | Error in tls writing                         |
| 2303505 | Error occurred in the tls system call.       |
| 2303506 | Error clearing tls connection.               |
| 2300002 | System internal error.                       |

**示例:**

```js
Y
YOUR_NAME 已提交
1982
let tlsTwoWay = socket.constructTLSSocketInstance(); // Two way authentication
Z
zhanghaifeng 已提交
1983
tlsTwoWay.bind({address: '192.168.xxx.xxx', port: 8080, family: 1}, err => {
Y
Yangys 已提交
1984 1985 1986 1987 1988
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
1989 1990
});
let options = {
Y
Yangys 已提交
1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006
  ALPNProtocols: ["spdy/1", "http/1.1"],
  address: {
    address: "xxxx",
    port: 8080,
    family: 1,
  },
  secureOptions: {
    key: "xxxx",
    cert: "xxxx",
    ca: ["xxxx"],
    password: "xxxx",
    protocols: [socket.Protocol.TLSv12],
    useRemoteCipherPrefer: true,
    signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256",
    cipherSuite: "AES256-SHA256",
  },
L
liyufan 已提交
2007
};
Y
YOUR_NAME 已提交
2008
tlsTwoWay.connect(options).then(data => {
Y
Yangys 已提交
2009
  console.log(JSON.stringify(data));
L
liyufan 已提交
2010
}).catch(err => {
Y
Yangys 已提交
2011
  console.error(err);
L
liyufan 已提交
2012 2013 2014
});

let tlsOneWay = socket.constructTLSSocketInstance(); // One way authentication
Z
zhanghaifeng 已提交
2015
tlsOneWay.bind({address: '192.168.xxx.xxx', port: 8080, family: 1}, err => {
Y
Yangys 已提交
2016 2017 2018 2019 2020
  if (err) {
    console.log('bind fail');
    return;
  }
  console.log('bind success');
L
liyufan 已提交
2021 2022
});
let oneWayOptions = {
Y
Yangys 已提交
2023 2024 2025 2026 2027 2028 2029 2030 2031
  address: {
    address: "192.168.xxx.xxx",
    port: 8080,
    family: 1,
  },
  secureOptions: {
    ca: ["xxxx", "xxxx"],
    cipherSuite: "AES256-SHA256",
  },
L
liyufan 已提交
2032 2033
};
tlsOneWay.connect(oneWayOptions).then(data => {
Y
Yangys 已提交
2034
  console.log(JSON.stringify(data));
L
liyufan 已提交
2035
}).catch(err => {
Y
Yangys 已提交
2036
  console.error(err);
L
liyufan 已提交
2037 2038 2039 2040 2041
});
```

### getRemoteAddress<sup>9+</sup>

Y
Yangys 已提交
2042
getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void
L
liyufan 已提交
2043 2044 2045 2046 2047 2048 2049 2050 2051

在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                              | 必填 | 说明       |
| -------- | ------------------------------------------------- | ---- | ---------- |
Y
Yangys 已提交
2052
| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是   | 回调函数。成功返回对端的socket地址,失败返回错误码,错误信息。 |
L
liyufan 已提交
2053 2054 2055 2056

**错误码:**

| 错误码ID | 错误信息                        |
Y
YOUR_NAME 已提交
2057
| ------- | -----------------------------  |
L
liyufan 已提交
2058 2059 2060 2061 2062 2063 2064
| 2303188 | Socket operation on non-socket.|
| 2300002 | System internal error.         |

**示例:**

```js
tls.getRemoteAddress((err, data) => {
Y
Yangys 已提交
2065 2066 2067 2068 2069
  if (err) {
    console.log('getRemoteAddress fail');
    return;
  }
  console.log('getRemoteAddress success:' + JSON.stringify(data));
L
liyufan 已提交
2070 2071 2072 2073 2074
});
```

### getRemoteAddress<sup>9+</sup>

Y
Yangys 已提交
2075
getRemoteAddress(): Promise\<NetAddress\>
L
liyufan 已提交
2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089

在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型                                        | 说明                                        |
| :------------------------------------------ | :------------------------------------------ |
| Promise\<[NetAddress](#netaddress)> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 |

**错误码:**

| 错误码ID | 错误信息                        |
Y
YOUR_NAME 已提交
2090
| ------- | ------------------------------ |
L
liyufan 已提交
2091 2092 2093 2094 2095 2096 2097 2098
| 2303188 | Socket operation on non-socket.|
| 2300002 | System internal error.         |

**示例:**

```js
let promise = tls.getRemoteAddress();
promise.then(() => {
Y
Yangys 已提交
2099
  console.log('getRemoteAddress success');
L
liyufan 已提交
2100
}).catch(err => {
Y
Yangys 已提交
2101
  console.log('getRemoteAddress fail');
L
liyufan 已提交
2102 2103 2104 2105 2106
});
```

### getCertificate<sup>9+</sup>

Y
Yangys 已提交
2107
getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
L
liyufan 已提交
2108 2109 2110 2111 2112 2113 2114 2115 2116

在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                   | 必填 | 说明 |
| -------- | ----------------------------------------| ---- | ---------------|
Y
Yangys 已提交
2117
| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>    | 是   | 回调函数,成功返回本地的证书,失败返回错误码,错误信息。|
L
liyufan 已提交
2118 2119 2120 2121

**错误码:**

| 错误码ID | 错误信息                        |
Y
YOUR_NAME 已提交
2122
| ------- | ------------------------------ |
L
liyufan 已提交
2123 2124 2125 2126 2127 2128 2129 2130
| 2303501 | SSL is null.                   |
| 2303504 | Error looking up x509.         |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getCertificate((err, data) => {
Y
Yangys 已提交
2131 2132 2133 2134 2135
  if (err) {
    console.log("getCertificate callback error = " + err);
  } else {
    console.log("getCertificate callback = " + data);
  }
L
liyufan 已提交
2136 2137 2138 2139 2140
});
```

### getCertificate<sup>9+</sup>

Y
Yangys 已提交
2141
getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
L
liyufan 已提交
2142 2143 2144 2145 2146 2147 2148 2149 2150

在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型            | 说明                  |
| -------------- | -------------------- |
Y
Yangys 已提交
2151
| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 |
L
liyufan 已提交
2152 2153 2154 2155

**错误码:**

| 错误码ID | 错误信息                        |
Y
YOUR_NAME 已提交
2156
| ------- | ------------------------------ |
L
liyufan 已提交
2157 2158 2159 2160 2161 2162 2163 2164
| 2303501 | SSL is null.                   |
| 2303504 | Error looking up x509.         |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getCertificate().then(data => {
Y
Yangys 已提交
2165
  console.log(data);
L
liyufan 已提交
2166
}).catch(err => {
Y
Yangys 已提交
2167
  console.error(err);
L
liyufan 已提交
2168 2169 2170 2171 2172
});
```

### getRemoteCertificate<sup>9+</sup>

Y
Yangys 已提交
2173
getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void
L
liyufan 已提交
2174 2175 2176 2177 2178 2179 2180 2181 2182

在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名    | 类型                                    | 必填  | 说明           |
| -------- | ----------------------------------------| ---- | ---------------|
Y
Yangys 已提交
2183
| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>  | 是   | 回调函数,返回服务端的证书。失败返回错误码,错误信息。 |
L
liyufan 已提交
2184 2185 2186 2187

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2188
| ------- | ------------------------------ |
L
liyufan 已提交
2189 2190 2191 2192 2193 2194 2195
| 2303501 | SSL is null.                   |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getRemoteCertificate((err, data) => {
Y
Yangys 已提交
2196 2197 2198 2199 2200
  if (err) {
    console.log("getRemoteCertificate callback error = " + err);
  } else {
    console.log("getRemoteCertificate callback = " + data);
  }
L
liyufan 已提交
2201 2202 2203 2204 2205
});
```

### getRemoteCertificate<sup>9+</sup>

Y
Yangys 已提交
2206
getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\>
L
liyufan 已提交
2207 2208 2209 2210 2211 2212 2213 2214 2215

在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型            | 说明                  |
| -------------- | -------------------- |
Y
Yangys 已提交
2216
| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 |
L
liyufan 已提交
2217 2218 2219 2220

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2221
| ------- | ------------------------------ |
L
liyufan 已提交
2222 2223 2224 2225 2226 2227 2228
| 2303501 | SSL is null.                   |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getRemoteCertificate().then(data => {
Y
Yangys 已提交
2229
  console.log(data);
L
liyufan 已提交
2230
}).catch(err => {
Y
Yangys 已提交
2231
  console.error(err);
L
liyufan 已提交
2232 2233 2234 2235 2236
});
```

### getProtocol<sup>9+</sup>

Y
Yangys 已提交
2237
getProtocol(callback: AsyncCallback\<string\>): void
L
liyufan 已提交
2238 2239 2240 2241 2242 2243 2244 2245 2246

在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                       | 必填 | 说明           |
| -------- | ----------------------------------------| ---- | ---------------|
Y
Yangys 已提交
2247
| callback | AsyncCallback\<string\>                  | 是   | 回调函数,返回通信的协议。失败返回错误码,错误信息。|
L
liyufan 已提交
2248 2249 2250 2251

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2252
| ------- | -----------------------------  |
L
liyufan 已提交
2253 2254 2255 2256 2257 2258 2259 2260
| 2303501 | SSL is null.                   |
| 2303505 | Error occurred in the tls system call. |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getProtocol((err, data) => {
Y
Yangys 已提交
2261 2262 2263 2264 2265
  if (err) {
    console.log("getProtocol callback error = " + err);
  } else {
    console.log("getProtocol callback = " + data);
  }
L
liyufan 已提交
2266 2267 2268 2269 2270
});
```

### getProtocol<sup>9+</sup>

Y
Yangys 已提交
2271
getProtocol():Promise\<string\>
L
liyufan 已提交
2272 2273 2274 2275 2276 2277 2278 2279 2280

在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型            | 说明                  |
| -------------- | -------------------- |
Y
Yangys 已提交
2281
| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 |
L
liyufan 已提交
2282 2283 2284 2285

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2286
| ------- | ------------------------------ |
L
liyufan 已提交
2287 2288 2289 2290 2291 2292 2293 2294
| 2303501 | SSL is null.                   |
| 2303505 | Error occurred in the tls system call. |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getProtocol().then(data => {
Y
Yangys 已提交
2295
  console.log(data);
L
liyufan 已提交
2296
}).catch(err => {
Y
Yangys 已提交
2297
  console.error(err);
L
liyufan 已提交
2298 2299 2300 2301 2302
});
```

### getCipherSuite<sup>9+</sup>

Y
Yangys 已提交
2303
getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void
L
liyufan 已提交
2304 2305 2306 2307 2308 2309 2310 2311 2312

在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                     | 必填 | 说明 |
| -------- | ----------------------------------------| ---- | ---------------|
Y
Yangys 已提交
2313
| callback | AsyncCallback\<Array\<string\>\>          | 是   | 回调函数,返回通信双方支持的加密套件。 失败返回错误码,错误信息。 |
L
liyufan 已提交
2314 2315 2316 2317

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2318
| ------- | ------------------------------ |
L
liyufan 已提交
2319 2320 2321 2322 2323 2324 2325 2326 2327
| 2303501 | SSL is null.                   |
| 2303502 | Error in tls reading.          |
| 2303505 | Error occurred in the tls system call. |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getCipherSuite((err, data) => {
Y
Yangys 已提交
2328 2329 2330 2331 2332
  if (err) {
    console.log("getCipherSuite callback error = " + err);
  } else {
    console.log("getCipherSuite callback = " + data);
  }
L
liyufan 已提交
2333 2334 2335 2336 2337
});
```

### getCipherSuite<sup>9+</sup>

Y
Yangys 已提交
2338
getCipherSuite(): Promise\<Array\<string\>\>
L
liyufan 已提交
2339 2340 2341 2342 2343 2344 2345 2346 2347

在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型                    | 说明                  |
| ---------------------- | --------------------- |
Y
Yangys 已提交
2348
| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 |
L
liyufan 已提交
2349 2350 2351 2352

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2353
| ------- | ------------------------------ |
L
liyufan 已提交
2354 2355 2356 2357 2358 2359 2360 2361 2362
| 2303501 | SSL is null.                   |
| 2303502 | Error in tls reading.          |
| 2303505 | Error occurred in the tls system call. |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getCipherSuite().then(data => {
Y
Yangys 已提交
2363
  console.log('getCipherSuite success:' + JSON.stringify(data));
L
liyufan 已提交
2364
}).catch(err => {
Y
Yangys 已提交
2365
  console.error(err);
L
liyufan 已提交
2366 2367 2368 2369 2370
});
```

### getSignatureAlgorithms<sup>9+</sup>

Y
Yangys 已提交
2371
getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void
L
liyufan 已提交
2372 2373 2374 2375 2376 2377 2378 2379 2380

在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名   | 类型                                   | 必填 | 说明            |
| -------- | -------------------------------------| ---- | ---------------|
Y
Yangys 已提交
2381
| callback | AsyncCallback\<Array\<string\>\>         | 是   | 回调函数,返回双方支持的签名算法。  |
L
liyufan 已提交
2382 2383 2384 2385

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2386
| ------- | ------------------------------ |
L
liyufan 已提交
2387 2388 2389 2390 2391 2392 2393
| 2303501 | SSL is null.                   |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getSignatureAlgorithms((err, data) => {
Y
Yangys 已提交
2394 2395 2396 2397 2398
  if (err) {
    console.log("getSignatureAlgorithms callback error = " + err);
  } else {
    console.log("getSignatureAlgorithms callback = " + data);
  }
L
liyufan 已提交
2399 2400 2401 2402 2403
});
```

### getSignatureAlgorithms<sup>9+</sup>

Y
Yangys 已提交
2404
getSignatureAlgorithms(): Promise\<Array\<string\>\>
L
liyufan 已提交
2405 2406 2407 2408 2409 2410 2411 2412 2413

在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型                    | 说明                  |
| ---------------------- | -------------------- |
Y
Yangys 已提交
2414
| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 |
L
liyufan 已提交
2415 2416 2417 2418

**错误码:**

| 错误码ID | 错误信息                        |
L
liyufan 已提交
2419
| ------- | ------------------------------ |
L
liyufan 已提交
2420 2421 2422 2423 2424 2425 2426
| 2303501 | SSL is null.                   |
| 2300002 | System internal error.         |

**示例:**

```js
tls.getSignatureAlgorithms().then(data => {
Y
Yangys 已提交
2427
  console.log("getSignatureAlgorithms success" + data);
L
liyufan 已提交
2428
}).catch(err => {
Y
Yangys 已提交
2429
  console.error(err);
L
liyufan 已提交
2430 2431 2432 2433 2434
});
```

### send<sup>9+</sup>

Y
Yangys 已提交
2435
send(data: string, callback: AsyncCallback\<void\>): void
L
liyufan 已提交
2436 2437 2438 2439 2440 2441 2442 2443 2444 2445

在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名    | 类型                          | 必填 | 说明            |
| -------- | -----------------------------| ---- | ---------------|
|   data   | string                       | 是   | 发送的数据内容。   |
Y
Yangys 已提交
2446
| callback | AsyncCallback\<void\>         | 是   | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
L
liyufan 已提交
2447 2448 2449 2450

**错误码:**

| 错误码ID | 错误信息                                      |
L
liyufan 已提交
2451
| ------- | -------------------------------------------- |
L
liyufan 已提交
2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462
| 401     | Parameter error.                             |
| 2303501 | SSL is null.                                 |
| 2303503 | Error in tls writing                         |
| 2303505 | Error occurred in the tls system call.       |
| 2303506 | Error clearing tls connection.               |
| 2300002 | System internal error.                       |

**示例:**

```js
tls.send("xxxx", (err) => {
Y
Yangys 已提交
2463 2464 2465 2466 2467
  if (err) {
    console.log("send callback error = " + err);
  } else {
    console.log("send success");
  }
L
liyufan 已提交
2468 2469 2470 2471 2472
});
```

### send<sup>9+</sup>

Y
Yangys 已提交
2473
send(data: string): Promise\<void\>
L
liyufan 已提交
2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487

在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名    | 类型                          | 必填 | 说明            |
| -------- | -----------------------------| ---- | ---------------|
|   data   | string                       | 是   | 发送的数据内容。   |

**错误码:**

| 错误码ID | 错误信息                                      |
L
liyufan 已提交
2488
| ------- | -------------------------------------------- |
L
liyufan 已提交
2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499
| 401     | Parameter error.                             |
| 2303501 | SSL is null.                                 |
| 2303503 | Error in tls writing                         |
| 2303505 | Error occurred in the tls system call.       |
| 2303506 | Error clearing tls connection.               |
| 2300002 | System internal error.                       |

**返回值:**

| 类型           | 说明                  |
| -------------- | -------------------- |
Y
Yangys 已提交
2500
| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 |
L
liyufan 已提交
2501 2502 2503 2504

**示例:**

```js
Y
Yangys 已提交
2505
tls.send("xxxx").then(() => {
Y
Yangys 已提交
2506
  console.log("send success");
L
liyufan 已提交
2507
}).catch(err => {
Y
Yangys 已提交
2508
  console.error(err);
L
liyufan 已提交
2509 2510 2511 2512 2513
});
```

### close<sup>9+</sup>

Y
Yangys 已提交
2514
close(callback: AsyncCallback\<void\>): void
L
liyufan 已提交
2515 2516 2517 2518 2519 2520 2521 2522 2523

在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**参数:**

| 参数名    | 类型                          | 必填 | 说明            |
| -------- | -----------------------------| ---- | ---------------|
Y
Yangys 已提交
2524
| callback | AsyncCallback\<void\>         | 是   | 回调函数,成功返回TLSSocket关闭连接的结果。 失败返回错误码,错误信息。 |
L
liyufan 已提交
2525 2526 2527 2528

**错误码:**

| 错误码ID | 错误信息                                      |
L
liyufan 已提交
2529
| ------- | -------------------------------------------- |
L
liyufan 已提交
2530 2531 2532 2533 2534 2535 2536 2537 2538
| 2303501 | SSL is null.                                 |
| 2303505 | Error occurred in the tls system call.       |
| 2303506 | Error clearing tls connection.               |
| 2300002 | System internal error.                       |

**示例:**

```js
tls.close((err) => {
Y
Yangys 已提交
2539 2540 2541 2542 2543
  if (err) {
    console.log("close callback error = " + err);
  } else {
    console.log("close success");
  }
L
liyufan 已提交
2544 2545 2546 2547 2548
});
```

### close<sup>9+</sup>

Y
Yangys 已提交
2549
close(): Promise\<void\>
L
liyufan 已提交
2550 2551 2552 2553 2554 2555 2556 2557 2558

在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。

**系统能力**:SystemCapability.Communication.NetStack

**返回值:**

| 类型           | 说明                  |
| -------------- | -------------------- |
Y
Yangys 已提交
2559
| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 |
L
liyufan 已提交
2560 2561 2562 2563

**错误码:**

| 错误码ID | 错误信息                                      |
L
liyufan 已提交
2564
| ------- | -------------------------------------------- |
L
liyufan 已提交
2565 2566 2567 2568 2569 2570 2571 2572
| 2303501 | SSL is null.                                 |
| 2303505 | Error occurred in the tls system call.       |
| 2303506 | Error clearing tls connection.               |
| 2300002 | System internal error.                       |

**示例:**

```js
Y
Yangys 已提交
2573
tls.close().then(() => {
Y
Yangys 已提交
2574
  console.log("close success");
L
liyufan 已提交
2575
}).catch(err => {
Y
Yangys 已提交
2576
  console.error(err);
L
liyufan 已提交
2577 2578 2579 2580 2581 2582 2583 2584 2585
});
```

## TLSConnectOptions<sup>9+</sup>

TLS连接的操作。

**系统能力**:SystemCapability.Communication.NetStack

L
liyufan 已提交
2586 2587 2588 2589
| 名称          | 类型                                     | 必填 | 说明            |
| -------------- | ------------------------------------- | ---  |-------------- |
| address        | [NetAddress](#netaddress)             | 是  |  网关地址。       |
| secureOptions  | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。|
Y
Yangys 已提交
2590
| ALPNProtocols  | Array\<string\>                         | 否 | ALPN协议。      |
L
liyufan 已提交
2591 2592 2593 2594 2595 2596 2597

## TLSSecureOptions<sup>9+</sup>

TLS安全相关操作,其中ca证书为必选参数,其他参数为可选参数。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。

**系统能力**:SystemCapability.Communication.NetStack

L
liyufan 已提交
2598 2599
| 名称                 | 类型                                                    | 必填 | 说明                                |
| --------------------- | ------------------------------------------------------ | --- |----------------------------------- |
Y
Yangys 已提交
2600
| ca                    | string \| Array\<string\>                               | 是 | 服务端的ca证书,用于认证校验服务端的数字证书。|
L
liyufan 已提交
2601 2602
| cert                  | string                                                  | 否 | 本地客户端的数字证书。                 |
| key                   | string                                                  | 否 | 本地数字证书的私钥。                   |
Z
zhanghaifeng 已提交
2603
| password                | string                                                  | 否 | 读取私钥的密码。                      |
Y
Yangys 已提交
2604
| protocols             | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本。                  |
L
liyufan 已提交
2605 2606 2607
| useRemoteCipherPrefer | boolean                                                 | 否 | 优先使用对等方的密码套件。          |
| signatureAlgorithms   | string                                                 | 否 | 通信过程中的签名算法。               |
| cipherSuite           | string                                                 | 否 | 通信过程中的加密套件。               |
L
liyufan 已提交
2608 2609 2610 2611 2612 2613 2614

## Protocol<sup>9+</sup>

TLS通信的协议版本。

**系统能力**:SystemCapability.Communication.NetStack

L
liyufan 已提交
2615 2616 2617 2618
| 名称      |    值    | 说明                |
| --------- | --------- |------------------ |
| TLSv12    | "TLSv1.2" | 使用TLSv1.2协议通信。 |
| TLSv13    | "TLSv1.3" | 使用TLSv1.3协议通信。 |
L
liyufan 已提交
2619 2620 2621 2622 2623 2624 2625

## X509CertRawData<sup>9+</sup>

存储证书的数据。

**系统能力**:SystemCapability.Communication.NetStack

L
liyufan 已提交
2626 2627
| 类型                                                                   | 说明                   |
| --------------------------------------------------------------------- | --------------------- |
2628
|[cert.EncodingBlob](js-apis-cert.md#datablob) | 存储证书的数据和编码格式 |