1# @ohos.net.socket (Socket连接) 2 3本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。 4 5> **说明:** 6> 7> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 本模块API使用时建议放在worker线程或者taskpool中做网络操作,否则可能会导致UI线程卡顿。 9 10## 导入模块 11 12```ts 13import { socket } from '@kit.NetworkKit'; 14``` 15 16## socket.constructUDPSocketInstance 17 18constructUDPSocketInstance(): UDPSocket 19 20创建一个UDPSocket对象。 21 22**系统能力**:SystemCapability.Communication.NetStack 23 24**返回值:** 25 26| 类型 | 说明 | 27| --------------------------------- | ---------------------- | 28| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 | 29 30**示例:** 31 32```ts 33import { socket } from '@kit.NetworkKit'; 34let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 35``` 36 37## UDPSocket 38 39UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。 40 41### bind 42 43bind(address: NetAddress, callback: AsyncCallback\<void\>): void 44 45绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。 46 47**需要权限**:ohos.permission.INTERNET 48 49**系统能力**:SystemCapability.Communication.NetStack 50 51**参数:** 52 53| 参数名 | 类型 | 必填 | 说明 | 54| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 55| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 56| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 57 58**错误码:** 59 60| 错误码ID | 错误信息 | 61| ------- | ----------------------- | 62| 401 | Parameter error. | 63| 201 | Permission denied. | 64 65**示例:** 66 67```ts 68import { socket } from '@kit.NetworkKit'; 69import { BusinessError } from '@kit.BasicServicesKit'; 70 71let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 72let bindAddr: socket.NetAddress = { 73 address: '192.168.xx.xxx', 74 port: 1234 75} 76udp.bind(bindAddr, (err: BusinessError) => { 77 if (err) { 78 console.log('bind fail'); 79 return; 80 } 81 console.log('bind success'); 82}); 83``` 84 85### bind 86 87bind(address: NetAddress): Promise\<void\> 88 89绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。 90 91**需要权限**:ohos.permission.INTERNET 92 93**系统能力**:SystemCapability.Communication.NetStack 94 95**参数:** 96 97| 参数名 | 类型 | 必填 | 说明 | 98| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 99| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 100 101**错误码:** 102 103| 错误码ID | 错误信息 | 104| ------- | ----------------------- | 105| 401 | Parameter error. | 106| 201 | Permission denied. | 107 108**返回值:** 109 110| 类型 | 说明 | 111| -------------- | ----------------------------------------- | 112| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 | 113 114**示例:** 115 116```ts 117import { socket } from '@kit.NetworkKit'; 118import { BusinessError } from '@kit.BasicServicesKit'; 119 120let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 121let bindAddr: socket.NetAddress = { 122 address: '192.168.xx.xxx', 123 port: 8080 124} 125udp.bind(bindAddr).then(() => { 126 console.log('bind success'); 127}).catch((err: BusinessError) => { 128 console.log('bind fail'); 129}); 130``` 131 132### send 133 134send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void 135 136通过UDPSocket连接发送数据。使用callback方式作为异步方法。 137 138发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 139 140**需要权限**:ohos.permission.INTERNET 141 142**系统能力**:SystemCapability.Communication.NetStack 143 144**参数:** 145 146| 参数名 | 类型 | 必填 | 说明 | 147| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 148| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 149| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 150 151**错误码:** 152 153| 错误码ID | 错误信息 | 154| ------- | ----------------------- | 155| 401 | Parameter error. | 156| 201 | Permission denied. | 157 158**示例:** 159 160```ts 161import { socket } from '@kit.NetworkKit'; 162import { BusinessError } from '@kit.BasicServicesKit'; 163 164let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 165let netAddress: socket.NetAddress = { 166 address: '192.168.xx.xxx', 167 port: 8080 168} 169let sendOptions: socket.UDPSendOptions = { 170 data: 'Hello, server!', 171 address: netAddress 172} 173udp.send(sendOptions, (err: BusinessError) => { 174 if (err) { 175 console.log('send fail'); 176 return; 177 } 178 console.log('send success'); 179}); 180``` 181 182### send 183 184send(options: UDPSendOptions): Promise\<void\> 185 186通过UDPSocket连接发送数据。使用Promise方式作为异步方法。 187 188发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 189 190**需要权限**:ohos.permission.INTERNET 191 192**系统能力**:SystemCapability.Communication.NetStack 193 194**参数:** 195 196| 参数名 | 类型 | 必填 | 说明 | 197| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 198| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 199 200**错误码:** 201 202| 错误码ID | 错误信息 | 203| ------- | ----------------------- | 204| 401 | Parameter error. | 205| 201 | Permission denied. | 206 207**返回值:** 208 209| 类型 | 说明 | 210| -------------- | --------------------------------------------- | 211| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 | 212 213**示例:** 214 215```ts 216import { socket } from '@kit.NetworkKit'; 217import { BusinessError } from '@kit.BasicServicesKit'; 218 219let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 220let netAddress: socket.NetAddress = { 221 address: '192.168.xx.xxx', 222 port: 8080 223} 224let sendOptions: socket.UDPSendOptions = { 225 data: 'Hello, server!', 226 address: netAddress 227} 228udp.send(sendOptions).then(() => { 229 console.log('send success'); 230}).catch((err: BusinessError) => { 231 console.log('send fail'); 232}); 233``` 234 235### close 236 237close(callback: AsyncCallback\<void\>): void 238 239关闭UDPSocket连接。使用callback方式作为异步方法。 240 241**需要权限**:ohos.permission.INTERNET 242 243**系统能力**:SystemCapability.Communication.NetStack 244 245**参数:** 246 247| 参数名 | 类型 | 必填 | 说明 | 248| -------- | --------------------- | ---- | ---------- | 249| callback | AsyncCallback\<void\> | 是 | 回调函数。关闭UDPSocket连接后触发回调函数。 | 250 251**错误码:** 252 253| 错误码ID | 错误信息 | 254| ------- | ----------------------- | 255| 201 | Permission denied. | 256 257**示例:** 258 259```ts 260import { socket } from '@kit.NetworkKit'; 261import { BusinessError } from '@kit.BasicServicesKit'; 262 263let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 264udp.close((err: BusinessError) => { 265 if (err) { 266 console.log('close fail'); 267 return; 268 } 269 console.log('close success'); 270}) 271``` 272 273### close 274 275close(): Promise\<void\> 276 277关闭UDPSocket连接。使用Promise方式作为异步方法。 278 279**需要权限**:ohos.permission.INTERNET 280 281**系统能力**:SystemCapability.Communication.NetStack 282 283**错误码:** 284 285| 错误码ID | 错误信息 | 286| ------- | ----------------------- | 287| 201 | Permission denied. | 288 289**返回值:** 290 291| 类型 | 说明 | 292| -------------- | ----------------------------------------- | 293| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 | 294 295**示例:** 296 297```ts 298import { socket } from '@kit.NetworkKit'; 299import { BusinessError } from '@kit.BasicServicesKit'; 300 301let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 302udp.close().then(() => { 303 console.log('close success'); 304}).catch((err: BusinessError) => { 305 console.log('close fail'); 306}); 307``` 308 309### getState 310 311getState(callback: AsyncCallback\<SocketStateBase\>): void 312 313获取UDPSocket状态。使用callback方式作为异步方法。 314 315> **说明:** 316> bind方法调用成功后,才可调用此方法。 317 318**需要权限**:ohos.permission.INTERNET 319 320**系统能力**:SystemCapability.Communication.NetStack 321 322**参数:** 323 324| 参数名 | 类型 | 必填 | 说明 | 325| -------- | ------------------------------------------------------ | ---- | ---------- | 326| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 | 327 328**错误码:** 329 330| 错误码ID | 错误信息 | 331| ------- | ----------------------- | 332| 201 | Permission denied. | 333 334**示例:** 335 336```ts 337import { socket } from '@kit.NetworkKit'; 338import { BusinessError } from '@kit.BasicServicesKit'; 339 340let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 341let bindAddr: socket.NetAddress = { 342 address: '192.168.xx.xxx', 343 port: 8080 344} 345udp.bind(bindAddr, (err: BusinessError) => { 346 if (err) { 347 console.log('bind fail'); 348 return; 349 } 350 console.log('bind success'); 351 udp.getState((err: BusinessError, data: socket.SocketStateBase) => { 352 if (err) { 353 console.log('getState fail'); 354 return; 355 } 356 console.log('getState success:' + JSON.stringify(data)); 357 }) 358}) 359``` 360 361### getState 362 363getState(): Promise\<SocketStateBase\> 364 365获取UDPSocket状态。使用Promise方式作为异步方法。 366 367> **说明:** 368> bind方法调用成功后,才可调用此方法。 369 370**需要权限**:ohos.permission.INTERNET 371 372**系统能力**:SystemCapability.Communication.NetStack 373 374**错误码:** 375 376| 错误码ID | 错误信息 | 377| ------- | ----------------------- | 378| 201 | Permission denied. | 379 380**返回值:** 381 382| 类型 | 说明 | 383| ----------------------------------------------- | ----------------------------------------- | 384| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 | 385 386**示例:** 387 388```ts 389import { socket } from '@kit.NetworkKit'; 390import { BusinessError } from '@kit.BasicServicesKit'; 391 392let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 393let bindAddr: socket.NetAddress = { 394 address: '192.168.xx.xxx', 395 port: 8080 396} 397udp.bind(bindAddr, (err: BusinessError) => { 398 if (err) { 399 console.log('bind fail'); 400 return; 401 } 402 console.log('bind success'); 403 udp.getState().then((data: socket.SocketStateBase) => { 404 console.log('getState success:' + JSON.stringify(data)); 405 }).catch((err: BusinessError) => { 406 console.log('getState fail' + JSON.stringify(err)); 407 }); 408}); 409``` 410 411### setExtraOptions 412 413setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void 414 415设置UDPSocket连接的其他属性。使用callback方式作为异步方法。 416 417> **说明:** 418> bind方法调用成功后,才可调用此方法。 419 420**需要权限**:ohos.permission.INTERNET 421 422**系统能力**:SystemCapability.Communication.NetStack 423 424**参数:** 425 426| 参数名 | 类型 | 必填 | 说明 | 427| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 428| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 429| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 430 431**错误码:** 432 433| 错误码ID | 错误信息 | 434| ------- | ----------------------- | 435| 401 | Parameter error. | 436| 201 | Permission denied. | 437 438**示例:** 439 440```ts 441import { socket } from '@kit.NetworkKit'; 442import { BusinessError } from '@kit.BasicServicesKit'; 443 444let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 445 446let bindAddr: socket.NetAddress = { 447 address: '192.168.xx.xxx', 448 port: 8080 449} 450udp.bind(bindAddr, (err: BusinessError) => { 451 if (err) { 452 console.log('bind fail'); 453 return; 454 } 455 console.log('bind success'); 456 let udpextraoptions: socket.UDPExtraOptions = { 457 receiveBufferSize: 1000, 458 sendBufferSize: 1000, 459 reuseAddress: false, 460 socketTimeout: 6000, 461 broadcast: true 462 } 463 udp.setExtraOptions(udpextraoptions, (err: BusinessError) => { 464 if (err) { 465 console.log('setExtraOptions fail'); 466 return; 467 } 468 console.log('setExtraOptions success'); 469 }) 470}) 471``` 472 473### setExtraOptions 474 475setExtraOptions(options: UDPExtraOptions): Promise\<void\> 476 477设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。 478 479> **说明:** 480> bind方法调用成功后,才可调用此方法。 481 482**需要权限**:ohos.permission.INTERNET 483 484**系统能力**:SystemCapability.Communication.NetStack 485 486**参数:** 487 488| 参数名 | 类型 | 必填 | 说明 | 489| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 490| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 491 492**返回值:** 493 494| 类型 | 说明 | 495| -------------- | --------------------------------------------------- | 496| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 | 497 498**错误码:** 499 500| 错误码ID | 错误信息 | 501| ------- | ----------------------- | 502| 401 | Parameter error. | 503| 201 | Permission denied. | 504 505**示例:** 506 507```ts 508import { socket } from '@kit.NetworkKit'; 509import { BusinessError } from '@kit.BasicServicesKit'; 510 511let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 512 513let bindAddr: socket.NetAddress = { 514 address: '192.168.xx.xxx', 515 port: 8080 516} 517udp.bind(bindAddr, (err: BusinessError) => { 518 if (err) { 519 console.log('bind fail'); 520 return; 521 } 522 console.log('bind success'); 523 let udpextraoptions: socket.UDPExtraOptions = { 524 receiveBufferSize: 1000, 525 sendBufferSize: 1000, 526 reuseAddress: false, 527 socketTimeout: 6000, 528 broadcast: true 529 } 530 udp.setExtraOptions(udpextraoptions).then(() => { 531 console.log('setExtraOptions success'); 532 }).catch((err: BusinessError) => { 533 console.log('setExtraOptions fail'); 534 }); 535}) 536``` 537 538### getLocalAddress<sup>12+</sup> 539 540getLocalAddress(): Promise\<NetAddress\> 541 542获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。 543 544> **说明:** 545> bind方法调用成功后,才可调用此方法。 546 547**系统能力**:SystemCapability.Communication.NetStack 548 549**返回值:** 550 551| 类型 | 说明 | 552| -------------- | --------------------------------------------------- | 553| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 554 555**错误码:** 556 557| 错误码ID | 错误信息 | 558| -------- | ------------------------------------------- | 559| 2300002 | System internal error. | 560| 2301009 | Bad file descriptor. | 561| 2303188 | Socket operation on non-socket. | 562 563**示例:** 564 565```ts 566import { socket } from '@kit.NetworkKit'; 567import { BusinessError } from '@kit.BasicServicesKit'; 568 569let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 570 571let bindAddr: socket.NetAddress = { 572 address: '192.168.xx.xxx', 573 port: 8080 574} 575udp.bind(bindAddr).then(() => { 576 console.info('bind success'); 577 udp.getLocalAddress().then((localAddress: socket.NetAddress) => { 578 console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress)); 579 }).catch((err: BusinessError) => { 580 console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err)); 581 }) 582}).catch((err: BusinessError) => { 583 console.error('bind fail'); 584}); 585``` 586 587### on('message') 588 589on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 590 591订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 592 593**系统能力**:SystemCapability.Communication.NetStack 594 595**参数:** 596 597| 参数名 | 类型 | 必填 | 说明 | 598| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 599| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 600| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。 | 601 602**示例:** 603 604```ts 605import { socket } from '@kit.NetworkKit'; 606import { BusinessError } from '@kit.BasicServicesKit'; 607 608let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 609 610let messageView = ''; 611udp.on('message', (value: socket.SocketMessageInfo) => { 612 for (let i: number = 0; i < value.message.byteLength; i++) { 613 let uint8Array = new Uint8Array(value.message) 614 let messages = uint8Array[i] 615 let message = String.fromCharCode(messages); 616 messageView += message; 617 } 618 console.log('on message message: ' + JSON.stringify(messageView)); 619 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 620}); 621``` 622 623### off('message') 624 625off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 626 627取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 628 629**系统能力**:SystemCapability.Communication.NetStack 630 631**参数:** 632 633| 参数名 | 类型 | 必填 | 说明 | 634| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 635| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 636| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。返回取消订阅某类事件后UDPSocket连接的状态信息。 | 637 638**示例:** 639 640```ts 641import { socket } from '@kit.NetworkKit'; 642import { BusinessError } from '@kit.BasicServicesKit'; 643 644let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 645let messageView = ''; 646let callback = (value: socket.SocketMessageInfo) => { 647 for (let i: number = 0; i < value.message.byteLength; i++) { 648 let uint8Array = new Uint8Array(value.message) 649 let messages = uint8Array[i] 650 let message = String.fromCharCode(messages); 651 messageView += message; 652 } 653 console.log('on message message: ' + JSON.stringify(messageView)); 654 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 655} 656udp.on('message', callback); 657// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 658udp.off('message', callback); 659udp.off('message'); 660``` 661 662### on('listening' | 'close') 663 664on(type: 'listening' | 'close', callback: Callback\<void\>): void 665 666订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 667 668**系统能力**:SystemCapability.Communication.NetStack 669 670**参数:** 671 672| 参数名 | 类型 | 必填 | 说明 | 673| -------- | ---------------- | ---- | ------------------------------------------------------------ | 674| type | string | 是 | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 675| callback | Callback\<void\> | 是 | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。 | 676 677**示例:** 678 679```ts 680import { socket } from '@kit.NetworkKit'; 681import { BusinessError } from '@kit.BasicServicesKit'; 682 683let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 684udp.on('listening', () => { 685 console.log("on listening success"); 686}); 687udp.on('close', () => { 688 console.log("on close success"); 689}); 690``` 691 692### off('listening' | 'close') 693 694off(type: 'listening' | 'close', callback?: Callback\<void\>): void 695 696取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 697 698**系统能力**:SystemCapability.Communication.NetStack 699 700**参数:** 701 702| 参数名 | 类型 | 必填 | 说明 | 703| -------- | ---------------- | ---- | ------------------------------------------------------------ | 704| type | string | 是 | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 705| callback | Callback\<void\> | 否 | 回调函数。取消订阅UDPSocket连接的数据包消息事件或关闭事件后触发回调函数。 | 706 707**示例:** 708 709```ts 710import { socket } from '@kit.NetworkKit'; 711import { BusinessError } from '@kit.BasicServicesKit'; 712 713let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 714let callback1 = () => { 715 console.log("on listening, success"); 716} 717udp.on('listening', callback1); 718// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 719udp.off('listening', callback1); 720udp.off('listening'); 721let callback2 = () => { 722 console.log("on close, success"); 723} 724udp.on('close', callback2); 725// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 726udp.off('close', callback2); 727udp.off('close'); 728``` 729 730### on('error') 731 732on(type: 'error', callback: ErrorCallback): void 733 734订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 735 736**系统能力**:SystemCapability.Communication.NetStack 737 738**参数:** 739 740| 参数名 | 类型 | 必填 | 说明 | 741| -------- | ------------- | ---- | ------------------------------------ | 742| type | string | 是 | 订阅的事件类型。'error':error事件。 | 743| callback | ErrorCallback | 是 | 回调函数。UDPSocket连接发生error事件后触发回调函数。 | 744 745**示例:** 746 747```ts 748import { socket } from '@kit.NetworkKit'; 749import { BusinessError } from '@kit.BasicServicesKit'; 750 751let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 752udp.on('error', (err: BusinessError) => { 753 console.log("on error, err:" + JSON.stringify(err)) 754}); 755``` 756 757### off('error') 758 759off(type: 'error', callback?: ErrorCallback): void 760 761取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 762 763**系统能力**:SystemCapability.Communication.NetStack 764 765**参数:** 766 767| 参数名 | 类型 | 必填 | 说明 | 768| -------- | ------------- | ---- | ------------------------------------ | 769| type | string | 是 | 订阅的事件类型。'error':error事件。 | 770| callback | ErrorCallback | 否 | 回调函数。UDPSocket连接发生error事件后。 | 771 772**示例:** 773 774```ts 775import { socket } from '@kit.NetworkKit'; 776import { BusinessError } from '@kit.BasicServicesKit'; 777 778let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 779let callback = (err: BusinessError) => { 780 console.log("on error, err:" + JSON.stringify(err)); 781} 782udp.on('error', callback); 783// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 784udp.off('error', callback); 785udp.off('error'); 786``` 787 788## NetAddress 789 790目标地址信息。 791 792**系统能力**:SystemCapability.Communication.NetStack 793 794| 名称 | 类型 | 必填 | 说明 | 795| ------- | ------ | ---- | ------------------------------------------------------------ | 796| address<sup>11+</sup> | string | 是 | 本地绑定的ip地址。 | 797| port | number | 否 | 端口号 ,范围0~65535。如果不指定系统随机分配端口。 | 798| family | number | 否 | 网络协议类型,可选类型:<br />- 1:IPv4<br />- 2:IPv6<br />默认为1。如果地址为IPV6类型,该字段必须被显式指定为2。 | 799## UDPSendOptions 800 801UDPSocket发送参数。 802 803**系统能力**:SystemCapability.Communication.NetStack 804 805| 名称 | 类型 | 必填 | 说明 | 806| ------- | ---------------------------------- | ---- | -------------- | 807| data | string \| ArrayBuffer | 是 | 发送的数据。 | 808| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 809 810## UDPExtraOptions 811 812UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 813 814**系统能力**:SystemCapability.Communication.NetStack 815 816| 名称 | 类型 | 必填 | 说明 | 817| ----------------- | ------- | ---- | -------------------------------- | 818| broadcast | boolean | 否 | 是否可以发送广播。默认为false。 | 819 820## SocketMessageInfo<sup>11+</sup> 821 822socket连接信息 823 824**系统能力**:SystemCapability.Communication.NetStack 825 826| 名称 | 类型 | 必填 | 说明 | 827| ---------- | ------ | ---- | ------------------------------------- | 828| message | ArrayBuffer | 是 | 接收的事件消息。 | 829| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是 | socket连接信息。 | 830 831## SocketStateBase 832 833Socket的状态信息。 834 835**系统能力**:SystemCapability.Communication.NetStack 836 837| 名称 | 类型 | 必填 | 说明 | 838| ----------- | ------- | ---- | ---------- | 839| isBound | boolean | 是 | 是否绑定。 | 840| isClose | boolean | 是 | 是否关闭。 | 841| isConnected | boolean | 是 | 是否连接。 | 842 843## SocketRemoteInfo 844 845Socket的连接信息。 846 847**系统能力**:SystemCapability.Communication.NetStack 848 849| 名称 | 类型 | 必填 | 说明 | 850| ------- | ------ | ---- | ------------------------------------------------------------ | 851| address | string | 是 | 本地绑定的ip地址。 | 852| family | 'IPv4' \| 'IPv6' | 是 | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 | 853| port | number | 是 | 端口号,范围0~65535。 | 854| size | number | 是 | 服务器响应信息的字节长度。 | 855 856## UDP 错误码说明 857 858UDP 其余错误码映射形式为:2301000 + Linux内核错误码。 859 860错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 861 862## socket.constructMulticastSocketInstance<sup>11+</sup> 863 864constructMulticastSocketInstance(): MulticastSocket 865 866创建一个MulticastSocket对象。 867 868**系统能力**:SystemCapability.Communication.NetStack 869 870**返回值:** 871 872| 类型 | 说明 | 873| ----------------------------------- | ----------------------------- | 874| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 | 875 876**示例:** 877 878```ts 879import { socket } from '@kit.NetworkKit'; 880let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 881``` 882## MulticastSocket<sup>11+</sup> 883 884MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。 885 886### addMembership<sup>11+</sup> 887 888addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void; 889 890加入多播组。使用callback方法作为异步方法。 891 892> **说明:** 893> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 894> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 895 896**需要权限**:ohos.permission.INTERNET 897 898**系统能力**:SystemCapability.Communication.NetStack 899 900**参数:** 901 902| 参数名 | 类型 | 必填 | 说明 | 903| ----------------- | ----------------------------- | ---- | ----------------------------------------- | 904| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 905| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 906 907**错误码:** 908 909| 错误码ID | 错误信息 | 910| ------- | ----------------------- | 911| 401 | Parameter error. | 912| 201 | Permission denied. | 913| 2301022 | Invalid argument. | 914| 2301088 | Not a socket. | 915| 2301098 | Address in use. | 916 917**示例:** 918 919```ts 920import { socket } from '@kit.NetworkKit'; 921 922let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 923let addr: socket.NetAddress = { 924 address: '239.255.0.1', 925 port: 8080 926} 927multicast.addMembership(addr, (err: Object) => { 928 if (err) { 929 console.log('add membership fail, err: ' + JSON.stringify(err)); 930 return; 931 } 932 console.log('add membership success'); 933}) 934``` 935 936### addMembership<sup>11+</sup> 937 938addMembership(multicastAddress: NetAddress): Promise\<void\>; 939 940加入多播组。使用Promise方法作为异步方法。。 941 942> **说明:** 943> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 944> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 945 946**需要权限**:ohos.permission.INTERNET 947 948**系统能力**:SystemCapability.Communication.NetStack 949 950**参数:** 951 952| 参数名 | 类型 | 必填 | 说明 | 953| ----------------- | ----------------------------- | ---- | -------------------------------------------- | 954| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 955 956**返回值:** 957 958| 类型 | 说明 | 959| -------------- | ----------------------------------------------- | 960| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 | 961 962**错误码:** 963 964| 错误码ID | 错误信息 | 965| ------- | ----------------------- | 966| 401 | Parameter error. | 967| 201 | Permission denied. | 968| 2301088 | Not a socket. | 969| 2301098 | Address in use. | 970 971**示例:** 972 973```ts 974import { socket } from '@kit.NetworkKit'; 975 976let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 977let addr: socket.NetAddress = { 978 address: '239.255.0.1', 979 port: 8080 980} 981multicast.addMembership(addr).then(() => { 982 console.log('addMembership success'); 983}).catch((err: Object) => { 984 console.log('addMembership fail'); 985}); 986``` 987 988### dropMembership<sup>11+</sup> 989 990dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void; 991 992退出多播组。使用callback方法作为异步方法。 993 994> **说明:** 995> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 996> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 997 998**需要权限**:ohos.permission.INTERNET 999 1000**系统能力**:SystemCapability.Communication.NetStack 1001 1002**参数:** 1003 1004| 参数名 | 类型 | 必填 | 说明 | 1005| ----------------- | ----------------------------- | ---- | ------------------------------------------- | 1006| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1007| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。| 1008 1009**错误码:** 1010 1011| 错误码ID | 错误信息 | 1012| ------- | ----------------------- | 1013| 401 | Parameter error. | 1014| 201 | Permission denied. | 1015| 2301088 | Not a socket. | 1016| 2301098 | Address in use. | 1017 1018**示例:** 1019 1020```ts 1021import { socket } from '@kit.NetworkKit'; 1022 1023let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1024let addr: socket.NetAddress = { 1025 address: '239.255.0.1', 1026 port: 8080 1027} 1028multicast.dropMembership(addr, (err: Object) => { 1029 if (err) { 1030 console.log('drop membership fail, err: ' + JSON.stringify(err)); 1031 return; 1032 } 1033 console.log('drop membership success'); 1034}) 1035``` 1036 1037### dropMembership<sup>11+</sup> 1038 1039dropMembership(multicastAddress: NetAddress): Promise\<void\>; 1040 1041退出多播组。使用Promise方法作为异步方法。。 1042 1043> **说明:** 1044> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1045> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 1046 1047**需要权限**:ohos.permission.INTERNET 1048 1049**系统能力**:SystemCapability.Communication.NetStack 1050 1051**参数:** 1052 1053| 参数名 | 类型 | 必填 | 说明 | 1054| ----------------- | ------------------------------------- | ---- | -------------------------------------------- | 1055| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1056 1057**返回值:** 1058 1059| 类型 | 说明 | 1060| -------------- | ----------------------------------------------- | 1061| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 | 1062 1063**错误码:** 1064 1065| 错误码ID | 错误信息 | 1066| ------- | ----------------------- | 1067| 401 | Parameter error. | 1068| 201 | Permission denied. | 1069| 2301088 | Not a socket. | 1070| 2301098 | Address in use. | 1071 1072**示例:** 1073 1074```ts 1075import { socket } from '@kit.NetworkKit'; 1076 1077let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1078let addr: socket.NetAddress = { 1079 address: '239.255.0.1', 1080 port: 8080 1081} 1082multicast.dropMembership(addr).then(() => { 1083 console.log('drop membership success'); 1084}).catch((err: Object) => { 1085 console.log('drop membership fail'); 1086}); 1087``` 1088 1089### setMulticastTTL<sup>11+</sup> 1090 1091setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void; 1092 1093设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。 1094 1095> **说明:** 1096> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1097> 范围为 0~255,默认值为 1 。 1098> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1099> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1100 1101**系统能力**:SystemCapability.Communication.NetStack 1102 1103**参数:** 1104 1105| 参数名 | 类型 | 必填 | 说明 | 1106| ------------- | --------------------- | ---- | ----------------------------- | 1107| ttl | number | 是 | ttl设置数值,类型为数字number。 | 1108| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1109 1110**错误码:** 1111 1112| 错误码ID | 错误信息 | 1113| ------- | ----------------------- | 1114| 401 | Parameter error. | 1115| 2301022 | Invalid argument. | 1116| 2301088 | Not a socket. | 1117 1118**示例:** 1119 1120```ts 1121import { socket } from '@kit.NetworkKit'; 1122 1123let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1124let ttl = 8 1125multicast.setMulticastTTL(ttl, (err: Object) => { 1126 if (err) { 1127 console.log('set ttl fail, err: ' + JSON.stringify(err)); 1128 return; 1129 } 1130 console.log('set ttl success'); 1131}) 1132``` 1133 1134### setMulticastTTL<sup>11+</sup> 1135 1136setMulticastTTL(ttl: number): Promise\<void\>; 1137 1138设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。。 1139 1140> **说明:** 1141> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1142> 范围为 0~255,默认值为 1 。 1143> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1144> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1145 1146**系统能力**:SystemCapability.Communication.NetStack 1147 1148**参数:** 1149 1150| 参数名 | 类型 | 必填 | 说明 | 1151| ------------- | ---------------------- | ---- | ------------------------------ | 1152| ttl | number | 是 | ttl设置数值,类型为数字Number。 | 1153 1154**返回值:** 1155 1156| 类型 | 说明 | 1157| -------------- | ---------------------------------------------- | 1158| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 | 1159 1160**错误码:** 1161 1162| 错误码ID | 错误信息 | 1163| ------- | ----------------------- | 1164| 401 | Parameter error. | 1165| 2301022 | Invalid argument. | 1166| 2301088 | Not a socket. | 1167 1168**示例:** 1169 1170```ts 1171import { socket } from '@kit.NetworkKit'; 1172 1173let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1174multicast.setMulticastTTL(8).then(() => { 1175 console.log('set ttl success'); 1176}).catch((err: Object) => { 1177 console.log('set ttl failed'); 1178}); 1179``` 1180 1181### getMulticastTTL<sup>11+</sup> 1182 1183getMulticastTTL(callback: AsyncCallback\<number\>): void; 1184 1185获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。 1186 1187> **说明:** 1188> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1189> 范围为 0~255,默认值为 1 。 1190> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1191> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1192 1193**系统能力**:SystemCapability.Communication.NetStack 1194 1195**参数:** 1196 1197| 参数名 | 类型 | 必填 | 说明 | 1198| ------------- | ----------------------- | ---- | --------------------------- | 1199| callback | AsyncCallback\<number\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1200 1201**错误码:** 1202 1203| 错误码ID | 错误信息 | 1204| ------- | ----------------------- | 1205| 401 | Parameter error. | 1206| 2301088 | Not a socket. | 1207 1208**示例:** 1209 1210```ts 1211import { socket } from '@kit.NetworkKit'; 1212 1213let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1214multicast.getMulticastTTL((err: Object, value: Number) => { 1215 if (err) { 1216 console.log('set ttl fail, err: ' + JSON.stringify(err)); 1217 return; 1218 } 1219 console.log('set ttl success, value: ' + JSON.stringify(value)); 1220}) 1221``` 1222 1223### getMulticastTTL<sup>11+</sup> 1224 1225getMulticastTTL(): Promise\<number\>; 1226 1227获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。 1228 1229> **说明:** 1230> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1231> 范围为 0~255,默认值为 1 。 1232> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1233> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1234 1235**系统能力**:SystemCapability.Communication.NetStack 1236 1237**返回值:** 1238 1239| 类型 | 说明 | 1240| ---------------- | --------------------------- | 1241| Promise\<number\> | 以Promise形式返回当前TTL数值。 | 1242 1243**错误码:** 1244 1245| 错误码ID | 错误信息 | 1246| ------- | ----------------------- | 1247| 401 | Parameter error. | 1248| 2301088 | Not a socket. | 1249 1250**示例:** 1251 1252```ts 1253import { socket } from '@kit.NetworkKit'; 1254 1255let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1256multicast.getMulticastTTL().then((value: Number) => { 1257 console.log('ttl: ', JSON.stringify(value)); 1258}).catch((err: Object) => { 1259 console.log('set ttl failed'); 1260}); 1261``` 1262 1263### setLoopbackMode<sup>11+</sup> 1264 1265setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void; 1266 1267设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1268 1269> **说明:** 1270> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1271> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1272> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1273 1274**系统能力**:SystemCapability.Communication.NetStack 1275 1276**参数:** 1277 1278| 参数名 | 类型 | 必填 | 说明 | 1279| ------------- | --------------------- | ---- | ---------------------------- | 1280| flag | boolean | 是 | ttl设置数值,类型为boolen 。 | 1281| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1282 1283**错误码:** 1284 1285| 错误码ID | 错误信息 | 1286| ------- | ----------------------- | 1287| 401 | Parameter error. | 1288| 2301088 | Not a socket. | 1289 1290**示例:** 1291 1292```ts 1293import { socket } from '@kit.NetworkKit'; 1294 1295let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1296multicast.setLoopbackMode(false, (err: Object) => { 1297 if (err) { 1298 console.log('set loopback mode fail, err: ' + JSON.stringify(err)); 1299 return; 1300 } 1301 console.log('set loopback mode success'); 1302}) 1303``` 1304 1305### setLoopbackMode<sup>11+</sup> 1306 1307setLoopbackMode(flag: boolean): Promise\<void\>; 1308 1309设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1310 1311> **说明:** 1312> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1313> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1314> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1315 1316**系统能力**:SystemCapability.Communication.NetStack 1317 1318**参数:** 1319 1320| 参数名 | 类型 | 必填 | 说明 | 1321| ------------- | ---------------------- | ---- | -------------------------------- | 1322| flag | boolean | 是 | 环回模式标志位,类型为数字boolean。| 1323 1324**返回值:** 1325 1326| 类型 | 说明 | 1327| -------------- | ---------------------------------------------- | 1328| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 | 1329 1330**错误码:** 1331 1332| 错误码ID | 错误信息 | 1333| ------- | ----------------------- | 1334| 401 | Parameter error. | 1335| 2301088 | Not a socket. | 1336 1337**示例:** 1338 1339```ts 1340import { socket } from '@kit.NetworkKit'; 1341 1342let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1343multicast.setLoopbackMode(false).then(() => { 1344 console.log('set loopback mode success'); 1345}).catch((err: Object) => { 1346 console.log('set loopback mode failed'); 1347}); 1348``` 1349 1350### getLoopbackMode<sup>11+</sup> 1351 1352getLoopbackMode(callback: AsyncCallback\<boolean\>): void; 1353 1354获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1355 1356> **说明:** 1357> 用于获取当前环回模式开启或关闭的状态。 1358> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1359> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1360 1361**系统能力**:SystemCapability.Communication.NetStack 1362 1363**参数:** 1364 1365| 参数名 | 类型 | 必填 | 说明 | 1366| ------------- | ----------------------- | ---- | --------------------------- | 1367| callback | AsyncCallback\<number\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1368 1369**错误码:** 1370 1371| 错误码ID | 错误信息 | 1372| ------- | ----------------------- | 1373| 401 | Parameter error. | 1374| 2301088 | Not a socket. | 1375 1376**示例:** 1377 1378```ts 1379import { socket } from '@kit.NetworkKit'; 1380 1381let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1382multicast.getLoopbackMode((err: Object, value: Boolean) => { 1383 if (err) { 1384 console.log('get loopback mode fail, err: ' + JSON.stringify(err)); 1385 return; 1386 } 1387 console.log('get loopback mode success, value: ' + JSON.stringify(value)); 1388}) 1389``` 1390 1391### getLoopbackMode<sup>11+</sup> 1392 1393getLoopbackMode(): Promise\<boolean\>; 1394 1395获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1396 1397> **说明:** 1398> 用于获取当前环回模式开启或关闭的状态。 1399> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1400> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1401 1402**系统能力**:SystemCapability.Communication.NetStack 1403 1404**返回值:** 1405 1406| 类型 | 说明 | 1407| ---------------- | --------------------------- | 1408| Promise\<boolean\> | 以Promise形式返回当前TTL数值。 | 1409 1410**错误码:** 1411 1412| 错误码ID | 错误信息 | 1413| ------- | ----------------------- | 1414| 401 | Parameter error. | 1415| 2301088 | Not a socket. | 1416 1417**示例:** 1418 1419```ts 1420import { socket } from '@kit.NetworkKit'; 1421 1422let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1423multicast.getLoopbackMode().then((value: Boolean) => { 1424 console.log('loopback mode: ', JSON.stringify(value)); 1425}).catch((err: Object) => { 1426 console.log('get loopback mode failed'); 1427}); 1428``` 1429 1430## socket.constructTCPSocketInstance<sup>7+</sup> 1431 1432constructTCPSocketInstance(): TCPSocket 1433 1434创建一个TCPSocket对象。 1435 1436**系统能力**:SystemCapability.Communication.NetStack 1437 1438**返回值:** 1439 1440| 类型 | 说明 | 1441| --------------------------------- | ---------------------- | 1442| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 | 1443 1444**示例:** 1445 1446```ts 1447import { socket } from '@kit.NetworkKit'; 1448let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1449``` 1450 1451## TCPSocket 1452 1453TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。 1454 1455### bind 1456 1457bind(address: NetAddress, callback: AsyncCallback\<void\>): void 1458 1459绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用callback方法作为异步方法。 1460 1461> **说明:** 1462> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1463> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1464> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1465 1466**需要权限**:ohos.permission.INTERNET 1467 1468**系统能力**:SystemCapability.Communication.NetStack 1469 1470**参数:** 1471 1472| 参数名 | 类型 | 必填 | 说明 | 1473| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1474| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1475| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误、错误信息。 | 1476 1477**错误码:** 1478 1479| 错误码ID | 错误信息 | 1480| ------- | ----------------------- | 1481| 401 | Parameter error. | 1482| 201 | Permission denied. | 1483 1484**示例:** 1485 1486```ts 1487import { socket } from '@kit.NetworkKit'; 1488import { BusinessError } from '@kit.BasicServicesKit'; 1489 1490let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1491let bindAddr: socket.NetAddress = { 1492 address: '192.168.xx.xxx', 1493 port: 8080 1494} 1495tcp.bind(bindAddr, (err: BusinessError) => { 1496 if (err) { 1497 console.log('bind fail'); 1498 return; 1499 } 1500 console.log('bind success'); 1501}) 1502``` 1503 1504### bind 1505 1506bind(address: NetAddress): Promise\<void\> 1507 1508绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用Promise方法作为异步方法。 1509 1510> **说明:** 1511> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1512> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1513> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1514 1515**需要权限**:ohos.permission.INTERNET 1516 1517**系统能力**:SystemCapability.Communication.NetStack 1518 1519**参数:** 1520 1521| 参数名 | 类型 | 必填 | 说明 | 1522| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1523| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1524 1525**返回值:** 1526 1527| 类型 | 说明 | 1528| --------------- | ------------------------------------------------------- | 1529| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 | 1530 1531**错误码:** 1532 1533| 错误码ID | 错误信息 | 1534| ------- | ----------------------- | 1535| 401 | Parameter error. | 1536| 201 | Permission denied. | 1537 1538**示例:** 1539 1540```ts 1541import { socket } from '@kit.NetworkKit'; 1542import { BusinessError } from '@kit.BasicServicesKit'; 1543 1544let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1545let bindAddr: socket.NetAddress = { 1546 address: '192.168.xx.xxx', 1547 port: 8080 1548} 1549tcp.bind(bindAddr).then(() => { 1550 console.log('bind success'); 1551}).catch((err: BusinessError) => { 1552 console.log('bind fail'); 1553}); 1554``` 1555 1556### connect 1557 1558connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void 1559 1560连接到指定的IP地址和端口。使用callback方法作为异步方法。 1561 1562> **说明:** 1563> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接 1564 1565**需要权限**:ohos.permission.INTERNET 1566 1567**系统能力**:SystemCapability.Communication.NetStack 1568 1569**参数:** 1570 1571| 参数名 | 类型 | 必填 | 说明 | 1572| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1573| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1574| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1575 1576**错误码:** 1577 1578| 错误码ID | 错误信息 | 1579| ------- | ----------------------- | 1580| 401 | Parameter error. | 1581| 201 | Permission denied. | 1582 1583**示例:** 1584 1585```ts 1586import { socket } from '@kit.NetworkKit'; 1587import { BusinessError } from '@kit.BasicServicesKit'; 1588 1589let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1590let netAddress: socket.NetAddress = { 1591 address: '192.168.xx.xxx', 1592 port: 8080 1593} 1594let tcpconnectoptions: socket.TCPConnectOptions = { 1595 address: netAddress, 1596 timeout: 6000 1597} 1598tcp.connect(tcpconnectoptions, (err: BusinessError) => { 1599 if (err) { 1600 console.log('connect fail'); 1601 return; 1602 } 1603 console.log('connect success'); 1604}) 1605``` 1606 1607### connect 1608 1609connect(options: TCPConnectOptions): Promise\<void\> 1610 1611连接到指定的IP地址和端口。使用promise方法作为异步方法。 1612 1613> **说明:** 1614> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。 1615 1616**需要权限**:ohos.permission.INTERNET 1617 1618**系统能力**:SystemCapability.Communication.NetStack 1619 1620**参数:** 1621 1622| 参数名 | 类型 | 必填 | 说明 | 1623| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1624| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1625 1626**返回值:** 1627 1628| 类型 | 说明 | 1629| -------------- | --------------------------------------------------------- | 1630| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 | 1631 1632**错误码:** 1633 1634| 错误码ID | 错误信息 | 1635| ------- | ----------------------- | 1636| 401 | Parameter error. | 1637| 201 | Permission denied. | 1638 1639**示例:** 1640 1641```ts 1642import { socket } from '@kit.NetworkKit'; 1643import { BusinessError } from '@kit.BasicServicesKit'; 1644 1645let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1646let netAddress: socket.NetAddress = { 1647 address: '192.168.xx.xxx', 1648 port: 8080 1649} 1650let tcpconnectoptions: socket.TCPConnectOptions = { 1651 address: netAddress, 1652 timeout: 6000 1653} 1654tcp.connect(tcpconnectoptions).then(() => { 1655 console.log('connect success') 1656}).catch((err: BusinessError) => { 1657 console.log('connect fail'); 1658}); 1659``` 1660 1661### send 1662 1663send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 1664 1665通过TCPSocket连接发送数据。使用callback方式作为异步方法。 1666 1667> **说明:** 1668> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 1669 1670**需要权限**:ohos.permission.INTERNET 1671 1672**系统能力**:SystemCapability.Communication.NetStack 1673 1674**参数:** 1675 1676| 参数名 | 类型 | 必填 | 说明 | 1677| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 1678| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 1679| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1680 1681**错误码:** 1682 1683| 错误码ID | 错误信息 | 1684| ------- | ----------------------- | 1685| 401 | Parameter error. | 1686| 201 | Permission denied. | 1687 1688**示例:** 1689 1690```ts 1691import { socket } from '@kit.NetworkKit'; 1692import { BusinessError } from '@kit.BasicServicesKit'; 1693 1694let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1695let netAddress: socket.NetAddress = { 1696 address: '192.168.xx.xxx', 1697 port: 8080 1698} 1699let tcpconnectoptions: socket.TCPConnectOptions = { 1700 address: netAddress, 1701 timeout: 6000 1702} 1703tcp.connect(tcpconnectoptions, () => { 1704 console.log('connect success'); 1705 let tcpSendOptions: socket.TCPSendOptions = { 1706 data: 'Hello, server!' 1707 } 1708 tcp.send(tcpSendOptions, (err: BusinessError) => { 1709 if (err) { 1710 console.log('send fail'); 1711 return; 1712 } 1713 console.log('send success'); 1714 }) 1715}) 1716``` 1717 1718### send 1719 1720send(options: TCPSendOptions): Promise\<void\> 1721 1722通过TCPSocket连接发送数据。使用Promise方式作为异步方法。 1723 1724> **说明:** 1725> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 1726 1727**需要权限**:ohos.permission.INTERNET 1728 1729**系统能力**:SystemCapability.Communication.NetStack 1730 1731**参数:** 1732 1733| 参数名 | 类型 | 必填 | 说明 | 1734| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 1735| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 1736 1737**返回值:** 1738 1739| 类型 | 说明 | 1740| -------------- | ------------------------------------------------- | 1741| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 | 1742 1743**错误码:** 1744 1745| 错误码ID | 错误信息 | 1746| ------- | ----------------------- | 1747| 401 | Parameter error. | 1748| 201 | Permission denied. | 1749 1750**示例:** 1751 1752```ts 1753import { socket } from '@kit.NetworkKit'; 1754import { BusinessError } from '@kit.BasicServicesKit'; 1755 1756let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1757let netAddress: socket.NetAddress = { 1758 address: '192.168.xx.xxx', 1759 port: 8080 1760} 1761let tcpconnectoptions: socket.TCPConnectOptions = { 1762 address: netAddress, 1763 timeout: 6000 1764} 1765tcp.connect(tcpconnectoptions, () => { 1766 console.log('connect success'); 1767 let tcpSendOptions: socket.TCPSendOptions = { 1768 data: 'Hello, server!' 1769 } 1770 tcp.send(tcpSendOptions).then(() => { 1771 console.log('send success'); 1772 }).catch((err: BusinessError) => { 1773 console.log('send fail'); 1774 }); 1775}) 1776``` 1777 1778### close 1779 1780close(callback: AsyncCallback\<void\>): void 1781 1782关闭TCPSocket连接。使用callback方式作为异步方法。 1783 1784**需要权限**:ohos.permission.INTERNET 1785 1786**系统能力**:SystemCapability.Communication.NetStack 1787 1788**参数:** 1789 1790| 参数名 | 类型 | 必填 | 说明 | 1791| -------- | --------------------- | ---- | ---------- | 1792| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1793 1794**错误码:** 1795 1796| 错误码ID | 错误信息 | 1797| ------- | ----------------------- | 1798| 201 | Permission denied. | 1799 1800**示例:** 1801 1802```ts 1803import { socket } from '@kit.NetworkKit'; 1804import { BusinessError } from '@kit.BasicServicesKit'; 1805 1806let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1807 1808tcp.close((err: BusinessError) => { 1809 if (err) { 1810 console.log('close fail'); 1811 return; 1812 } 1813 console.log('close success'); 1814}) 1815``` 1816 1817### close 1818 1819close(): Promise\<void\> 1820 1821关闭TCPSocket连接。使用Promise方式作为异步方法。 1822 1823**需要权限**:ohos.permission.INTERNET 1824 1825**系统能力**:SystemCapability.Communication.NetStack 1826 1827**返回值:** 1828 1829| 类型 | 说明 | 1830| -------------- | ----------------------------------------- | 1831| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 | 1832 1833**错误码:** 1834 1835| 错误码ID | 错误信息 | 1836| ------- | ----------------------- | 1837| 201 | Permission denied. | 1838 1839**示例:** 1840 1841```ts 1842import { socket } from '@kit.NetworkKit'; 1843 1844let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1845 1846tcp.close().then(() => { 1847 console.log('close success'); 1848}).catch((err: BusinessError) => { 1849 console.log('close fail'); 1850}); 1851``` 1852 1853### getRemoteAddress 1854 1855getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 1856 1857获取对端Socket地址。使用callback方式作为异步方法。 1858 1859> **说明:** 1860> connect方法调用成功后,才可调用此方法。 1861 1862**需要权限**:ohos.permission.INTERNET 1863 1864**系统能力**:SystemCapability.Communication.NetStack 1865 1866**参数:** 1867 1868| 参数名 | 类型 | 必填 | 说明 | 1869| -------- | ------------------------------------------------- | ---- | ---------- | 1870| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 | 1871 1872**错误码:** 1873 1874| 错误码ID | 错误信息 | 1875| ------- | ----------------------- | 1876| 201 | Permission denied. | 1877 1878**示例:** 1879 1880```ts 1881import { socket } from '@kit.NetworkKit'; 1882import { BusinessError } from '@kit.BasicServicesKit'; 1883 1884let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1885let netAddress: socket.NetAddress = { 1886 address: '192.168.xx.xxx', 1887 port: 8080 1888} 1889let tcpconnectoptions: socket.TCPConnectOptions = { 1890 address: netAddress, 1891 timeout: 6000 1892} 1893tcp.connect(tcpconnectoptions, () => { 1894 console.log('connect success'); 1895 tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 1896 if (err) { 1897 console.log('getRemoteAddressfail'); 1898 return; 1899 } 1900 console.log('getRemoteAddresssuccess:' + JSON.stringify(data)); 1901 }) 1902}); 1903``` 1904 1905### getRemoteAddress 1906 1907getRemoteAddress(): Promise\<NetAddress\> 1908 1909获取对端Socket地址。使用Promise方式作为异步方法。 1910 1911> **说明:** 1912> connect方法调用成功后,才可调用此方法。 1913 1914**需要权限**:ohos.permission.INTERNET 1915 1916**系统能力**:SystemCapability.Communication.NetStack 1917 1918**返回值:** 1919 1920| 类型 | 说明 | 1921| ------------------------------------------ | ------------------------------------------ | 1922| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 1923 1924**错误码:** 1925 1926| 错误码ID | 错误信息 | 1927| ------- | ----------------------- | 1928| 201 | Permission denied. | 1929 1930**示例:** 1931 1932```ts 1933import { socket } from '@kit.NetworkKit'; 1934import { BusinessError } from '@kit.BasicServicesKit'; 1935 1936let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1937let netAddress: socket.NetAddress = { 1938 address: '192.168.xx.xxx', 1939 port: 8080 1940} 1941let tcpconnectoptions: socket.TCPConnectOptions = { 1942 address: netAddress, 1943 timeout: 6000 1944} 1945tcp.connect(tcpconnectoptions).then(() => { 1946 console.log('connect success'); 1947 tcp.getRemoteAddress().then(() => { 1948 console.log('getRemoteAddress success'); 1949 }).catch((err: BusinessError) => { 1950 console.log('getRemoteAddressfail'); 1951 }); 1952}).catch((err: BusinessError) => { 1953 console.log('connect fail'); 1954}); 1955``` 1956 1957### getState 1958 1959getState(callback: AsyncCallback\<SocketStateBase\>): void 1960 1961获取TCPSocket状态。使用callback方式作为异步方法。 1962 1963> **说明:** 1964> bind或connect方法调用成功后,才可调用此方法。 1965 1966**需要权限**:ohos.permission.INTERNET 1967 1968**系统能力**:SystemCapability.Communication.NetStack 1969 1970**参数:** 1971 1972| 参数名 | 类型 | 必填 | 说明 | 1973| -------- | ------------------------------------------------------ | ---- | ---------- | 1974| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 | 1975 1976**错误码:** 1977 1978| 错误码ID | 错误信息 | 1979| ------- | ----------------------- | 1980| 201 | Permission denied. | 1981 1982**示例:** 1983 1984```ts 1985import { socket } from '@kit.NetworkKit'; 1986import { BusinessError } from '@kit.BasicServicesKit'; 1987 1988let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1989let netAddress: socket.NetAddress = { 1990 address: '192.168.xx.xxx', 1991 port: 8080 1992} 1993let tcpconnectoptions: socket.TCPConnectOptions = { 1994 address: netAddress, 1995 timeout: 6000 1996} 1997tcp.connect(tcpconnectoptions, () => { 1998 console.log('connect success'); 1999 tcp.getState((err: BusinessError, data: socket.SocketStateBase) => { 2000 if (err) { 2001 console.log('getState fail'); 2002 return; 2003 } 2004 console.log('getState success:' + JSON.stringify(data)); 2005 }); 2006}); 2007``` 2008 2009### getState 2010 2011getState(): Promise\<SocketStateBase\> 2012 2013获取TCPSocket状态。使用Promise方式作为异步方法。 2014 2015> **说明:** 2016> bind或connect方法调用成功后,才可调用此方法。 2017 2018**需要权限**:ohos.permission.INTERNET 2019 2020**系统能力**:SystemCapability.Communication.NetStack 2021 2022**返回值:** 2023 2024| 类型 | 说明 | 2025| ----------------------------------------------- | ----------------------------------------- | 2026| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 2027 2028**错误码:** 2029 2030| 错误码ID | 错误信息 | 2031| ------- | ----------------------- | 2032| 201 | Permission denied. | 2033 2034**示例:** 2035 2036```ts 2037import { socket } from '@kit.NetworkKit'; 2038import { BusinessError } from '@kit.BasicServicesKit'; 2039 2040let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2041let netAddress: socket.NetAddress = { 2042 address: '192.168.xx.xxx', 2043 port: 8080 2044} 2045let tcpconnectoptions: socket.TCPConnectOptions = { 2046 address: netAddress, 2047 timeout: 6000 2048} 2049tcp.connect(tcpconnectoptions).then(() => { 2050 console.log('connect success'); 2051 tcp.getState().then(() => { 2052 console.log('getState success'); 2053 }).catch((err: BusinessError) => { 2054 console.log('getState fail'); 2055 }); 2056}).catch((err: BusinessError) => { 2057 console.log('connect fail'); 2058}); 2059``` 2060 2061### getSocketFd<sup>10+</sup> 2062 2063getSocketFd(callback: AsyncCallback\<number\>): void 2064 2065获取TCPSocket的文件描述符。使用callback方式作为异步方法。 2066 2067> **说明:** 2068> bind或connect方法调用成功后,才可调用此方法。 2069 2070**系统能力**:SystemCapability.Communication.NetStack 2071 2072**参数:** 2073 2074| 参数名 | 类型 | 必填 | 说明 | 2075| -------- | ------------------------------------------------------ | ---- | ---------- | 2076| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 | 2077 2078**示例:** 2079 2080```ts 2081import { socket } from '@kit.NetworkKit'; 2082import { BusinessError } from '@kit.BasicServicesKit'; 2083 2084let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2085let bindAddr: socket.NetAddress = { 2086 address: '0.0.0.0' 2087} 2088tcp.bind(bindAddr) 2089let netAddress: socket.NetAddress = { 2090 address: '192.168.xx.xxx', 2091 port: 8080 2092} 2093let tcpconnectoptions: socket.TCPConnectOptions = { 2094 address: netAddress, 2095 timeout: 6000 2096} 2097tcp.connect(tcpconnectoptions) 2098tcp.getSocketFd((err: BusinessError, data: number) => { 2099 console.info("getSocketFd failed: " + err); 2100 console.info("tunenlfd: " + data); 2101}) 2102``` 2103### getSocketFd<sup>10+</sup> 2104 2105getSocketFd(): Promise\<number\> 2106 2107获取TCPSocket的文件描述符。使用Promise方式作为异步方法。 2108 2109> **说明:** 2110> bind或connect方法调用成功后,才可调用此方法。 2111 2112**系统能力**:SystemCapability.Communication.NetStack 2113 2114**返回值:** 2115 2116| 类型 | 说明 | 2117| ----------------------------------------------- | ----------------------------------------- | 2118| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 2119 2120**示例:** 2121 2122```ts 2123import { socket } from '@kit.NetworkKit'; 2124import { BusinessError } from '@kit.BasicServicesKit'; 2125 2126let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2127let bindAddr: socket.NetAddress = { 2128 address: '0.0.0.0' 2129} 2130tcp.bind(bindAddr) 2131let netAddress: socket.NetAddress = { 2132 address: '192.168.xx.xxx', 2133 port: 8080 2134} 2135let tcpconnectoptions: socket.TCPConnectOptions = { 2136 address: netAddress, 2137 timeout: 6000 2138} 2139tcp.connect(tcpconnectoptions) 2140tcp.getSocketFd().then((data: number) => { 2141 console.info("tunenlfd: " + data); 2142}) 2143``` 2144 2145### setExtraOptions 2146 2147setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 2148 2149设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 2150 2151> **说明:** 2152> bind或connect方法调用成功后,才可调用此方法。 2153 2154**需要权限**:ohos.permission.INTERNET 2155 2156**系统能力**:SystemCapability.Communication.NetStack 2157 2158**参数:** 2159 2160| 参数名 | 类型 | 必填 | 说明 | 2161| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2162| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2163| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2164 2165**错误码:** 2166 2167| 错误码ID | 错误信息 | 2168| ------- | ----------------------- | 2169| 401 | Parameter error. | 2170| 201 | Permission denied. | 2171 2172**示例:** 2173 2174```ts 2175import { socket } from '@kit.NetworkKit'; 2176import { BusinessError } from '@kit.BasicServicesKit'; 2177 2178let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2179let netAddress: socket.NetAddress = { 2180 address: '192.168.xx.xxx', 2181 port: 8080 2182} 2183let tcpconnectoptions: socket.TCPConnectOptions = { 2184 address: netAddress, 2185 timeout: 6000 2186} 2187 2188interface SocketLinger { 2189 on: boolean; 2190 linger: number; 2191} 2192 2193tcp.connect(tcpconnectoptions, () => { 2194 console.log('connect success'); 2195 let tcpExtraOptions: socket.TCPExtraOptions = { 2196 keepAlive: true, 2197 OOBInline: true, 2198 TCPNoDelay: true, 2199 socketLinger: { on: true, linger: 10 } as SocketLinger, 2200 receiveBufferSize: 1000, 2201 sendBufferSize: 1000, 2202 reuseAddress: true, 2203 socketTimeout: 3000 2204 } 2205 tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 2206 if (err) { 2207 console.log('setExtraOptions fail'); 2208 return; 2209 } 2210 console.log('setExtraOptions success'); 2211 }); 2212}); 2213``` 2214 2215### setExtraOptions 2216 2217setExtraOptions(options: TCPExtraOptions): Promise\<void\> 2218 2219设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 2220 2221> **说明:** 2222> bind或connect方法调用成功后,才可调用此方法。 2223 2224**需要权限**:ohos.permission.INTERNET 2225 2226**系统能力**:SystemCapability.Communication.NetStack 2227 2228**参数:** 2229 2230| 参数名 | 类型 | 必填 | 说明 | 2231| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2232| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2233 2234**返回值:** 2235 2236| 类型 | 说明 | 2237| -------------- | --------------------------------------------------- | 2238| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 | 2239 2240**错误码:** 2241 2242| 错误码ID | 错误信息 | 2243| ------- | ----------------------- | 2244| 401 | Parameter error. | 2245| 201 | Permission denied. | 2246 2247**示例:** 2248 2249```ts 2250import { socket } from '@kit.NetworkKit'; 2251import { BusinessError } from '@kit.BasicServicesKit'; 2252 2253let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2254let netAddress: socket.NetAddress = { 2255 address: '192.168.xx.xxx', 2256 port: 8080 2257} 2258let tcpconnectoptions: socket.TCPConnectOptions = { 2259 address: netAddress, 2260 timeout: 6000 2261} 2262 2263interface SocketLinger { 2264 on: boolean; 2265 linger: number; 2266} 2267 2268tcp.connect(tcpconnectoptions, () => { 2269 console.log('connect success'); 2270 let tcpExtraOptions: socket.TCPExtraOptions = { 2271 keepAlive: true, 2272 OOBInline: true, 2273 TCPNoDelay: true, 2274 socketLinger: { on: true, linger: 10 } as SocketLinger, 2275 receiveBufferSize: 1000, 2276 sendBufferSize: 1000, 2277 reuseAddress: true, 2278 socketTimeout: 3000 2279 } 2280 tcp.setExtraOptions(tcpExtraOptions).then(() => { 2281 console.log('setExtraOptions success'); 2282 }).catch((err: BusinessError) => { 2283 console.log('setExtraOptions fail'); 2284 }); 2285}); 2286``` 2287 2288### getLocalAddress<sup>12+</sup> 2289 2290getLocalAddress(): Promise\<NetAddress\> 2291 2292获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。 2293 2294> **说明:** 2295> bind方法调用成功后,才可调用此方法。 2296 2297**系统能力**:SystemCapability.Communication.NetStack 2298 2299**返回值:** 2300 2301| 类型 | 说明 | 2302| -------------- | --------------------------------------------------- | 2303| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 2304 2305**错误码:** 2306 2307| 错误码ID | 错误信息 | 2308| -------- | ------------------------------------------- | 2309| 2300002 | System internal error. | 2310| 2301009 | Bad file descriptor. | 2311| 2303188 | Socket operation on non-socket. | 2312 2313**示例:** 2314 2315```ts 2316import { socket } from '@kit.NetworkKit'; 2317import { BusinessError } from '@kit.BasicServicesKit'; 2318 2319let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2320let bindAddr: socket.NetAddress = { 2321 address: '192.168.xx.xxx', 2322 family: 1, 2323 port: 8080 2324} 2325tcp.bind(bindAddr).then(() => { 2326 tcp.getLocalAddress().then((localAddress: socket.NetAddress) => { 2327 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 2328 }).catch((err: BusinessError) => { 2329 console.error("FAILED! Error:" + JSON.stringify(err)); 2330 }) 2331}).catch((err: BusinessError) => { 2332 console.error('bind fail'); 2333}); 2334``` 2335 2336### on('message') 2337 2338on(type: 'message', callback: Callback<SocketMessageInfo\>): void 2339 2340订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2341 2342**系统能力**:SystemCapability.Communication.NetStack 2343 2344**参数:** 2345 2346| 参数名 | 类型 | 必填 | 说明 | 2347| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2348| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 2349| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回TCPSocket连接信息。 | 2350 2351**示例:** 2352 2353```ts 2354import { socket } from '@kit.NetworkKit'; 2355import { BusinessError } from '@kit.BasicServicesKit'; 2356 2357let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2358let messageView = ''; 2359tcp.on('message', (value: socket.SocketMessageInfo) => { 2360 for (let i: number = 0; i < value.message.byteLength; i++) { 2361 let uint8Array = new Uint8Array(value.message) 2362 let messages = uint8Array[i] 2363 let message = String.fromCharCode(messages); 2364 messageView += message; 2365 } 2366 console.log('on message message: ' + JSON.stringify(messageView)); 2367 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2368}); 2369``` 2370 2371### off('message') 2372 2373off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 2374 2375取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2376 2377**系统能力**:SystemCapability.Communication.NetStack 2378 2379**参数:** 2380 2381| 参数名 | 类型 | 必填 | 说明 | 2382| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2383| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 2384| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。取消订阅TCPSocket连接的接收消息事件时触发回调函数。 | 2385 2386**示例:** 2387 2388```ts 2389import { socket } from '@kit.NetworkKit'; 2390import { BusinessError } from '@kit.BasicServicesKit'; 2391 2392let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2393let messageView = ''; 2394let callback = (value: socket.SocketMessageInfo) => { 2395 for (let i: number = 0; i < value.message.byteLength; i++) { 2396 let uint8Array = new Uint8Array(value.message) 2397 let messages = uint8Array[i] 2398 let message = String.fromCharCode(messages); 2399 messageView += message; 2400 } 2401 console.log('on message message: ' + JSON.stringify(messageView)); 2402 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2403} 2404tcp.on('message', callback); 2405// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2406tcp.off('message', callback); 2407tcp.off('message'); 2408``` 2409 2410### on('connect' | 'close') 2411 2412on(type: 'connect' | 'close', callback: Callback\<void\>): void 2413 2414订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2415 2416**系统能力**:SystemCapability.Communication.NetStack 2417 2418**参数:** 2419 2420| 参数名 | 类型 | 必填 | 说明 | 2421| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2422| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2423| callback | Callback\<void\> | 是 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | 2424 2425**示例:** 2426 2427```ts 2428import { socket } from '@kit.NetworkKit'; 2429import { BusinessError } from '@kit.BasicServicesKit'; 2430 2431let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2432tcp.on('connect', () => { 2433 console.log("on connect success") 2434}); 2435tcp.on('close', () => { 2436 console.log("on close success") 2437}); 2438``` 2439 2440### off('connect' | 'close') 2441 2442off(type: 'connect' | 'close', callback?: Callback\<void\>): void 2443 2444取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2445 2446**系统能力**:SystemCapability.Communication.NetStack 2447 2448**参数:** 2449 2450| 参数名 | 类型 | 必填 | 说明 | 2451| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2452| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2453| callback | Callback\<void\> | 否 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | 2454 2455**示例:** 2456 2457```ts 2458import { socket } from '@kit.NetworkKit'; 2459import { BusinessError } from '@kit.BasicServicesKit'; 2460 2461let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2462let callback1 = () => { 2463 console.log("on connect success"); 2464} 2465tcp.on('connect', callback1); 2466// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2467tcp.off('connect', callback1); 2468tcp.off('connect'); 2469let callback2 = () => { 2470 console.log("on close success"); 2471} 2472tcp.on('close', callback2); 2473// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2474tcp.off('close', callback2); 2475tcp.off('close'); 2476``` 2477 2478### on('error') 2479 2480on(type: 'error', callback: ErrorCallback): void 2481 2482订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2483 2484**系统能力**:SystemCapability.Communication.NetStack 2485 2486**参数:** 2487 2488| 参数名 | 类型 | 必填 | 说明 | 2489| -------- | ------------- | ---- | ------------------------------------ | 2490| type | string | 是 | 订阅的事件类型。'error':error事件。 | 2491| callback | ErrorCallback | 是 | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。 | 2492 2493**示例:** 2494 2495```ts 2496import { socket } from '@kit.NetworkKit'; 2497import { BusinessError } from '@kit.BasicServicesKit'; 2498 2499let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2500tcp.on('error', (err: BusinessError) => { 2501 console.log("on error, err:" + JSON.stringify(err)) 2502}); 2503``` 2504 2505### off('error') 2506 2507off(type: 'error', callback?: ErrorCallback): void 2508 2509取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2510 2511**系统能力**:SystemCapability.Communication.NetStack 2512 2513**参数:** 2514 2515| 参数名 | 类型 | 必填 | 说明 | 2516| -------- | ------------- | ---- | ------------------------------------ | 2517| type | string | 是 | 订阅的事件类型。'error':error事件。 | 2518| callback | ErrorCallback | 否 | 回调函数。TCPSocket连接取消订阅的某类error事件触发时调用回调函数。 | 2519 2520**示例:** 2521 2522```ts 2523import { socket } from '@kit.NetworkKit'; 2524import { BusinessError } from '@kit.BasicServicesKit'; 2525 2526let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2527let callback = (err: BusinessError) => { 2528 console.log("on error, err:" + JSON.stringify(err)); 2529} 2530tcp.on('error', callback); 2531// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2532tcp.off('error', callback); 2533tcp.off('error'); 2534``` 2535 2536## TCPConnectOptions 2537 2538TCPSocket连接的参数。 2539 2540**系统能力**:SystemCapability.Communication.NetStack 2541 2542| 名称 | 类型 | 必填 | 说明 | 2543| ------- | ---------------------------------- | ---- | -------------------------- | 2544| address | [NetAddress](#netaddress) | 是 | 绑定的地址以及端口。 | 2545| timeout | number | 否 | 超时时间,单位毫秒(ms)。 | 2546 2547## TCPSendOptions 2548 2549TCPSocket发送请求的参数。 2550 2551**系统能力**:SystemCapability.Communication.NetStack 2552 2553| 名称 | 类型 | 必填 | 说明 | 2554| -------- | ------ | ---- | ------------------------------------------------------------ | 2555| data | string\| ArrayBuffer | 是 | 发送的数据。 | 2556| encoding | string | 否 | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 | 2557 2558## TCPExtraOptions 2559 2560TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 2561 2562**系统能力**:SystemCapability.Communication.NetStack 2563 2564| 名称 | 类型 | 必填 | 说明 | 2565| ----------------- | ------- | ---- | ------------------------------------------------------------ | 2566| keepAlive | boolean | 否 | 是否保持连接。默认为false。 | 2567| OOBInline | boolean | 否 | 是否为OOB内联。默认为false。 | 2568| TCPNoDelay | boolean | 否 | TCPSocket连接是否无时延。默认为false。 | 2569| socketLinger | \{on:boolean, linger:number\} | 否 | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 | 2570 2571## socket.constructTCPSocketServerInstance<sup>10+</sup> 2572 2573constructTCPSocketServerInstance(): TCPSocketServer 2574 2575创建一个TCPSocketServer对象。 2576 2577**系统能力**:SystemCapability.Communication.NetStack 2578 2579**返回值:** 2580 2581| 类型 | 说明 | 2582| ---------------------------------- | ---------------------------- | 2583| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 | 2584 2585**示例:** 2586 2587```ts 2588import { socket } from '@kit.NetworkKit'; 2589let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2590``` 2591 2592## TCPSocketServer<sup>10+</sup> 2593 2594TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。 2595 2596### listen<sup>10+</sup> 2597 2598listen(address: NetAddress, callback: AsyncCallback\<void\>): void 2599 2600绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。 2601 2602> **说明:** 2603> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2604 2605**需要权限**:ohos.permission.INTERNET 2606 2607**系统能力**:SystemCapability.Communication.NetStack 2608 2609**参数:** 2610 2611| 参数名 | 类型 | 必填 | 说明 | 2612| -------- | ------------------------- | ---- | --------------------------------------------- | 2613| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2614| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2615 2616**错误码:** 2617 2618| 错误码ID | 错误信息 | 2619| -------- | ------------------------------------------- | 2620| 401 | Parameter error. | 2621| 201 | Permission denied. | 2622| 2300002 | System internal error. | 2623| 2303109 | Bad file number. | 2624| 2303111 | Resource temporarily unavailable. Try again.| 2625| 2303198 | Address already in use. | 2626| 2303199 | Cannot assign requested address. | 2627 2628**示例:** 2629 2630```ts 2631import { socket } from '@kit.NetworkKit'; 2632import { BusinessError } from '@kit.BasicServicesKit'; 2633 2634let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2635let listenAddr: socket.NetAddress = { 2636 address: '192.168.xx.xxx', 2637 port: 8080, 2638 family: 1 2639} 2640tcpServer.listen(listenAddr, (err: BusinessError) => { 2641 if (err) { 2642 console.log("listen fail"); 2643 return; 2644 } 2645 console.log("listen success"); 2646}) 2647``` 2648 2649### listen<sup>10+</sup> 2650 2651listen(address: NetAddress): Promise\<void\> 2652 2653绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 2654 2655> **说明:** 2656> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2657 2658**需要权限**:ohos.permission.INTERNET 2659 2660**系统能力**:SystemCapability.Communication.NetStack 2661 2662**参数:** 2663 2664| 参数名 | 类型 | 必填 | 说明 | 2665| ------- | ------------------------- | ---- | --------------------------------------------- | 2666| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2667 2668**返回值:** 2669 2670| 类型 | 说明 | 2671| -------------- | ----------------------------------------------------------- | 2672| Promise\<void\> | 以Promise形式返回, 成功返回空,失败返回错误码错误信息。| 2673 2674**错误码:** 2675 2676| 错误码ID | 错误信息 | 2677| -------- | ------------------------------------------- | 2678| 401 | Parameter error. | 2679| 201 | Permission denied. | 2680| 2300002 | System internal error. | 2681| 2303109 | Bad file number. | 2682| 2303111 | Resource temporarily unavailable. Try again.| 2683| 2303198 | Address already in use. | 2684| 2303199 | Cannot assign requested address. | 2685 2686**示例:** 2687 2688```ts 2689import { socket } from '@kit.NetworkKit'; 2690import { BusinessError } from '@kit.BasicServicesKit'; 2691 2692let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2693let listenAddr: socket.NetAddress = { 2694 address: '192.168.xx.xxx', 2695 port: 8080, 2696 family: 1 2697} 2698tcpServer.listen(listenAddr).then(() => { 2699 console.log('listen success'); 2700}).catch((err: BusinessError) => { 2701 console.log('listen fail'); 2702}); 2703``` 2704 2705### getState<sup>10+</sup> 2706 2707getState(callback: AsyncCallback\<SocketStateBase\>): void 2708 2709获取TCPSocketServer状态。使用callback方式作为异步方法。 2710 2711> **说明:** 2712> listen方法调用成功后,才可调用此方法。 2713 2714**需要权限**:ohos.permission.INTERNET 2715 2716**系统能力**:SystemCapability.Communication.NetStack 2717 2718**参数:** 2719 2720| 参数名 | 类型 | 必填 | 说明 | 2721| -------- | -------------------------------------------------- | ---- | ---------- | 2722| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2723 2724**错误码:** 2725 2726| 错误码ID | 错误信息 | 2727| -------- | ------------------------------- | 2728| 401 | Parameter error. | 2729| 201 | Permission denied. | 2730| 2300002 | System internal error. | 2731| 2303188 | Socket operation on non-socket. | 2732 2733**示例:** 2734 2735```ts 2736import { socket } from '@kit.NetworkKit'; 2737import { BusinessError } from '@kit.BasicServicesKit'; 2738 2739let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2740let listenAddr: socket.NetAddress = { 2741 address: '192.168.xx.xxx', 2742 port: 8080, 2743 family: 1 2744} 2745tcpServer.listen(listenAddr, (err: BusinessError) => { 2746 if (err) { 2747 console.log("listen fail"); 2748 return; 2749 } 2750 console.log("listen success"); 2751}) 2752tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 2753 if (err) { 2754 console.log('getState fail'); 2755 return; 2756 } 2757 console.log('getState success:' + JSON.stringify(data)); 2758}) 2759``` 2760 2761### getState<sup>10+</sup> 2762 2763getState(): Promise\<SocketStateBase\> 2764 2765获取TCPSocketServer状态。使用Promise方式作为异步方法。 2766 2767> **说明:** 2768> listen方法调用成功后,才可调用此方法。 2769 2770**需要权限**:ohos.permission.INTERNET 2771 2772**系统能力**:SystemCapability.Communication.NetStack 2773 2774**返回值:** 2775 2776| 类型 | 说明 | 2777| ------------------------------------------- | ----------------------------------------- | 2778| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 2779 2780**错误码:** 2781 2782| 错误码ID | 错误信息 | 2783| -------- | ------------------------------- | 2784| 201 | Permission denied. | 2785| 2300002 | System internal error. | 2786| 2303188 | Socket operation on non-socket. | 2787 2788**示例:** 2789 2790```ts 2791import { socket } from '@kit.NetworkKit'; 2792import { BusinessError } from '@kit.BasicServicesKit'; 2793 2794let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2795let listenAddr: socket.NetAddress = { 2796 address: '192.168.xx.xxx', 2797 port: 8080, 2798 family: 1 2799} 2800tcpServer.listen(listenAddr, (err: BusinessError) => { 2801 if (err) { 2802 console.log("listen fail"); 2803 return; 2804 } 2805 console.log("listen success"); 2806}) 2807tcpServer.getState().then((data: socket.SocketStateBase) => { 2808 console.log('getState success' + JSON.stringify(data)); 2809}).catch((err: BusinessError) => { 2810 console.log('getState fail'); 2811}); 2812``` 2813 2814### setExtraOptions<sup>10+</sup> 2815 2816setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 2817 2818设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。 2819 2820> **说明:** 2821> listen方法调用成功后,才可调用此方法。 2822 2823**需要权限**:ohos.permission.INTERNET 2824 2825**系统能力**:SystemCapability.Communication.NetStack 2826 2827**参数:** 2828 2829| 参数名 | 类型 | 必填 | 说明 | 2830| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 2831| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 2832| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2833 2834**错误码:** 2835 2836| 错误码ID | 错误信息 | 2837| -------- | ------------------------------- | 2838| 401 | Parameter error. | 2839| 201 | Permission denied. | 2840| 2300002 | System internal error. | 2841| 2303188 | Socket operation on non-socket. | 2842 2843**示例:** 2844 2845```ts 2846import { socket } from '@kit.NetworkKit'; 2847import { BusinessError } from '@kit.BasicServicesKit'; 2848 2849let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2850let listenAddr: socket.NetAddress = { 2851 address: '192.168.xx.xxx', 2852 port: 8080, 2853 family: 1 2854} 2855tcpServer.listen(listenAddr, (err: BusinessError) => { 2856 if (err) { 2857 console.log("listen fail"); 2858 return; 2859 } 2860 console.log("listen success"); 2861}) 2862 2863interface SocketLinger { 2864 on: boolean; 2865 linger: number; 2866} 2867 2868let tcpExtraOptions: socket.TCPExtraOptions = { 2869 keepAlive: true, 2870 OOBInline: true, 2871 TCPNoDelay: true, 2872 socketLinger: { on: true, linger: 10 } as SocketLinger, 2873 receiveBufferSize: 1000, 2874 sendBufferSize: 1000, 2875 reuseAddress: true, 2876 socketTimeout: 3000 2877} 2878tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 2879 if (err) { 2880 console.log('setExtraOptions fail'); 2881 return; 2882 } 2883 console.log('setExtraOptions success'); 2884}); 2885``` 2886 2887### setExtraOptions<sup>10+</sup> 2888 2889setExtraOptions(options: TCPExtraOptions): Promise\<void\> 2890 2891设置TCPSocketServer连接的其他属性,使用Promise方式作为异步方法。 2892 2893> **说明:** 2894> listen方法调用成功后,才可调用此方法。 2895 2896**需要权限**:ohos.permission.INTERNET 2897 2898**系统能力**:SystemCapability.Communication.NetStack 2899 2900**参数:** 2901 2902| 参数名 | 类型 | 必填 | 说明 | 2903| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 2904| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 2905 2906**返回值:** 2907 2908| 类型 | 说明 | 2909| -------------- | --------------------------------------------------------- | 2910| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 2911 2912**错误码:** 2913 2914| 错误码ID | 错误信息 | 2915| -------- | ------------------------------- | 2916| 401 | Parameter error. | 2917| 201 | Permission denied. | 2918| 2300002 | System internal error. | 2919| 2303188 | Socket operation on non-socket. | 2920 2921**示例:** 2922 2923```ts 2924import { socket } from '@kit.NetworkKit'; 2925import { BusinessError } from '@kit.BasicServicesKit'; 2926 2927let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2928let listenAddr: socket.NetAddress = { 2929 address: '192.168.xx.xxx', 2930 port: 8080, 2931 family: 1 2932} 2933 2934interface SocketLinger { 2935 on: boolean; 2936 linger: number; 2937} 2938 2939tcpServer.listen(listenAddr, (err: BusinessError) => { 2940 if (err) { 2941 console.log("listen fail"); 2942 return; 2943 } 2944 console.log("listen success"); 2945}) 2946 2947let tcpExtraOptions: socket.TCPExtraOptions = { 2948 keepAlive: true, 2949 OOBInline: true, 2950 TCPNoDelay: true, 2951 socketLinger: { on: true, linger: 10 } as SocketLinger, 2952 receiveBufferSize: 1000, 2953 sendBufferSize: 1000, 2954 reuseAddress: true, 2955 socketTimeout: 3000 2956} 2957tcpServer.setExtraOptions(tcpExtraOptions).then(() => { 2958 console.log('setExtraOptions success'); 2959}).catch((err: BusinessError) => { 2960 console.log('setExtraOptions fail'); 2961}); 2962``` 2963 2964### getLocalAddress<sup>12+</sup> 2965 2966getLocalAddress(): Promise\<NetAddress\> 2967 2968获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。 2969 2970> **说明:** 2971> listen方法调用成功后,才可调用此方法。 2972 2973**系统能力**:SystemCapability.Communication.NetStack 2974 2975**返回值:** 2976 2977| 类型 | 说明 | 2978| -------------- | --------------------------------------------------- | 2979| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 2980 2981**错误码:** 2982 2983| 错误码ID | 错误信息 | 2984| -------- | ------------------------------------------- | 2985| 2300002 | System internal error. | 2986| 2301009 | Bad file descriptor. | 2987| 2303188 | Socket operation on non-socket. | 2988 2989**示例:** 2990 2991```ts 2992import { socket } from '@kit.NetworkKit'; 2993import { BusinessError } from '@kit.BasicServicesKit'; 2994 2995let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2996let listenAddr: socket.NetAddress = { 2997 address: '192.168.xx.xxx', 2998 port: 8080, 2999 family: 1 3000} 3001tcpServer.listen(listenAddr).then(() => { 3002 tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 3003 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 3004 }).catch((err: BusinessError) => { 3005 console.error("FerrorAILED! Error:" + JSON.stringify(err)); 3006 }) 3007}).catch((err: BusinessError) => { 3008 console.error('listen fail'); 3009}); 3010``` 3011 3012### on('connect')<sup>10+</sup> 3013 3014on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void 3015 3016订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3017 3018> **说明:** 3019> listen方法调用成功后,才可调用此方法。 3020 3021**系统能力**:SystemCapability.Communication.NetStack 3022 3023**参数:** 3024 3025| 参数名 | 类型 | 必填 | 说明 | 3026| -------- | ------------------------------- | ---- | ------------------------------------- | 3027| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 3028| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3029 3030**错误码:** 3031 3032| 错误码ID | 错误信息 | 3033| -------- | ---------------- | 3034| 401 | Parameter error. | 3035 3036**示例:** 3037 3038```ts 3039import { socket } from '@kit.NetworkKit'; 3040 3041let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3042 3043let listenAddr: socket.NetAddress = { 3044 address: '192.168.xx.xxx', 3045 port: 8080, 3046 family: 1 3047} 3048tcpServer.listen(listenAddr, (err: BusinessError) => { 3049 if (err) { 3050 console.log("listen fail"); 3051 return; 3052 } 3053 console.log("listen success"); 3054 tcpServer.on('connect', (data: socket.TCPSocketConnection) => { 3055 console.log(JSON.stringify(data)) 3056 }); 3057}) 3058``` 3059 3060### off('connect')<sup>10+</sup> 3061 3062off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void 3063 3064取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3065 3066**系统能力**:SystemCapability.Communication.NetStack 3067 3068**参数:** 3069 3070| 参数名 | 类型 | 必填 | 说明 | 3071| -------- | ------------------------------- | ---- | ------------------------------------- | 3072| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 3073| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3074 3075**错误码:** 3076 3077| 错误码ID | 错误信息 | 3078| -------- | ---------------- | 3079| 401 | Parameter error. | 3080 3081**示例:** 3082 3083```ts 3084import { socket } from '@kit.NetworkKit'; 3085 3086let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3087 3088let listenAddr: socket.NetAddress = { 3089 address: '192.168.xx.xxx', 3090 port: 8080, 3091 family: 1 3092} 3093tcpServer.listen(listenAddr, (err: BusinessError) => { 3094 if (err) { 3095 console.log("listen fail"); 3096 return; 3097 } 3098 console.log("listen success"); 3099 let callback = (data: socket.TCPSocketConnection) => { 3100 console.log('on connect message: ' + JSON.stringify(data)); 3101 } 3102 tcpServer.on('connect', callback); 3103 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3104 tcpServer.off('connect', callback); 3105 tcpServer.off('connect'); 3106}) 3107``` 3108 3109### on('error')<sup>10+</sup> 3110 3111on(type: 'error', callback: ErrorCallback): void 3112 3113订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3114 3115> **说明:** 3116> listen方法调用成功后,才可调用此方法。 3117 3118**系统能力**:SystemCapability.Communication.NetStack 3119 3120**参数:** 3121 3122| 参数名 | 类型 | 必填 | 说明 | 3123| -------- | ------------- | ---- | ------------------------------------ | 3124| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3125| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。| 3126 3127**错误码:** 3128 3129| 错误码ID | 错误信息 | 3130| -------- | ---------------- | 3131| 401 | Parameter error. | 3132 3133**示例:** 3134 3135```ts 3136import { socket } from '@kit.NetworkKit'; 3137import { BusinessError } from '@kit.BasicServicesKit'; 3138 3139let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3140 3141let listenAddr: socket.NetAddress = { 3142 address: '192.168.xx.xxx', 3143 port: 8080, 3144 family: 1 3145} 3146tcpServer.listen(listenAddr, (err: BusinessError) => { 3147 if (err) { 3148 console.log("listen fail"); 3149 return; 3150 } 3151 console.log("listen success"); 3152 tcpServer.on('error', (err: BusinessError) => { 3153 console.log("on error, err:" + JSON.stringify(err)) 3154 }); 3155}) 3156``` 3157 3158### off('error')<sup>10+</sup> 3159 3160off(type: 'error', callback?: ErrorCallback): void 3161 3162取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3163 3164**系统能力**:SystemCapability.Communication.NetStack 3165 3166**参数:** 3167 3168| 参数名 | 类型 | 必填 | 说明 | 3169| -------- | ------------- | ---- | ------------------------------------ | 3170| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3171| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 3172 3173**错误码:** 3174 3175| 错误码ID | 错误信息 | 3176| -------- | ---------------- | 3177| 401 | Parameter error. | 3178 3179**示例:** 3180 3181```ts 3182import { socket } from '@kit.NetworkKit'; 3183import { BusinessError } from '@kit.BasicServicesKit'; 3184 3185let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3186 3187let listenAddr: socket.NetAddress = { 3188 address: '192.168.xx.xxx', 3189 port: 8080, 3190 family: 1 3191} 3192tcpServer.listen(listenAddr, (err: BusinessError) => { 3193 if (err) { 3194 console.log("listen fail"); 3195 return; 3196 } 3197 console.log("listen success"); 3198 let callback = (err: BusinessError) => { 3199 console.log("on error, err:" + JSON.stringify(err)); 3200 } 3201 tcpServer.on('error', callback); 3202 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3203 tcpServer.off('error', callback); 3204 tcpServer.off('error'); 3205}) 3206``` 3207 3208## TCPSocketConnection<sup>10+</sup> 3209 3210TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。 3211 3212> **说明:** 3213> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。 3214 3215**系统能力**:SystemCapability.Communication.NetStack 3216 3217### 属性 3218 3219| 名称 | 类型 | 必填 | 说明 | 3220| -------- | ------ | ---- | ----------------------------------------- | 3221| clientId | number | 是 | 客户端与TCPSocketServer建立连接的id。 | 3222 3223### send<sup>10+</sup> 3224 3225send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 3226 3227通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。 3228 3229> **说明:** 3230> 与客户端建立连接后,才可调用此方法。 3231 3232**需要权限**:ohos.permission.INTERNET 3233 3234**系统能力**:SystemCapability.Communication.NetStack 3235 3236**参数:** 3237 3238| 参数名 | 类型 | 必填 | 说明 | 3239| -------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3240| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3241| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3242 3243**错误码:** 3244 3245| 错误码ID | 错误信息 | 3246| -------- | ---------------------- | 3247| 401 | Parameter error. | 3248| 201 | Permission denied. | 3249| 2300002 | System internal error. | 3250 3251**示例:** 3252 3253```ts 3254import { socket } from '@kit.NetworkKit'; 3255 3256let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3257 3258tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3259 let tcpSendOption: socket.TCPSendOptions = { 3260 data: 'Hello, client!' 3261 } 3262 client.send(tcpSendOption, () => { 3263 console.log('send success'); 3264 }); 3265}); 3266``` 3267 3268### send<sup>10+</sup> 3269 3270send(options: TCPSendOptions): Promise\<void\> 3271 3272通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。 3273 3274> **说明:** 3275> 与客户端建立连接后,才可调用此方法。 3276 3277**需要权限**:ohos.permission.INTERNET 3278 3279**系统能力**:SystemCapability.Communication.NetStack 3280 3281**参数:** 3282 3283| 参数名 | 类型 | 必填 | 说明 | 3284| ------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3285| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3286 3287**返回值:** 3288 3289| 类型 | 说明 | 3290| -------------- | ----------------------------------------------------------- | 3291| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 3292 3293**错误码:** 3294 3295| 错误码ID | 错误信息 | 3296| -------- | ---------------------- | 3297| 401 | Parameter error. | 3298| 201 | Permission denied. | 3299| 2300002 | System internal error. | 3300 3301**示例:** 3302 3303```ts 3304import { socket } from '@kit.NetworkKit'; 3305import { BusinessError } from '@kit.BasicServicesKit'; 3306 3307let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3308 3309tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3310 let tcpSendOption: socket.TCPSendOptions = { 3311 data: 'Hello, client!' 3312 } 3313 client.send(tcpSendOption).then(() => { 3314 console.log('send success'); 3315 }).catch((err: BusinessError) => { 3316 console.log('send fail'); 3317 }); 3318}); 3319``` 3320 3321### close<sup>10+</sup> 3322 3323close(callback: AsyncCallback\<void\>): void 3324 3325关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。 3326 3327**需要权限**:ohos.permission.INTERNET 3328 3329**系统能力**:SystemCapability.Communication.NetStack 3330 3331**参数:** 3332 3333| 参数名 | 类型 | 必填 | 说明 | 3334| -------- | --------------------- | ---- | ---------- | 3335| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3336 3337**错误码:** 3338 3339| 错误码ID | 错误信息 | 3340| -------- | ---------------------- | 3341| 401 | Parameter error. | 3342| 201 | Permission denied. | 3343| 2300002 | System internal error. | 3344 3345**示例:** 3346 3347```ts 3348import { socket } from '@kit.NetworkKit'; 3349import { BusinessError } from '@kit.BasicServicesKit'; 3350 3351let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3352 3353tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3354 client.close((err: BusinessError) => { 3355 if (err) { 3356 console.log('close fail'); 3357 return; 3358 } 3359 console.log('close success'); 3360 }); 3361}); 3362``` 3363 3364### close<sup>10+</sup> 3365 3366close(): Promise\<void\> 3367 3368关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。 3369 3370**需要权限**:ohos.permission.INTERNET 3371 3372**系统能力**:SystemCapability.Communication.NetStack 3373 3374**返回值:** 3375 3376| 类型 | 说明 | 3377| -------------- | ------------------------------------------- | 3378| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 3379 3380**错误码:** 3381 3382| 错误码ID | 错误信息 | 3383| -------- | ---------------------- | 3384| 201 | Permission denied. | 3385| 2300002 | System internal error. | 3386 3387**示例:** 3388 3389```ts 3390import { socket } from '@kit.NetworkKit'; 3391 3392let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3393tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3394 client.close().then(() => { 3395 console.log('close success'); 3396 }).catch((err: BusinessError) => { 3397 console.log('close fail'); 3398 }); 3399}); 3400``` 3401 3402### getRemoteAddress<sup>10+</sup> 3403 3404getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 3405 3406获取对端Socket地址。使用callback方式作为异步方法。 3407 3408> **说明:** 3409> 与客户端建立连接后,才可调用此方法。 3410 3411**需要权限**:ohos.permission.INTERNET 3412 3413**系统能力**:SystemCapability.Communication.NetStack 3414 3415**参数:** 3416 3417| 参数名 | 类型 | 必填 | 说明 | 3418| -------- | ---------------------------------------- | ---- | ---------- | 3419| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3420 3421**错误码:** 3422 3423| 错误码ID | 错误信息 | 3424| -------- | ------------------------------- | 3425| 401 | Parameter error. | 3426| 201 | Permission denied. | 3427| 2300002 | System internal error. | 3428| 2303188 | Socket operation on non-socket. | 3429 3430**示例:** 3431 3432```ts 3433import { socket } from '@kit.NetworkKit'; 3434import { BusinessError } from '@kit.BasicServicesKit'; 3435 3436let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3437tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3438 client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 3439 if (err) { 3440 console.log('getRemoteAddress fail'); 3441 return; 3442 } 3443 console.log('getRemoteAddress success:' + JSON.stringify(data)); 3444 }); 3445}); 3446``` 3447 3448### getRemoteAddress<sup>10+</sup> 3449 3450getRemoteAddress(): Promise\<NetAddress\> 3451 3452获取对端Socket地址。使用Promise方式作为异步方法。 3453 3454> **说明:** 3455> 与客户端建立连接后,才可调用此方法。 3456 3457**需要权限**:ohos.permission.INTERNET 3458 3459**系统能力**:SystemCapability.Communication.NetStack 3460 3461**返回值:** 3462 3463| 类型 | 说明 | 3464| --------------------------------- | ------------------------------------------ | 3465| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 3466 3467**错误码:** 3468 3469| 错误码ID | 错误信息 | 3470| -------- | ------------------------------- | 3471| 201 | Permission denied. | 3472| 2300002 | System internal error. | 3473| 2303188 | Socket operation on non-socket. | 3474 3475**示例:** 3476 3477```ts 3478import { socket } from '@kit.NetworkKit'; 3479import { BusinessError } from '@kit.BasicServicesKit'; 3480 3481let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3482tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3483 client.getRemoteAddress().then(() => { 3484 console.log('getRemoteAddress success'); 3485 }).catch((err: BusinessError) => { 3486 console.log('getRemoteAddress fail'); 3487 }); 3488}); 3489``` 3490 3491### getLocalAddress<sup>12+</sup> 3492 3493getLocalAddress(): Promise\<NetAddress\> 3494 3495获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 3496 3497**系统能力**:SystemCapability.Communication.NetStack 3498 3499**返回值:** 3500 3501| 类型 | 说明 | 3502| -------------- | --------------------------------------------------- | 3503| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 3504 3505**错误码:** 3506 3507| 错误码ID | 错误信息 | 3508| -------- | ------------------------------------------- | 3509| 2300002 | System internal error. | 3510| 2301009 | Bad file descriptor. | 3511| 2303188 | Socket operation on non-socket. | 3512 3513**示例:** 3514 3515```ts 3516import { socket } from '@kit.NetworkKit'; 3517import { BusinessError } from '@kit.BasicServicesKit'; 3518 3519let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3520let listenAddr: socket.NetAddress = { 3521 address: "192.168.xx.xx", 3522 port: 8080, 3523 family: 1 3524} 3525tcpServer.listen(listenAddr, (err: BusinessError) => { 3526 let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 3527 let netAddress: socket.NetAddress = { 3528 address: "192.168.xx.xx", 3529 port: 8080 3530 } 3531 let options: socket.TCPConnectOptions = { 3532 address: netAddress, 3533 timeout: 6000 3534 } 3535 tcp.connect(options, (err: BusinessError) => { 3536 if (err) { 3537 console.error('connect fail'); 3538 return; 3539 } 3540 console.info('connect success!'); 3541 }) 3542 tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3543 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 3544 console.info("Family IP Port: " + JSON.stringify(localAddress)); 3545 }).catch((err: BusinessError) => { 3546 console.error('Error:' + JSON.stringify(err)); 3547 }); 3548 }) 3549}) 3550``` 3551 3552### on('message')<sup>10+</sup> 3553 3554on(type: 'message', callback: Callback<SocketMessageInfo\>): void 3555 3556订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 3557 3558**系统能力**:SystemCapability.Communication.NetStack 3559 3560**参数:** 3561 3562| 参数名 | 类型 | 必填 | 说明 | 3563| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 3564| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 3565| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3566 3567**错误码:** 3568 3569| 错误码ID | 错误信息 | 3570| -------- | ---------------- | 3571| 401 | Parameter error. | 3572 3573**示例:** 3574 3575```ts 3576import { socket } from '@kit.NetworkKit'; 3577import { BusinessError } from '@kit.BasicServicesKit'; 3578 3579let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3580 3581tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3582 client.on('message', (value: socket.SocketMessageInfo) => { 3583 let messageView = ''; 3584 for (let i: number = 0; i < value.message.byteLength; i++) { 3585 let uint8Array = new Uint8Array(value.message) 3586 let messages = uint8Array[i] 3587 let message = String.fromCharCode(messages); 3588 messageView += message; 3589 } 3590 console.log('on message message: ' + JSON.stringify(messageView)); 3591 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 3592 }); 3593}); 3594``` 3595 3596### off('message')<sup>10+</sup> 3597 3598off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 3599 3600取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 3601 3602**系统能力**:SystemCapability.Communication.NetStack 3603 3604**参数:** 3605 3606| 参数名 | 类型 | 必填 | 说明 | 3607| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 3608| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 3609| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3610 3611**错误码:** 3612 3613| 错误码ID | 错误信息 | 3614| -------- | ---------------- | 3615| 401 | Parameter error. | 3616 3617**示例:** 3618 3619```ts 3620import { socket } from '@kit.NetworkKit'; 3621import { BusinessError } from '@kit.BasicServicesKit'; 3622 3623let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3624let callback = (value: socket.SocketMessageInfo) => { 3625 let messageView = ''; 3626 for (let i: number = 0; i < value.message.byteLength; i++) { 3627 let uint8Array = new Uint8Array(value.message) 3628 let messages = uint8Array[i] 3629 let message = String.fromCharCode(messages); 3630 messageView += message; 3631 } 3632 console.log('on message message: ' + JSON.stringify(messageView)); 3633 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 3634} 3635tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3636 client.on('message', callback); 3637 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3638 client.off('message', callback); 3639 client.off('message'); 3640}); 3641``` 3642 3643### on('close')<sup>10+</sup> 3644 3645on(type: 'close', callback: Callback\<void\>): void 3646 3647订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 3648 3649**系统能力**:SystemCapability.Communication.NetStack 3650 3651**参数:** 3652 3653| 参数名 | 类型 | 必填 | 说明 | 3654| -------- | ---------------- | ---- | ----------------------------------- | 3655| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 3656| callback | Callback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3657 3658**错误码:** 3659 3660| 错误码ID | 错误信息 | 3661| -------- | ---------------- | 3662| 401 | Parameter error. | 3663 3664**示例:** 3665 3666```ts 3667import { socket } from '@kit.NetworkKit'; 3668import { BusinessError } from '@kit.BasicServicesKit'; 3669 3670let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3671tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3672 client.on('close', () => { 3673 console.log("on close success") 3674 }); 3675}); 3676``` 3677 3678### off('close')<sup>10+</sup> 3679 3680off(type: 'close', callback?: Callback\<void\>): void 3681 3682取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 3683 3684**系统能力**:SystemCapability.Communication.NetStack 3685 3686**参数:** 3687 3688| 参数名 | 类型 | 必填 | 说明 | 3689| -------- | ---------------- | ---- | ----------------------------------- | 3690| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 3691| callback | Callback\<void\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3692 3693**错误码:** 3694 3695| 错误码ID | 错误信息 | 3696| -------- | ---------------- | 3697| 401 | Parameter error. | 3698 3699**示例:** 3700 3701```ts 3702import { socket } from '@kit.NetworkKit'; 3703 3704let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3705let callback = () => { 3706 console.log("on close success"); 3707} 3708tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3709 client.on('close', callback); 3710 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3711 client.off('close', callback); 3712 client.off('close'); 3713}); 3714``` 3715 3716### on('error')<sup>10+</sup> 3717 3718on(type: 'error', callback: ErrorCallback): void 3719 3720订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 3721 3722**系统能力**:SystemCapability.Communication.NetStack 3723 3724**参数:** 3725 3726| 参数名 | 类型 | 必填 | 说明 | 3727| -------- | ------------- | ---- | ------------------------------------ | 3728| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3729| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 3730 3731**错误码:** 3732 3733| 错误码ID | 错误信息 | 3734| -------- | ---------------- | 3735| 401 | Parameter error. | 3736 3737**示例:** 3738 3739```ts 3740import { socket } from '@kit.NetworkKit'; 3741import { BusinessError } from '@kit.BasicServicesKit'; 3742 3743let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3744tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3745 client.on('error', (err: BusinessError) => { 3746 console.log("on error, err:" + JSON.stringify(err)) 3747 }); 3748}); 3749``` 3750 3751### off('error')<sup>10+</sup> 3752 3753off(type: 'error', callback?: ErrorCallback): void 3754 3755取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 3756 3757**系统能力**:SystemCapability.Communication.NetStack 3758 3759**参数:** 3760 3761| 参数名 | 类型 | 必填 | 说明 | 3762| -------- | ------------- | ---- | ------------------------------------ | 3763| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3764| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 3765 3766**错误码:** 3767 3768| 错误码ID | 错误信息 | 3769| -------- | ---------------- | 3770| 401 | Parameter error. | 3771 3772**示例:** 3773 3774```ts 3775import { socket } from '@kit.NetworkKit'; 3776import { BusinessError } from '@kit.BasicServicesKit'; 3777 3778let callback = (err: BusinessError) => { 3779 console.log("on error, err:" + JSON.stringify(err)); 3780} 3781let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3782tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3783 client.on('error', callback); 3784 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3785 client.off('error', callback); 3786 client.off('error'); 3787}); 3788``` 3789 3790## TCP 错误码说明 3791 3792TCP 其余错误码映射形式为:2301000 + Linux内核错误码。 3793 3794错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 3795 3796## socket.constructLocalSocketInstance<sup>11+</sup> 3797 3798constructLocalSocketInstance(): LocalSocket 3799 3800创建一个LocalSocket对象。 3801 3802**系统能力**:SystemCapability.Communication.NetStack 3803 3804**返回值:** 3805 3806| 类型 | 说明 | 3807| :--------------------------------- | :---------------------- | 3808| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 | 3809 3810**示例:** 3811 3812```ts 3813import { socket } from '@kit.NetworkKit'; 3814let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 3815``` 3816 3817## LocalSocket<sup>11+</sup> 3818 3819LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。 3820 3821### bind<sup>11+</sup> 3822 3823bind(address: LocalAddress): Promise\<void\>; 3824 3825绑定本地套接字文件的路径。使用promise方法作为异步方法。 3826 3827> **说明:** 3828> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。 3829> bind方法在本地套接字通信中非必须。 3830 3831**系统能力**:SystemCapability.Communication.NetStack 3832 3833**参数:** 3834 3835| 参数名 | 类型 | 必填 | 说明 | 3836| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 3837| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息,参考[LocalAddress](#localaddress11)。 | 3838 3839**错误码:** 3840 3841| 错误码ID | 错误信息 | 3842| ------- | -------------------------- | 3843| 401 | Parameter error. | 3844| 2301013 | Insufficient permissions. | 3845| 2301022 | Invalid argument. | 3846| 2301098 | Address already in use. | 3847 3848**示例:** 3849 3850```ts 3851import { socket } from '@kit.NetworkKit'; 3852 3853let client: socket.LocalSocket = socket.constructLocalSocketInstance() 3854let sandboxPath: string = getContext().filesDir + '/testSocket' 3855let address : socket.LocalAddress = { 3856 address: sandboxPath 3857} 3858client.bind(address).then(() => { 3859 console.log('bind success') 3860}).catch((err: Object) => { 3861 console.error('failed to bind: ' + JSON.stringify(err)) 3862}) 3863``` 3864 3865### connect<sup>11+</sup> 3866 3867connect(options: LocalConnectOptions): Promise\<void\> 3868 3869连接到指定的套接字文件。使用promise方法作为异步方法。 3870 3871> **说明:** 3872> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。 3873 3874**系统能力**:SystemCapability.Communication.NetStack 3875 3876**参数:** 3877 3878| 参数名 | 类型 | 必填 | 说明 | 3879| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 3880| options | [LocalConnectOptions](#localconnectoptions11) | 是 | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 | 3881 3882**返回值:** 3883 3884| 类型 | 说明 | 3885| :-------------- | :---------------------------------------- | 3886| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 | 3887 3888**错误码:** 3889 3890| 错误码ID | 错误信息 | 3891| ------- | ----------------------- | 3892| 401 | Parameter error. | 3893| 2301013 | Insufficient permissions. | 3894| 2301022 | Invalid argument. | 3895| 2301111 | Connection refused. | 3896| 2301099 | Cannot assign requested address. | 3897 3898**示例:** 3899 3900```ts 3901import { socket } from '@kit.NetworkKit'; 3902 3903let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 3904let sandboxPath: string = getContext().filesDir + '/testSocket' 3905let localAddress : socket.LocalAddress = { 3906 address: sandboxPath 3907} 3908let connectOpt: socket.LocalConnectOptions = { 3909 address: localAddress, 3910 timeout: 6000 3911} 3912client.connect(connectOpt).then(() => { 3913 console.log('connect success') 3914}).catch((err: Object) => { 3915 console.error('connect fail: ' + JSON.stringify(err)); 3916}); 3917``` 3918 3919### send<sup>11+</sup> 3920 3921send(options: LocalSendOptions): Promise\<void\> 3922 3923通过LocalSocket连接发送数据。使用Promise方式作为异步方法。 3924 3925> **说明:** 3926> connect方法调用成功后,才可调用此方法。 3927 3928**系统能力**:SystemCapability.Communication.NetStack 3929 3930**参数:** 3931 3932| 参数名 | 类型 | 必填 | 说明 | 3933| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 3934| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 | 3935 3936**返回值:** 3937 3938| 类型 | 说明 | 3939| :-------------- | :------------------------------------------ | 3940| Promise\<void\> | 以Promise形式返回通过LocalSocket发送数据的结果。 | 3941 3942**错误码:** 3943 3944| 错误码ID | 错误信息 | 3945| ------- | ----------------------- | 3946| 401 | Parameter error. | 3947| 2301011 | Operation would block. | 3948 3949**示例:** 3950 3951```ts 3952import { socket } from '@kit.NetworkKit'; 3953 3954let client: socket.LocalSocket = socket.constructLocalSocketInstance() 3955let sandboxPath: string = getContext().filesDir + '/testSocket' 3956let localAddress : socket.LocalAddress = { 3957 address: sandboxPath 3958} 3959let connectOpt: socket.LocalConnectOptions = { 3960 address: localAddress, 3961 timeout: 6000 3962} 3963client.connect(connectOpt).then(() => { 3964 console.log('connect success') 3965}).catch((err: Object) => { 3966 console.error('connect failed: ' + JSON.stringify(err)) 3967}) 3968let sendOpt: socket.LocalSendOptions = { 3969 data: 'Hello world!' 3970} 3971client.send(sendOpt).then(() => { 3972 console.log('send success') 3973}).catch((err: Object) => { 3974 console.error('send fail: ' + JSON.stringify(err)) 3975}) 3976``` 3977 3978### close<sup>11+</sup> 3979 3980close(): Promise\<void\> 3981 3982关闭LocalSocket连接。使用Promise方式作为异步方法。 3983 3984**系统能力**:SystemCapability.Communication.NetStack 3985 3986**返回值:** 3987 3988| 类型 | 说明 | 3989| :-------------- | :----------------------------------------- | 3990| Promise\<void\> | 以Promise形式返回关闭LocalSocket连接的结果。 | 3991 3992**错误码:** 3993 3994| 错误码ID | 错误信息 | 3995| ------- | ----------------------- | 3996| 2301009 | Bad file descriptor. | 3997 3998**示例:** 3999 4000```ts 4001import { socket } from '@kit.NetworkKit'; 4002 4003let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4004 4005client.close().then(() => { 4006 console.log('close success'); 4007}).catch((err: Object) => { 4008 console.error('close fail: ' + JSON.stringify(err)); 4009}); 4010``` 4011 4012### getState<sup>11+</sup> 4013 4014getState(): Promise\<SocketStateBase\> 4015 4016获取LocalSocket状态。使用Promise方式作为异步方法。 4017 4018> **说明:** 4019> bind或connect方法调用成功后,才可调用此方法。 4020 4021**系统能力**:SystemCapability.Communication.NetStack 4022 4023**返回值:** 4024 4025| 类型 | 说明 | 4026| :------------------------------------------- | :--------------------------------------- | 4027| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 | 4028 4029**示例:** 4030 4031```ts 4032import { socket } from '@kit.NetworkKit'; 4033 4034let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4035let sandboxPath: string = getContext().filesDir + '/testSocket' 4036let localAddress : socket.LocalAddress = { 4037 address: sandboxPath 4038} 4039let connectOpt: socket.LocalConnectOptions = { 4040 address: localAddress, 4041 timeout: 6000 4042} 4043client.connect(connectOpt).then(() => { 4044 console.log('connect success'); 4045 client.getState().then(() => { 4046 console.log('getState success'); 4047 }).catch((err: Object) => { 4048 console.error('getState fail: ' + JSON.stringify(err)) 4049 }); 4050}).catch((err: Object) => { 4051 console.error('connect fail: ' + JSON.stringify(err)); 4052}); 4053``` 4054 4055### getSocketFd<sup>11+</sup> 4056 4057getSocketFd(): Promise\<number\> 4058 4059获取LocalSocket的文件描述符。使用Promise方式作为异步方法。 4060 4061> **说明:** 4062> bind或connect方法调用成功后,才可调用此方法。 4063> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。 4064 4065**系统能力**:SystemCapability.Communication.NetStack 4066 4067**返回值:** 4068 4069| 类型 | 说明 | 4070| :---------------- | :-------------------------------- | 4071| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 4072 4073**示例:** 4074 4075```ts 4076import { socket } from '@kit.NetworkKit'; 4077 4078let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4079let sandboxPath: string = getContext().filesDir + '/testSocket' 4080let localAddress : socket.LocalAddress = { 4081 address: sandboxPath 4082} 4083let connectOpt: socket.LocalConnectOptions = { 4084 address: localAddress, 4085 timeout: 6000 4086} 4087client.connect(connectOpt).then(() => { 4088 console.log('connect ok') 4089}).catch((err: Object) => { 4090 console.error('connect fail: ' + JSON.stringify(err)) 4091}) 4092client.getSocketFd().then((data: number) => { 4093 console.info("fd: " + data); 4094}).catch((err: Object) => { 4095 console.error("getSocketFd faile: " + JSON.stringify(err)); 4096}) 4097``` 4098 4099### setExtraOptions<sup>11+</sup> 4100 4101setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 4102 4103设置LocalSocket的套接字属性,使用Promise方式作为异步方法。 4104 4105> **说明:** 4106> bind或connect方法调用成功后,才可调用此方法。 4107 4108**系统能力**:SystemCapability.Communication.NetStack 4109 4110**参数:** 4111 4112| 参数名 | 类型 | 必填 | 说明 | 4113| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 4114| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 | 4115 4116**返回值:** 4117 4118| 类型 | 说明 | 4119| :-------------- | :-------------------------------------------- | 4120| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 | 4121 4122**错误码:** 4123 4124| 错误码ID | 错误信息 | 4125| ------- | ----------------------- | 4126| 401 | Parameter error. | 4127| 2301009 | Bad file descriptor. | 4128 4129**示例:** 4130 4131```ts 4132import { socket } from '@kit.NetworkKit'; 4133 4134let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4135let sandboxPath: string = getContext().filesDir + '/testSocket' 4136let localAddress : socket.LocalAddress = { 4137 address: sandboxPath 4138} 4139let connectOpt: socket.LocalConnectOptions = { 4140 address: localAddress, 4141 timeout: 6000 4142} 4143client.connect(connectOpt).then(() => { 4144 console.log('connect success'); 4145 let options: socket.ExtraOptionsBase = { 4146 receiveBufferSize: 8000, 4147 sendBufferSize: 8000, 4148 socketTimeout: 3000 4149 } 4150 client.setExtraOptions(options).then(() => { 4151 console.log('setExtraOptions success'); 4152 }).catch((err: Object) => { 4153 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4154 }); 4155}).catch((err: Object) => { 4156 console.error('connect fail: ' + JSON.stringify(err)); 4157}); 4158``` 4159 4160### getExtraOptions<sup>11+</sup> 4161 4162getExtraOptions(): Promise\<ExtraOptionsBase\>; 4163 4164获取LocalSocket的套接字属性,使用Promise方式作为异步方法。 4165 4166> **说明:** 4167> bind或connect方法调用成功后,才可调用此方法。 4168 4169**系统能力**:SystemCapability.Communication.NetStack 4170 4171**返回值:** 4172 4173| 类型 | 说明 | 4174| :-------------------------- | :---------------------------------------- | 4175| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 | 4176 4177**错误码:** 4178 4179| 错误码ID | 错误信息 | 4180| ------- | ----------------------- | 4181| 2301009 | Bad file descriptor. | 4182 4183**示例:** 4184 4185```ts 4186import { socket } from '@kit.NetworkKit'; 4187 4188let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4189let sandboxPath: string = getContext().filesDir + '/testSocket' 4190let localAddress : socket.LocalAddress = { 4191 address: sandboxPath 4192} 4193let connectOpt: socket.LocalConnectOptions = { 4194 address: localAddress, 4195 timeout: 6000 4196} 4197client.connect(connectOpt).then(() => { 4198 console.log('connect success'); 4199 client.getExtraOptions().then((options : socket.ExtraOptionsBase) => { 4200 console.log('options: ' + JSON.stringify(options)); 4201 }).catch((err: Object) => { 4202 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4203 }); 4204}).catch((err: Object) => { 4205 console.error('connect fail: ' + JSON.stringify(err)); 4206}); 4207``` 4208 4209### getLocalAddress<sup>12+</sup> 4210 4211getLocalAddress(): Promise\<string\> 4212 4213获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。 4214 4215> **说明:** 4216> bind方法调用成功后,才可调用此方法。 4217 4218**系统能力**:SystemCapability.Communication.NetStack 4219 4220**返回值:** 4221 4222| 类型 | 说明 | 4223| -------------- | --------------------------------------------------- | 4224| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 4225 4226**错误码:** 4227 4228| 错误码ID | 错误信息 | 4229| -------- | ------------------------------------------- | 4230| 2300002 | System internal error. | 4231| 2301009 | Bad file descriptor. | 4232| 2303188 | Socket operation on non-socket. | 4233 4234**示例:** 4235 4236```ts 4237let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4238let sandboxPath: string = getContext().filesDir + '/testSocket'; 4239let address : socket.LocalAddress = { 4240 address: sandboxPath 4241} 4242client.bind(address).then(() => { 4243 console.error('bind success'); 4244 client.getLocalAddress().then((localPath: string) => { 4245 console.info("SUCCESS " + JSON.stringify(localPath)); 4246 }).catch((err: BusinessError) => { 4247 console.error("FAIL " + JSON.stringify(err)); 4248 }) 4249}).catch((err: Object) => { 4250 console.info('failed to bind: ' + JSON.stringify(err)); 4251}) 4252``` 4253 4254### on('message')<sup>11+</sup> 4255 4256on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void 4257 4258订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4259 4260**系统能力**:SystemCapability.Communication.NetStack 4261 4262**参数:** 4263 4264| 参数名 | 类型 | 必填 | 说明 | 4265| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 4266| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 4267| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收的消息。| 4268 4269**错误码:** 4270 4271| 错误码ID | 错误信息 | 4272| ------- | ----------------------- | 4273| 401 | Parameter error. | 4274 4275**示例:** 4276 4277```ts 4278import { socket } from '@kit.NetworkKit'; 4279 4280let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4281client.on('message', (value: socket.LocalSocketMessageInfo) => { 4282 const uintArray = new Uint8Array(value.message) 4283 let messageView = ''; 4284 for (let i = 0; i < uintArray.length; i++) { 4285 messageView += String.fromCharCode(uintArray[i]); 4286 } 4287 console.log('total: ' + JSON.stringify(value)); 4288 console.log('message infomation: ' + messageView); 4289}); 4290``` 4291 4292### off('message')<sup>11+</sup> 4293 4294off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 4295 4296取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4297 4298**系统能力**:SystemCapability.Communication.NetStack 4299 4300**参数:** 4301 4302| 参数名 | 类型 | 必填 | 说明 | 4303| -------- | ------------------------------------------------ | ---- | ----------------------------------- | 4304| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 4305| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on中的callback取消一个订阅。| 4306 4307**错误码:** 4308 4309| 错误码ID | 错误信息 | 4310| ------- | ----------------------- | 4311| 401 | Parameter error. | 4312 4313**示例:** 4314 4315```ts 4316import { socket } from '@kit.NetworkKit'; 4317 4318let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4319let messageView = ''; 4320let callback = (value: socket.LocalSocketMessageInfo) => { 4321 const uintArray = new Uint8Array(value.message) 4322 let messageView = ''; 4323 for (let i = 0; i < uintArray.length; i++) { 4324 messageView += String.fromCharCode(uintArray[i]); 4325 } 4326 console.log('total: ' + JSON.stringify(value)); 4327 console.log('message infomation: ' + messageView); 4328} 4329client.on('message', callback); 4330client.off('message'); 4331``` 4332 4333### on('connect')<sup>11+</sup> 4334 4335on(type: 'connect', callback: Callback\<void\>): void; 4336 4337订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4338 4339**系统能力**:SystemCapability.Communication.NetStack 4340 4341**参数:** 4342 4343| 参数名 | 类型 | 必填 | 说明 | 4344| -------- | ---------------- | ---- | --------------------------------------------------------- | 4345| type | string | 是 | 订阅的事件类型。 | 4346| callback | Callback\<void\> | 是 | 以callback的形式异步返回与服务端连接的结果。 | 4347 4348**错误码:** 4349 4350| 错误码ID | 错误信息 | 4351| ------- | ----------------------- | 4352| 401 | Parameter error. | 4353 4354**示例:** 4355 4356```ts 4357import { socket } from '@kit.NetworkKit'; 4358 4359let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4360client.on('connect', () => { 4361 console.log("on connect success") 4362}); 4363``` 4364 4365### off('connect')<sup>11+</sup> 4366 4367off(type: 'connect', callback?: Callback\<void\>): void; 4368 4369取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4370 4371**系统能力**:SystemCapability.Communication.NetStack 4372 4373**参数:** 4374 4375| 参数名 | 类型 | 必填 | 说明 | 4376| -------- | ---------------- | ---- | --------------------------------------------------------- | 4377| type | string | 是 | 订阅的事件类型。 | 4378| callback | Callback\<void\> | 否 | 指定传入on中的callback取消一个订阅。 | 4379 4380**错误码:** 4381 4382| 错误码ID | 错误信息 | 4383| ------- | ----------------------- | 4384| 401 | Parameter error. | 4385 4386**示例:** 4387 4388```ts 4389import { socket } from '@kit.NetworkKit'; 4390 4391let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4392let callback = () => { 4393 console.log("on connect success"); 4394} 4395client.on('connect', callback); 4396// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4397client.off('connect', callback); 4398client.off('connect'); 4399``` 4400 4401### on('close')<sup>11+</sup> 4402 4403on(type: 'close', callback: Callback\<void\>): void; 4404 4405订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4406 4407**系统能力**:SystemCapability.Communication.NetStack 4408 4409**参数:** 4410 4411| 参数名 | 类型 | 必填 | 说明 | 4412| -------- | ---------------- | ---- | ------------------------ | 4413| type | string | 是 | 订阅LocalSocket的关闭事件。 | 4414| callback | Callback\<void\> | 是 | 以callback的形式异步返回关闭localsocket的结果。| 4415 4416**错误码:** 4417 4418| 错误码ID | 错误信息 | 4419| ------- | ----------------------- | 4420| 401 | Parameter error. | 4421 4422**示例:** 4423 4424```ts 4425import { socket } from '@kit.NetworkKit'; 4426 4427let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4428let callback = () => { 4429 console.log("on close success"); 4430} 4431client.on('close', callback); 4432``` 4433 4434### off('close')<sup>11+</sup> 4435 4436off(type: 'close', callback?: Callback\<void\>): void; 4437 4438订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4439 4440**系统能力**:SystemCapability.Communication.NetStack 4441 4442**参数:** 4443 4444| 参数名 | 类型 | 必填 | 说明 | 4445| -------- | ---------------- | ---- | ------------------------ | 4446| type | string | 是 | 订阅LocalSocket的关闭事件。 | 4447| callback | Callback\<void\> | 否 | 取消指定传入on中的callback取消一个订阅。| 4448 4449**错误码:** 4450 4451| 错误码ID | 错误信息 | 4452| ------- | ----------------------- | 4453| 401 | Parameter error. | 4454 4455**示例:** 4456 4457```ts 4458import { socket } from '@kit.NetworkKit'; 4459 4460let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4461let callback = () => { 4462 console.log("on close success"); 4463} 4464client.on('close', callback); 4465// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4466client.off('close', callback); 4467client.off('close'); 4468``` 4469 4470### on('error')<sup>11+</sup> 4471 4472on(type: 'error', callback: ErrorCallback): void 4473 4474订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 4475 4476**系统能力**:SystemCapability.Communication.NetStack 4477 4478**参数:** 4479 4480| 参数名 | 类型 | 必填 | 说明 | 4481| -------- | ------------- | ---- | ---------------------------- | 4482| type | string | 是 | 订阅LocalSocket的error事件。 | 4483| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 4484 4485**错误码:** 4486 4487| 错误码ID | 错误信息 | 4488| ------- | ----------------------- | 4489| 401 | Parameter error. | 4490 4491**示例:** 4492 4493```ts 4494import { socket } from '@kit.NetworkKit'; 4495 4496let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4497client.on('error', (err: Object) => { 4498 console.log("on error, err:" + JSON.stringify(err)) 4499}); 4500``` 4501 4502### off('error')<sup>11+</sup> 4503 4504off(type: 'error', callback?: ErrorCallback): void; 4505 4506取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 4507 4508**系统能力**:SystemCapability.Communication.NetStack 4509 4510**参数:** 4511 4512| 参数名 | 类型 | 必填 | 说明 | 4513| -------- | ------------- | ---- | ----------------------------- | 4514| type | string | 是 | 取消订阅LocalSocket的error事件。 | 4515| callback | ErrorCallback | 否 | 指定传入on中的callback取消一个订阅。| 4516 4517**错误码:** 4518 4519| 错误码ID | 错误信息 | 4520| ------- | ----------------------- | 4521| 401 | Parameter error. | 4522 4523**示例:** 4524 4525```ts 4526import { socket } from '@kit.NetworkKit'; 4527 4528let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4529let callback = (err: Object) => { 4530 console.log("on error, err:" + JSON.stringify(err)); 4531} 4532client.on('error', callback); 4533// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4534client.off('error', callback); 4535client.off('error'); 4536``` 4537 4538## LocalSocketMessageInfo<sup>11+</sup> 4539 4540LocalSocket客户端与服务端通信时接收的数据。 4541 4542**系统能力**:SystemCapability.Communication.NetStack 4543 4544| 名称 | 类型 | 必填 | 说明 | 4545| ------- | --------------- | --- | ------------------ | 4546| message | ArrayBuffer | 是 | 收到的消息数据。 | 4547| address | string | 是 | 使用的本地套接字路径。| 4548| size | number | 是 | 数据长度。 | 4549 4550## LocalAddress<sup>11+</sup> 4551 4552LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。 4553 4554**系统能力**:SystemCapability.Communication.NetStack 4555 4556| 名称 | 类型 | 必填 | 说明 | 4557| ------- | ---------- | --- | ------------------ | 4558| address | string | 是 | 本地套接字路径。 | 4559 4560## LocalConnectOptions<sup>11+</sup> 4561 4562LocalSocket客户端在连接服务端时传入的参数信息。 4563 4564**系统能力**:SystemCapability.Communication.NetStack 4565 4566| 名称 | 类型 | 必填 | 说明 | 4567| ------- | ---------- | --- | ------------------------------ | 4568| address | [LocalAddress](#localaddress11) | 是 | 指定的本地套接字路径。 | 4569| timeout | number | 否 | 连接服务端的超时时间,单位为毫秒。 | 4570 4571## LocalSendOptions<sup>11+</sup> 4572 4573LocalSocket发送请求的参数。 4574 4575**系统能力**:SystemCapability.Communication.NetStack 4576 4577| 名称 | 类型 | 必填 | 说明 | 4578| ------- | ---------- | --- | ------------------- | 4579| data | string \| ArrayBuffer | 是 | 需要发送的数据。 | 4580| encoding | string | 否 | 字符编码。 | 4581 4582## ExtraOptionsBase<sup>7+</sup> 4583 4584Socket套接字的基础属性。 4585 4586**系统能力**:SystemCapability.Communication.NetStack 4587 4588| 名称 | 类型 | 必填 | 说明 | 4589| ----------------- | ------- | ---- | ----------------------------- | 4590| receiveBufferSize | number | 否 | 接收缓冲区大小(单位:Byte)。 | 4591| sendBufferSize | number | 否 | 发送缓冲区大小(单位:Byte)。 | 4592| reuseAddress | boolean | 否 | 是否重用地址。 | 4593| socketTimeout | number | 否 | 套接字超时时间,单位毫秒(ms)。 | 4594 4595## socket.constructLocalSocketServerInstance<sup>11+</sup> 4596 4597constructLocalSocketServerInstance(): LocalSocketServer 4598 4599创建一个LocalSocketServer对象。 4600 4601**系统能力**:SystemCapability.Communication.NetStack 4602 4603**返回值:** 4604 4605| 类型 | 说明 | 4606| :---------------------------------- | :---------------------------- | 4607| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 | 4608 4609**示例:** 4610 4611```ts 4612import { socket } from '@kit.NetworkKit'; 4613let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4614``` 4615 4616## LocalSocketServer<sup>11+</sup> 4617 4618LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。 4619 4620### listen<sup>11+</sup> 4621 4622listen(address: LocalAddress): Promise\<void\> 4623 4624绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 4625 4626> **说明:** 4627> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。 4628 4629**系统能力**:SystemCapability.Communication.NetStack 4630 4631**参数:** 4632 4633| 参数名 | 类型 | 必填 | 说明 | 4634| ------- | ------------------------- | ---- | --------------------------------------------- | 4635| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息。 | 4636 4637**返回值:** 4638 4639| 类型 | 说明 | 4640| :-------------- | :---------------------------------------------------- | 4641| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。| 4642 4643**错误码:** 4644 4645| 错误码ID | 错误信息 | 4646| -------- | --------------------------- | 4647| 401 | Parameter error. | 4648| 2303109 | Bad file number. | 4649| 2301013 | Insufficient permissions. | 4650| 2301022 | Invalid argument. | 4651| 2301098 | Address already in use. | 4652 4653**示例:** 4654 4655```ts 4656import { socket } from '@kit.NetworkKit'; 4657 4658let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4659let sandboxPath: string = getContext().filesDir + '/testSocket' 4660let addr: socket.LocalAddress = { 4661 address: sandboxPath 4662} 4663server.listen(addr).then(() => { 4664 console.log('listen success'); 4665}).catch((err: Object) => { 4666 console.error('listen fail: ' + JSON.stringify(err)); 4667}); 4668``` 4669 4670### getState<sup>11+</sup> 4671 4672getState(): Promise\<SocketStateBase\> 4673 4674获取LocalSocketServer状态。使用Promise方式作为异步方法。 4675 4676> **说明:** 4677> listen方法调用成功后,才可调用此方法。 4678 4679**系统能力**:SystemCapability.Communication.NetStack 4680 4681**返回值:** 4682 4683| 类型 | 说明 | 4684| :------------------------------------------- | :--------------------------------------------- | 4685| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 | 4686 4687**示例:** 4688 4689```ts 4690import { socket } from '@kit.NetworkKit'; 4691 4692let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4693let sandboxPath: string = getContext().filesDir + '/testSocket' 4694let listenAddr: socket.LocalAddress = { 4695 address: sandboxPath 4696} 4697server.listen(listenAddr).then(() => { 4698 console.log("listen success"); 4699}).catch((err: Object) => { 4700 console.error("listen fail: " + JSON.stringify(err)); 4701}) 4702server.getState().then((data: socket.SocketStateBase) => { 4703 console.log('getState success: ' + JSON.stringify(data)); 4704}).catch((err: Object) => { 4705 console.error('getState fail: ' + JSON.stringify(err)); 4706}); 4707``` 4708 4709### setExtraOptions<sup>11+</sup> 4710 4711setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 4712 4713设置LocalSocketServer连接的套接字属性,使用Promise方式作为异步方法。 4714 4715> **说明:** 4716> listen方法调用成功后,才可调用此方法。 4717 4718**系统能力**:SystemCapability.Communication.NetStack 4719 4720**参数:** 4721 4722| 参数名 | 类型 | 必填 | 说明 | 4723| ------- | --------------------------------------- | ---- | ------------------------------ | 4724| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocketServer连接的其他属性。 | 4725 4726**返回值:** 4727 4728| 类型 | 说明 | 4729| :-------------- | :---------------------------------------------- | 4730| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 4731 4732**错误码:** 4733 4734| 错误码ID | 错误信息 | 4735| -------- | ------------------------------- | 4736| 401 | Parameter error. | 4737| 2301009 | Bad file descriptor. | 4738 4739**示例:** 4740 4741```ts 4742import { socket } from '@kit.NetworkKit'; 4743 4744let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4745let sandboxPath: string = getContext().filesDir + '/testSocket' 4746let listenAddr: socket.NetAddress = { 4747 address: sandboxPath 4748} 4749server.listen(listenAddr).then(() => { 4750 console.log("listen success"); 4751}).catch((err: Object) => { 4752 console.error("listen fail: " + JSON.stringify(err)); 4753}) 4754 4755let options: socket.ExtraOptionsBase = { 4756 receiveBufferSize: 6000, 4757 sendBufferSize: 6000, 4758 socketTimeout: 3000 4759} 4760server.setExtraOptions(options).then(() => { 4761 console.log('setExtraOptions success'); 4762}).catch((err: Object) => { 4763 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4764}); 4765``` 4766 4767### getExtraOptions<sup>11+</sup> 4768 4769getExtraOptions(): Promise\<ExtraOptionsBase\>; 4770 4771获取LocalSocketServer中连接的套接字的属性,使用Promise方式作为异步方法。 4772 4773> **说明:** 4774> listen方法调用成功后,才可调用此方法。 4775 4776**系统能力**:SystemCapability.Communication.NetStack 4777 4778**返回值:** 4779 4780| 类型 | 说明 | 4781| :-------------------------- | :-------------------------- | 4782| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 | 4783 4784**错误码:** 4785 4786| 错误码ID | 错误信息 | 4787| -------- | -------------------- | 4788| 401 | Parameter error. | 4789 4790**示例:** 4791 4792```ts 4793import { socket } from '@kit.NetworkKit'; 4794 4795let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4796let sandboxPath: string = getContext().filesDir + '/testSocket' 4797let listenAddr: socket.LocalAddress = { 4798 address: sandboxPath 4799} 4800server.listen(listenAddr).then(() => { 4801 console.log("listen success"); 4802}).catch((err: Object) => { 4803 console.error("listen fail: " + JSON.stringify(err)); 4804}) 4805server.getExtraOptions().then((options: socket.ExtraOptionsBase) => { 4806 console.log('options: ' + JSON.stringify(options)); 4807}).catch((err: Object) => { 4808 console.error('getExtraOptions fail: ' + JSON.stringify(err)); 4809}); 4810``` 4811 4812### getLocalAddress<sup>12+</sup> 4813 4814getLocalAddress(): Promise\<string\> 4815 4816获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。 4817 4818> **说明:** 4819> listen方法调用成功后,才可调用此方法。 4820 4821**系统能力**:SystemCapability.Communication.NetStack 4822 4823**返回值:** 4824 4825| 类型 | 说明 | 4826| -------------- | --------------------------------------------------- | 4827| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 4828 4829**错误码:** 4830 4831| 错误码ID | 错误信息 | 4832| -------- | ------------------------------------------- | 4833| 2300002 | System internal error. | 4834| 2301009 | Bad file descriptor. | 4835| 2303188 | Socket operation on non-socket. | 4836 4837**示例:** 4838 4839```ts 4840let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4841let sandboxPath: string = getContext().filesDir + '/testSocket'; 4842let listenAddr: socket.LocalAddress = { 4843 address: sandboxPath 4844} 4845server.listen(listenAddr).then(() => { 4846 console.info("listen success"); 4847 server.getLocalAddress().then((localPath: string) => { 4848 console.info("SUCCESS " + JSON.stringify(localPath)); 4849 }).catch((err: BusinessError) => { 4850 console.error("FAIL " + JSON.stringify(err)); 4851 }) 4852}).catch((err: Object) => { 4853 console.error("listen fail: " + JSON.stringify(err)); 4854}) 4855 4856``` 4857 4858### on('connect')<sup>11+</sup> 4859 4860on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void 4861 4862订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 4863 4864> **说明:** 4865> listen方法调用成功后,才可调用此方法。 4866 4867**系统能力**:SystemCapability.Communication.NetStack 4868 4869**参数:** 4870 4871| 参数名 | 类型 | 必填 | 说明 | 4872| -------- | ------------------------------- | ---- | ------------------------------------- | 4873| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 4874| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是 | 以callback的形式异步返回接收到客户端连接的结果。| 4875 4876**错误码:** 4877 4878| 错误码ID | 错误信息 | 4879| -------- | ---------------- | 4880| 401 | Parameter error. | 4881 4882**示例:** 4883 4884```ts 4885import { socket } from '@kit.NetworkKit'; 4886 4887let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4888server.on('connect', (connection: socket.LocalSocketConnection) => { 4889 if (connection) { 4890 console.log('accept a client') 4891 } 4892}); 4893``` 4894 4895### off('connect')<sup>11+</sup> 4896 4897off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void 4898 4899取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 4900 4901**系统能力**:SystemCapability.Communication.NetStack 4902 4903**参数:** 4904 4905| 参数名 | 类型 | 必填 | 说明 | 4906| -------- | ------------------------------- | ---- | ------------------------------------- | 4907| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 4908| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否 | 指定传入on的一个callback取消注册。| 4909 4910**错误码:** 4911 4912| 错误码ID | 错误信息 | 4913| -------- | ---------------- | 4914| 401 | Parameter error. | 4915 4916**示例:** 4917 4918```ts 4919import { socket } from '@kit.NetworkKit'; 4920 4921let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4922let callback = (connection: socket.LocalSocketConnection) => { 4923 if (connection) { 4924 console.log('accept a client') 4925 } 4926} 4927server.on('connect', callback); 4928// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4929server.off('connect', callback); 4930server.off('connect'); 4931``` 4932 4933### on('error')<sup>11+</sup> 4934 4935on(type: 'error', callback: ErrorCallback): void 4936 4937订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 4938 4939> **说明:** 4940> listen方法调用成功后,才可调用此方法。 4941 4942**系统能力**:SystemCapability.Communication.NetStack 4943 4944**参数:** 4945 4946| 参数名 | 类型 | 必填 | 说明 | 4947| -------- | ------------- | ---- | ------------------------------------ | 4948| type | string | 是 | 订阅的事件类型。'error':error事件。 | 4949| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 4950 4951**错误码:** 4952 4953| 错误码ID | 错误信息 | 4954| -------- | ---------------- | 4955| 401 | Parameter error. | 4956 4957**示例:** 4958 4959```ts 4960import { socket } from '@kit.NetworkKit'; 4961 4962let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4963server.on('error', (err: Object) => { 4964 console.error("on error, err:" + JSON.stringify(err)) 4965}); 4966``` 4967 4968### off('error')<sup>11+</sup> 4969 4970off(type: 'error', callback?: ErrorCallback): void 4971 4972取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 4973 4974**系统能力**:SystemCapability.Communication.NetStack 4975 4976**参数:** 4977 4978| 参数名 | 类型 | 必填 | 说明 | 4979| -------- | ------------- | ---- | ------------------------------------ | 4980| type | string | 是 | 订阅的事件类型。'error':error事件。 | 4981| callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | 4982 4983**错误码:** 4984 4985| 错误码ID | 错误信息 | 4986| -------- | ---------------- | 4987| 401 | Parameter error. | 4988 4989**示例:** 4990 4991```ts 4992import { socket } from '@kit.NetworkKit'; 4993 4994let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4995let callback = (err: Object) => { 4996 console.error("on error, err:" + JSON.stringify(err)); 4997} 4998server.on('error', callback); 4999// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5000server.off('error', callback); 5001server.off('error'); 5002``` 5003 5004 5005## LocalSocketConnection<sup>11+</sup> 5006 5007LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。 5008 5009> **说明:** 5010> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。 5011 5012**系统能力**:SystemCapability.Communication.NetStack 5013 5014### 属性 5015 5016| 名称 | 类型 | 必填 | 说明 | 5017| -------- | ------ | ---- | ---------------------------- | 5018| clientId | number | 是 | 客户端与服务端建立的会话连接的id。 | 5019 5020### send<sup>11+</sup> 5021 5022send(options: LocalSendOptions): Promise\<void\> 5023 5024通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。 5025 5026> **说明:** 5027> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。 5028 5029**系统能力**:SystemCapability.Communication.NetStack 5030 5031**参数:** 5032 5033| 参数名 | 类型 | 必填 | 说明 | 5034| ------- | --------------------------------- | ---- | -------------------------------------- | 5035| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocketConnection发送请求的参数。 | 5036 5037**返回值:** 5038 5039| 类型 | 说明 | 5040| :-------------- | :---------------------------------------------- | 5041| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 5042 5043**错误码:** 5044 5045| 错误码ID | 错误信息 | 5046| -------- | ---------------------- | 5047| 401 | Parameter error. | 5048| 2301011 | Operation would block. | 5049 5050**示例:** 5051 5052```ts 5053import { socket } from '@kit.NetworkKit'; 5054 5055let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5056 5057server.on('connect', (connection: socket.LocalSocketConnection) => { 5058 let sendOptions: socket.LocalSendOptions = { 5059 data: 'Hello, client!' 5060 } 5061 connection.send(sendOptions).then(() => { 5062 console.log('send success'); 5063 }).catch((err: Object) => { 5064 console.error('send fail: ' + JSON.stringify(err)); 5065 }); 5066}); 5067``` 5068 5069### close<sup>11+</sup> 5070 5071close(): Promise\<void\> 5072 5073关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。 5074 5075**系统能力**:SystemCapability.Communication.NetStack 5076 5077**返回值:** 5078 5079| 类型 | 说明 | 5080| :-------------- | :------------------------------------------- | 5081| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 5082 5083**错误码:** 5084 5085| 错误码ID | 错误信息 | 5086| -------- | -------------------- | 5087| 2301009 | Bad file descriptor. | 5088 5089**示例:** 5090 5091```ts 5092import { socket } from '@kit.NetworkKit'; 5093 5094let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5095server.on('connect', (connection: socket.LocalSocketConnection) => { 5096 connection.close().then(() => { 5097 console.log('close success'); 5098 }).catch((err: Object) => { 5099 console.error('close fail: ' + JSON.stringify(err)); 5100 }); 5101}); 5102``` 5103 5104### getLocalAddress<sup>12+</sup> 5105 5106getLocalAddress(): Promise\<string\> 5107 5108获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。 5109 5110**系统能力**:SystemCapability.Communication.NetStack 5111 5112**返回值:** 5113 5114| 类型 | 说明 | 5115| -------------- | --------------------------------------------------- | 5116| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 5117 5118**错误码:** 5119 5120| 错误码ID | 错误信息 | 5121| -------- | ------------------------------------------- | 5122| 2300002 | System internal error. | 5123| 2301009 | Bad file descriptor. | 5124| 2303188 | Socket operation on non-socket. | 5125 5126**示例:** 5127 5128```ts 5129let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5130let sandboxPath: string = getContext().filesDir + '/testSocket'; 5131let localAddr: socket.LocalAddress = { 5132 address: sandboxPath 5133} 5134server.listen(localAddr).then(() => { 5135 console.info('listen success'); 5136 let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 5137 let connectOpt: socket.LocalConnectOptions = { 5138 address: localAddr, 5139 timeout: 6000 5140 } 5141 client.connect(connectOpt).then(() => { 5142 server.getLocalAddress().then((localPath: string) => { 5143 console.info("success, localPath is" + JSON.stringify(localPath)); 5144 }).catch((err: BusinessError) => { 5145 console.error("FAIL " + JSON.stringify(err)); 5146 }) 5147 }).catch((err: Object) => { 5148 console.error('connect fail: ' + JSON.stringify(err)); 5149 }); 5150}); 5151``` 5152 5153### on('message')<sup>11+</sup> 5154 5155on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void; 5156 5157订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5158 5159**系统能力**:SystemCapability.Communication.NetStack 5160 5161**参数:** 5162 5163| 参数名 | 类型 | 必填 | 说明 | 5164| -------- | ----------------------------------------------- | ---- | --------------------------------------- | 5165| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5166| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收到的来自客户端的消息。 | 5167 5168**错误码:** 5169 5170| 错误码ID | 错误信息 | 5171| -------- | ---------------- | 5172| 401 | Parameter error. | 5173 5174**示例:** 5175 5176```ts 5177import { socket } from '@kit.NetworkKit'; 5178 5179let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5180let sandboxPath: string = getContext().filesDir + '/testSocket' 5181let listenAddr: socket.LocalAddress = { 5182 address: sandboxPath 5183} 5184server.listen(listenAddr).then(() => { 5185 console.log("listen success"); 5186}).catch((err: Object) => { 5187 console.error("listen fail: " + JSON.stringify(err)); 5188}); 5189server.on('connect', (connection: socket.LocalSocketConnection) => { 5190 connection.on('message', (value: socket.LocalSocketMessageInfo) => { 5191 const uintArray = new Uint8Array(value.message); 5192 let messageView = ''; 5193 for (let i = 0; i < uintArray.length; i++) { 5194 messageView += String.fromCharCode(uintArray[i]); 5195 } 5196 console.log('total: ' + JSON.stringify(value)); 5197 console.log('message infomation: ' + messageView); 5198 }); 5199}); 5200``` 5201 5202### off('message')<sup>11+</sup> 5203 5204off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 5205 5206取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5207 5208**系统能力**:SystemCapability.Communication.NetStack 5209 5210**参数:** 5211 5212| 参数名 | 类型 | 必填 | 说明 | 5213| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 5214| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5215| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on的一个callback取消注册。 | 5216 5217**错误码:** 5218 5219| 错误码ID | 错误信息 | 5220| -------- | ---------------- | 5221| 401 | Parameter error. | 5222 5223**示例:** 5224 5225```ts 5226import { socket } from '@kit.NetworkKit'; 5227 5228let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5229let callback = (value: socket.LocalSocketMessageInfo) => { 5230 const uintArray = new Uint8Array(value.message) 5231 let messageView = ''; 5232 for (let i = 0; i < uintArray.length; i++) { 5233 messageView += String.fromCharCode(uintArray[i]); 5234 } 5235 console.log('total: ' + JSON.stringify(value)); 5236 console.log('message infomation: ' + messageView); 5237} 5238server.on('connect', (connection: socket.LocalSocketConnection) => { 5239 connection.on('message', callback); 5240 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5241 connection.off('message', callback); 5242 connection.off('message'); 5243}); 5244``` 5245 5246### on('close')<sup>11+</sup> 5247 5248on(type: 'close', callback: Callback\<void\>): void 5249 5250订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5251 5252**系统能力**:SystemCapability.Communication.NetStack 5253 5254**参数:** 5255 5256| 参数名 | 类型 | 必填 | 说明 | 5257| -------- | ---------------- | ---- | ----------------------------------- | 5258| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 5259| callback | Callback\<void\> | 是 | 以callback的形式异步返回会话关闭的结果。 | 5260 5261**错误码:** 5262 5263| 错误码ID | 错误信息 | 5264| -------- | ---------------- | 5265| 401 | Parameter error. | 5266 5267**示例:** 5268 5269```ts 5270import { socket } from '@kit.NetworkKit'; 5271 5272let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5273server.on('connect', (connection: socket.LocalSocketConnection) => { 5274 connection.on('close', () => { 5275 console.log("on close success") 5276 }); 5277}); 5278``` 5279 5280### off('close')<sup>11+</sup> 5281 5282off(type: 'close', callback?: Callback\<void\>): void 5283 5284取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5285 5286**系统能力**:SystemCapability.Communication.NetStack 5287 5288**参数:** 5289 5290| 参数名 | 类型 | 必填 | 说明 | 5291| -------- | ---------------- | ---- | ----------------------------------- | 5292| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 5293| callback | Callback\<void\> | 否 | 指定传入on的一个callback取消订阅。 | 5294 5295**错误码:** 5296 5297| 错误码ID | 错误信息 | 5298| -------- | ---------------- | 5299| 401 | Parameter error. | 5300 5301**示例:** 5302 5303```ts 5304import { socket } from '@kit.NetworkKit'; 5305 5306let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5307let callback = () => { 5308 console.log("on close success"); 5309} 5310server.on('connect', (connection: socket.LocalSocketConnection) => { 5311 connection.on('close', callback); 5312 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5313 connection.off('close', callback); 5314 connection.off('close'); 5315}); 5316``` 5317 5318### on('error')<sup>11+</sup> 5319 5320on(type: 'error', callback: ErrorCallback): void 5321 5322订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 5323 5324**系统能力**:SystemCapability.Communication.NetStack 5325 5326**参数:** 5327 5328| 参数名 | 类型 | 必填 | 说明 | 5329| -------- | ------------- | ---- | ------------------------------------ | 5330| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5331| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 5332 5333**错误码:** 5334 5335| 错误码ID | 错误信息 | 5336| -------- | ---------------- | 5337| 401 | Parameter error. | 5338 5339**示例:** 5340 5341```ts 5342import { socket } from '@kit.NetworkKit'; 5343 5344let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5345server.on('connect', (connection: socket.LocalSocketConnection) => { 5346 connection.on('error', (err: Object) => { 5347 console.error("on error, err:" + JSON.stringify(err)) 5348 }); 5349}); 5350``` 5351 5352### off('error')<sup>11+</sup> 5353 5354off(type: 'error', callback?: ErrorCallback): void 5355 5356取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 5357 5358**系统能力**:SystemCapability.Communication.NetStack 5359 5360**参数:** 5361 5362| 参数名 | 类型 | 必填 | 说明 | 5363| -------- | ------------- | ---- | ------------------------------------ | 5364| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5365| callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | 5366 5367**错误码:** 5368 5369| 错误码ID | 错误信息 | 5370| -------- | ---------------- | 5371| 401 | Parameter error. | 5372 5373**示例:** 5374 5375```ts 5376import { socket } from '@kit.NetworkKit'; 5377 5378let callback = (err: Object) => { 5379 console.error("on error, err: " + JSON.stringify(err)); 5380} 5381let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5382server.on('connect', (connection: socket.LocalSocketConnection) => { 5383 connection.on('error', callback); 5384 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5385 connection.off('error', callback); 5386 connection.off('error'); 5387}); 5388``` 5389 5390## LocalSocket 错误码说明 5391 5392LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。 5393 5394错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 5395 5396## socket.constructTLSSocketInstance<sup>9+</sup> 5397 5398constructTLSSocketInstance(): TLSSocket 5399 5400创建并返回一个TLSSocket对象。 5401 5402**系统能力**:SystemCapability.Communication.NetStack 5403 5404**返回值:** 5405 5406| 类型 | 说明 | 5407| --------------------------------- | ---------------------- | 5408| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 5409 5410**示例:** 5411 5412```ts 5413import { socket } from '@kit.NetworkKit'; 5414 5415let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5416``` 5417 5418## socket.constructTLSSocketInstance<sup>12+</sup> 5419 5420constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket 5421 5422将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。 5423 5424> **说明:** 5425> 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。 5426 5427**系统能力**:SystemCapability.Communication.NetStack 5428 5429**参数:** 5430 5431| 参数名 | 类型 | 必填 | 说明 | 5432|-----------|----| ---- |------------------------| 5433| tcpSocket | [TCPSocket](#tcpsocket) | 是 | 需要进行升级的TCPSocket对象。 | 5434 5435**返回值:** 5436 5437| 类型 | 说明 | 5438| --------------------------------- | ---------------------- | 5439| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 5440 5441**错误码:** 5442 5443| 错误码ID | 错误信息 | 5444|---------|----------------------------------| 5445| 401 | Parameter error. | 5446| 2300002 | System internal error. | 5447| 2303601 | Invalid socket FD. | 5448| 2303602 | Socket is not connected. | 5449 5450**示例:** 5451 5452```ts 5453import { socket } from '@kit.NetworkKit'; 5454import { BusinessError } from '@kit.BasicServicesKit'; 5455 5456let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 5457let tcpconnectoptions: socket.TCPConnectOptions = { 5458 address: { 5459 address: '192.168.xx.xxx', 5460 port: 8080 5461 }, 5462 timeout: 6000 5463} 5464tcp.connect(tcpconnectoptions, (err: BusinessError) => { 5465 if (err) { 5466 console.log('connect fail'); 5467 return; 5468 } 5469 console.log('connect success'); 5470 5471 // 确保TCPSocket已连接后,再升级TLSSocket 5472 let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp); 5473}) 5474``` 5475 5476## TLSSocket<sup>9+</sup> 5477 5478TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。 5479 5480### bind<sup>9+</sup> 5481 5482bind(address: NetAddress, callback: AsyncCallback\<void\>): void 5483 5484绑定IP地址和端口。使用callback方法作为异步方法。 5485 5486> **说明:** 5487> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 5488 5489**需要权限**:ohos.permission.INTERNET 5490 5491**系统能力**:SystemCapability.Communication.NetStack 5492 5493**参数:** 5494 5495| 参数名 | 类型 | 必填 | 说明 | 5496| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 5497| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 5498| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。| 5499 5500**错误码:** 5501 5502| 错误码ID | 错误信息 | 5503| ------- | ----------------------- | 5504| 401 | Parameter error. | 5505| 201 | Permission denied. | 5506| 2303198 | Address already in use. | 5507| 2300002 | System internal error. | 5508 5509**示例:** 5510 5511```ts 5512import { socket } from '@kit.NetworkKit'; 5513import { BusinessError } from '@kit.BasicServicesKit'; 5514 5515let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5516let bindAddr: socket.NetAddress = { 5517 address: '192.168.xx.xxx', 5518 port: 8080 5519} 5520tls.bind(bindAddr, (err: BusinessError) => { 5521 if (err) { 5522 console.log('bind fail'); 5523 return; 5524 } 5525 console.log('bind success'); 5526}); 5527``` 5528 5529### bind<sup>9+</sup> 5530 5531bind(address: NetAddress): Promise\<void\> 5532 5533绑定IP地址和端口。使用Promise方法作为异步方法。 5534 5535> **说明:** 5536> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 5537 5538**需要权限**:ohos.permission.INTERNET 5539 5540**系统能力**:SystemCapability.Communication.NetStack 5541 5542**参数:** 5543 5544| 参数名 | 类型 | 必填 | 说明 | 5545| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 5546| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 5547 5548**返回值:** 5549 5550| 类型 | 说明 | 5551| -------------- | ------------------------------------------------------- | 5552| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 | 5553 5554**错误码:** 5555 5556| 错误码ID | 错误信息 | 5557| ------- | ----------------------- | 5558| 401 | Parameter error. | 5559| 201 | Permission denied. | 5560| 2303198 | Address already in use. | 5561| 2300002 | System internal error. | 5562 5563**示例:** 5564 5565```ts 5566import { socket } from '@kit.NetworkKit'; 5567import { BusinessError } from '@kit.BasicServicesKit'; 5568 5569let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5570let bindAddr: socket.NetAddress = { 5571 address: '192.168.xx.xxx', 5572 port: 8080 5573} 5574tls.bind(bindAddr).then(() => { 5575 console.log('bind success'); 5576}).catch((err: BusinessError) => { 5577 console.log('bind fail'); 5578}); 5579``` 5580 5581### getState<sup>9+</sup> 5582 5583getState(callback: AsyncCallback\<SocketStateBase\>): void 5584 5585在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。 5586 5587**系统能力**:SystemCapability.Communication.NetStack 5588 5589**参数:** 5590 5591| 参数名 | 类型 | 必填 | 说明 | 5592| -------- | ------------------------------------------------------ | ---- | ---------- | 5593| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 | 5594 5595**错误码:** 5596 5597| 错误码ID | 错误信息 | 5598| ------- | ------------------------------ | 5599| 2303188 | Socket operation on non-socket.| 5600| 2300002 | System internal error. | 5601 5602**示例:** 5603 5604```ts 5605import { socket } from '@kit.NetworkKit'; 5606import { BusinessError } from '@kit.BasicServicesKit'; 5607 5608let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5609let bindAddr: socket.NetAddress = { 5610 address: '192.168.xx.xxx', 5611 port: 8080 5612} 5613tls.bind(bindAddr, (err: BusinessError) => { 5614 if (err) { 5615 console.log('bind fail'); 5616 return; 5617 } 5618 console.log('bind success'); 5619}); 5620tls.getState((err: BusinessError, data: socket.SocketStateBase) => { 5621 if (err) { 5622 console.log('getState fail'); 5623 return; 5624 } 5625 console.log('getState success:' + JSON.stringify(data)); 5626}); 5627``` 5628 5629### getState<sup>9+</sup> 5630 5631getState(): Promise\<SocketStateBase\> 5632 5633在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。 5634 5635**系统能力**:SystemCapability.Communication.NetStack 5636 5637**返回值:** 5638 5639| 类型 | 说明 | 5640| ----------------------------------------------- | ----------------------------------------- | 5641| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。| 5642 5643**错误码:** 5644 5645| 错误码ID | 错误信息 | 5646| ------- | ------------------------------ | 5647| 2303188 | Socket operation on non-socket.| 5648| 2300002 | System internal error. | 5649 5650**示例:** 5651 5652```ts 5653import { socket } from '@kit.NetworkKit'; 5654import { BusinessError } from '@kit.BasicServicesKit'; 5655 5656let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5657let bindAddr: socket.NetAddress = { 5658 address: '192.168.xx.xxx', 5659 port: 8080 5660} 5661tls.bind(bindAddr, (err: BusinessError) => { 5662 if (err) { 5663 console.log('bind fail'); 5664 return; 5665 } 5666 console.log('bind success'); 5667}); 5668tls.getState().then(() => { 5669 console.log('getState success'); 5670}).catch((err: BusinessError) => { 5671 console.log('getState fail'); 5672}); 5673``` 5674 5675### setExtraOptions<sup>9+</sup> 5676 5677setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 5678 5679在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 5680 5681**系统能力**:SystemCapability.Communication.NetStack 5682 5683**参数:** 5684 5685| 参数名 | 类型 | 必填 | 说明 | 5686| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 5687| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 5688| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。| 5689 5690**错误码:** 5691 5692| 错误码ID | 错误信息 | 5693| ------- | ----------------------------- | 5694| 401 | Parameter error. | 5695| 2303188 | Socket operation on non-socket.| 5696| 2300002 | System internal error. | 5697 5698**示例:** 5699 5700```ts 5701import { socket } from '@kit.NetworkKit'; 5702import { BusinessError } from '@kit.BasicServicesKit'; 5703 5704let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5705let bindAddr: socket.NetAddress = { 5706 address: '192.168.xx.xxx', 5707 port: 8080 5708} 5709tls.bind(bindAddr, (err: BusinessError) => { 5710 if (err) { 5711 console.log('bind fail'); 5712 return; 5713 } 5714 console.log('bind success'); 5715}); 5716 5717interface SocketLinger { 5718 on: boolean; 5719 linger: number; 5720} 5721 5722let tcpExtraOptions: socket.TCPExtraOptions = { 5723 keepAlive: true, 5724 OOBInline: true, 5725 TCPNoDelay: true, 5726 socketLinger: { on: true, linger: 10 } as SocketLinger, 5727 receiveBufferSize: 1000, 5728 sendBufferSize: 1000, 5729 reuseAddress: true, 5730 socketTimeout: 3000 5731} 5732tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 5733 if (err) { 5734 console.log('setExtraOptions fail'); 5735 return; 5736 } 5737 console.log('setExtraOptions success'); 5738}); 5739``` 5740 5741### setExtraOptions<sup>9+</sup> 5742 5743setExtraOptions(options: TCPExtraOptions): Promise\<void\> 5744 5745在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 5746 5747**系统能力**:SystemCapability.Communication.NetStack 5748 5749**参数:** 5750 5751| 参数名 | 类型 | 必填 | 说明 | 5752| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 5753| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 5754 5755**返回值:** 5756 5757| 类型 | 说明 | 5758| -------------- | --------------------------------------------------- | 5759| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 | 5760 5761**错误码:** 5762 5763| 错误码ID | 错误信息 | 5764| ------- | ------------------------------ | 5765| 401 | Parameter error. | 5766| 2303188 | Socket operation on non-socket.| 5767| 2300002 | System internal error. | 5768 5769**示例:** 5770 5771```ts 5772import { socket } from '@kit.NetworkKit'; 5773import { BusinessError } from '@kit.BasicServicesKit'; 5774 5775let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5776let bindAddr: socket.NetAddress = { 5777 address: '192.168.xx.xxx', 5778 port: 8080 5779} 5780tls.bind(bindAddr, (err: BusinessError) => { 5781 if (err) { 5782 console.log('bind fail'); 5783 return; 5784 } 5785 console.log('bind success'); 5786}); 5787 5788interface SocketLinger { 5789 on: boolean; 5790 linger: number; 5791} 5792 5793let tcpExtraOptions: socket.TCPExtraOptions = { 5794 keepAlive: true, 5795 OOBInline: true, 5796 TCPNoDelay: true, 5797 socketLinger: { on: true, linger: 10 } as SocketLinger, 5798 receiveBufferSize: 1000, 5799 sendBufferSize: 1000, 5800 reuseAddress: true, 5801 socketTimeout: 3000 5802} 5803tls.setExtraOptions(tcpExtraOptions).then(() => { 5804 console.log('setExtraOptions success'); 5805}).catch((err: BusinessError) => { 5806 console.log('setExtraOptions fail'); 5807}); 5808``` 5809 5810### on('message')<sup>9+</sup> 5811 5812on(type: 'message', callback: Callback\<SocketMessageInfo\>): void; 5813 5814订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 5815 5816**系统能力**:SystemCapability.Communication.NetStack 5817 5818**参数:** 5819 5820| 参数名 | 类型 | 必填 | 说明 | 5821| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 5822| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5823| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 5824 5825**错误码:** 5826 5827| 错误码ID | 错误信息 | 5828| ------- | ------------------------------ | 5829| 401 | Parameter error. | 5830 5831**示例:** 5832 5833```ts 5834import { socket } from '@kit.NetworkKit'; 5835import { BusinessError } from '@kit.BasicServicesKit'; 5836 5837let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5838let messageView = ''; 5839tls.on('message', (value: socket.SocketMessageInfo) => { 5840 for (let i: number = 0; i < value.message.byteLength; i++) { 5841 let uint8Array = new Uint8Array(value.message) 5842 let messages = uint8Array[i] 5843 let message = String.fromCharCode(messages); 5844 messageView += message; 5845 } 5846 console.log('on message message: ' + JSON.stringify(messageView)); 5847 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 5848}); 5849``` 5850 5851### off('message')<sup>9+</sup> 5852 5853off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 5854 5855取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 5856 5857**系统能力**:SystemCapability.Communication.NetStack 5858 5859**参数:** 5860 5861| 参数名 | 类型 | 必填 | 说明 | 5862| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 5863| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5864| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 5865 5866**错误码:** 5867 5868| 错误码ID | 错误信息 | 5869| ------- | ------------------------------ | 5870| 401 | Parameter error. | 5871 5872**示例:** 5873 5874```ts 5875import { socket } from '@kit.NetworkKit'; 5876import { BusinessError } from '@kit.BasicServicesKit'; 5877 5878let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5879let messageView = ''; 5880let callback = (value: socket.SocketMessageInfo) => { 5881 for (let i: number = 0; i < value.message.byteLength; i++) { 5882 let uint8Array = new Uint8Array(value.message) 5883 let messages = uint8Array[i] 5884 let message = String.fromCharCode(messages); 5885 messageView += message; 5886 } 5887 console.log('on message message: ' + JSON.stringify(messageView)); 5888 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 5889} 5890tls.on('message', callback); 5891// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5892tls.off('message', callback); 5893``` 5894### on('connect' | 'close')<sup>9+</sup> 5895 5896on(type: 'connect' | 'close', callback: Callback\<void\>): void 5897 5898订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 5899 5900**系统能力**:SystemCapability.Communication.NetStack 5901 5902**参数:** 5903 5904| 参数名 | 类型 | 必填 | 说明 | 5905| -------- | ---------------- | ---- | ------------------------------------------------------------ | 5906| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 5907| callback | Callback\<void\> | 是 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 5908 5909**错误码:** 5910 5911| 错误码ID | 错误信息 | 5912| ------- | ------------------------------ | 5913| 401 | Parameter error. | 5914 5915**示例:** 5916 5917```ts 5918import { socket } from '@kit.NetworkKit'; 5919import { BusinessError } from '@kit.BasicServicesKit'; 5920 5921let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5922tls.on('connect', () => { 5923 console.log("on connect success") 5924}); 5925tls.on('close', () => { 5926 console.log("on close success") 5927}); 5928``` 5929 5930### off('connect' | 'close')<sup>9+</sup> 5931 5932off(type: 'connect' | 'close', callback?: Callback\<void\>): void 5933 5934取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 5935 5936**系统能力**:SystemCapability.Communication.NetStack 5937 5938**参数:** 5939 5940| 参数名 | 类型 | 必填 | 说明 | 5941| -------- | ---------------- | ---- | ------------------------------------------------------------ | 5942| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 5943| callback | Callback\<void\> | 否 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 5944 5945**错误码:** 5946 5947| 错误码ID | 错误信息 | 5948| ------- | ------------------------------ | 5949| 401 | Parameter error. | 5950 5951**示例:** 5952 5953```ts 5954import { socket } from '@kit.NetworkKit'; 5955import { BusinessError } from '@kit.BasicServicesKit'; 5956 5957let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5958let callback1 = () => { 5959 console.log("on connect success"); 5960} 5961tls.on('connect', callback1); 5962// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5963tls.off('connect', callback1); 5964tls.off('connect'); 5965let callback2 = () => { 5966 console.log("on close success"); 5967} 5968tls.on('close', callback2); 5969// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5970tls.off('close', callback2); 5971``` 5972 5973### on('error')<sup>9+</sup> 5974 5975on(type: 'error', callback: ErrorCallback): void 5976 5977订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 5978 5979**系统能力**:SystemCapability.Communication.NetStack 5980 5981**参数:** 5982 5983| 参数名 | 类型 | 必填 | 说明 | 5984| -------- | ------------- | ---- | ------------------------------------ | 5985| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5986| callback | ErrorCallback | 是 | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。 | 5987 5988**错误码:** 5989 5990| 错误码ID | 错误信息 | 5991| ------- | ------------------------------ | 5992| 401 | Parameter error. | 5993 5994**示例:** 5995 5996```ts 5997import { socket } from '@kit.NetworkKit'; 5998import { BusinessError } from '@kit.BasicServicesKit'; 5999 6000let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6001tls.on('error', (err: BusinessError) => { 6002 console.log("on error, err:" + JSON.stringify(err)) 6003}); 6004``` 6005 6006### off('error')<sup>9+</sup> 6007 6008off(type: 'error', callback?: ErrorCallback): void 6009 6010取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 6011 6012**系统能力**:SystemCapability.Communication.NetStack 6013 6014**参数:** 6015 6016| 参数名 | 类型 | 必填 | 说明 | 6017| -------- | ------------- | ---- | ------------------------------------ | 6018| type | string | 是 | 订阅的事件类型。'error':error事件。 | 6019| callback | ErrorCallback | 否 | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。 | 6020 6021**错误码:** 6022 6023| 错误码ID | 错误信息 | 6024| ------- | ------------------------------ | 6025| 401 | Parameter error. | 6026 6027**示例:** 6028 6029```ts 6030import { socket } from '@kit.NetworkKit'; 6031import { BusinessError } from '@kit.BasicServicesKit'; 6032 6033let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6034let callback = (err: BusinessError) => { 6035 console.log("on error, err:" + JSON.stringify(err)); 6036} 6037tls.on('error', callback); 6038// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6039tls.off('error', callback); 6040``` 6041 6042### connect<sup>9+</sup> 6043 6044connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 6045 6046在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。 6047 6048**系统能力**:SystemCapability.Communication.NetStack 6049 6050**参数:** 6051 6052| 参数名 | 类型 | 必填 | 说明 | 6053| -------- | ---------------------------------------| ----| --------------- | 6054| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocket连接所需要的参数。| 6055| callback | AsyncCallback\<void\> | 是 | 回调函数,成功无返回,失败返回错误码、错误信息。| 6056 6057**错误码:** 6058 6059| 错误码ID | 错误信息 | 6060| ------- | -------------------------------------------- | 6061| 401 | Parameter error. | 6062| 2303104 | Interrupted system call. | 6063| 2303109 | Bad file number. | 6064| 2303111 | Resource temporarily unavailable. Try again. | 6065| 2303188 | Socket operation on non-socket. | 6066| 2303191 | Incorrect socket protocol type. | 6067| 2303198 | Address already in use. | 6068| 2303199 | Cannot assign requested address. | 6069| 2303210 | Connection timed out. | 6070| 2303501 | SSL is null. | 6071| 2303502 | An error occurred when reading data on the TLS socket.| 6072| 2303503 | An error occurred when writing data on the TLS socket.| 6073| 2303505 | An error occurred in the TLS system call. | 6074| 2303506 | Failed to close the TLS connection. | 6075| 2300002 | System internal error. | 6076 6077**示例:** 6078 6079```ts 6080import { socket } from '@kit.NetworkKit'; 6081import { BusinessError } from '@kit.BasicServicesKit'; 6082 6083let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 6084let bindAddr: socket.NetAddress = { 6085 address: '0.0.0.0', 6086} 6087tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6088 if (err) { 6089 console.log('bind fail'); 6090 return; 6091 } 6092 console.log('bind success'); 6093}); 6094let twoWayNetAddr: socket.NetAddress = { 6095 address: '192.168.xx.xxx', 6096 port: 8080 6097} 6098let twoWaySecureOptions: socket.TLSSecureOptions = { 6099 key: "xxxx", 6100 cert: "xxxx", 6101 ca: ["xxxx"], 6102 password: "xxxx", 6103 protocols: socket.Protocol.TLSv12, 6104 useRemoteCipherPrefer: true, 6105 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6106 cipherSuite: "AES256-SHA256" 6107} 6108let tlsConnectOptions: socket.TLSConnectOptions = { 6109 address: twoWayNetAddr, 6110 secureOptions: twoWaySecureOptions, 6111 ALPNProtocols: ["spdy/1", "http/1.1"] 6112} 6113 6114tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => { 6115 console.error("connect callback error" + err); 6116}); 6117 6118let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 6119tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6120 if (err) { 6121 console.log('bind fail'); 6122 return; 6123 } 6124 console.log('bind success'); 6125}); 6126let oneWayNetAddr: socket.NetAddress = { 6127 address: '192.168.xx.xxx', 6128 port: 8080 6129} 6130let oneWaySecureOptions: socket.TLSSecureOptions = { 6131 ca: ["xxxx", "xxxx"], 6132 cipherSuite: "AES256-SHA256" 6133} 6134let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6135 address: oneWayNetAddr, 6136 secureOptions: oneWaySecureOptions 6137} 6138tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => { 6139 console.error("connect callback error" + err); 6140}); 6141``` 6142 6143### connect<sup>9+</sup> 6144 6145connect(options: TLSConnectOptions): Promise\<void\> 6146 6147在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。 6148 6149**系统能力**:SystemCapability.Communication.NetStack 6150 6151**参数:** 6152 6153| 参数名 | 类型 | 必填 | 说明 | 6154| -------- | --------------------------------------| ----| --------------- | 6155| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。| 6156 6157**返回值:** 6158 6159| 类型 | 说明 | 6160| ------------------------------------------- | ----------------------------- | 6161| Promise\<void\> | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。| 6162 6163**错误码:** 6164 6165| 错误码ID | 错误信息 | 6166| ------- | -------------------------------------------- | 6167| 401 | Parameter error. | 6168| 2303104 | Interrupted system call. | 6169| 2303109 | Bad file number. | 6170| 2303111 | Resource temporarily unavailable. Try again. | 6171| 2303188 | Socket operation on non-socket. | 6172| 2303191 | Incorrect socket protocol type. | 6173| 2303198 | Address already in use. | 6174| 2303199 | Cannot assign requested address. | 6175| 2303210 | Connection timed out. | 6176| 2303501 | SSL is null. | 6177| 2303502 | An error occurred when reading data on the TLS socket.| 6178| 2303503 | An error occurred when writing data on the TLS socket.| 6179| 2303505 | An error occurred in the TLS system call. | 6180| 2303506 | Failed to close the TLS connection. | 6181| 2300002 | System internal error. | 6182 6183**示例:** 6184 6185```ts 6186import { socket } from '@kit.NetworkKit'; 6187import { BusinessError } from '@kit.BasicServicesKit'; 6188 6189let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 6190let bindAddr: socket.NetAddress = { 6191 address: '0.0.0.0', 6192} 6193tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6194 if (err) { 6195 console.log('bind fail'); 6196 return; 6197 } 6198 console.log('bind success'); 6199}); 6200let twoWayNetAddr: socket.NetAddress = { 6201 address: '192.168.xx.xxx', 6202 port: 8080 6203} 6204let twoWaySecureOptions: socket.TLSSecureOptions = { 6205 key: "xxxx", 6206 cert: "xxxx", 6207 ca: ["xxxx"], 6208 password: "xxxx", 6209 protocols: socket.Protocol.TLSv12, 6210 useRemoteCipherPrefer: true, 6211 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6212 cipherSuite: "AES256-SHA256" 6213} 6214let tlsConnectOptions: socket.TLSConnectOptions = { 6215 address: twoWayNetAddr, 6216 secureOptions: twoWaySecureOptions, 6217 ALPNProtocols: ["spdy/1", "http/1.1"] 6218} 6219 6220tlsTwoWay.connect(tlsConnectOptions).then(() => { 6221 console.log("connect successfully"); 6222}).catch((err: BusinessError) => { 6223 console.log("connect failed " + JSON.stringify(err)); 6224}); 6225 6226let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 6227tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6228 if (err) { 6229 console.log('bind fail'); 6230 return; 6231 } 6232 console.log('bind success'); 6233}); 6234let oneWayNetAddr: socket.NetAddress = { 6235 address: '192.168.xx.xxx', 6236 port: 8080 6237} 6238let oneWaySecureOptions: socket.TLSSecureOptions = { 6239 ca: ["xxxx", "xxxx"], 6240 cipherSuite: "AES256-SHA256" 6241} 6242let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6243 address: oneWayNetAddr, 6244 secureOptions: oneWaySecureOptions 6245} 6246tlsOneWay.connect(tlsOneWayConnectOptions).then(() => { 6247 console.log("connect successfully"); 6248}).catch((err: BusinessError) => { 6249 console.log("connect failed " + JSON.stringify(err)); 6250}); 6251``` 6252 6253### getRemoteAddress<sup>9+</sup> 6254 6255getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 6256 6257在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 6258 6259**系统能力**:SystemCapability.Communication.NetStack 6260 6261**参数:** 6262 6263| 参数名 | 类型 | 必填 | 说明 | 6264| -------- | ------------------------------------------------- | ---- | ---------- | 6265| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 6266 6267**错误码:** 6268 6269| 错误码ID | 错误信息 | 6270| ------- | ----------------------------- | 6271| 2303188 | Socket operation on non-socket.| 6272| 2300002 | System internal error. | 6273 6274**示例:** 6275 6276```ts 6277import { socket } from '@kit.NetworkKit'; 6278import { BusinessError } from '@kit.BasicServicesKit'; 6279 6280let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6281tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 6282 if (err) { 6283 console.log('getRemoteAddress fail'); 6284 return; 6285 } 6286 console.log('getRemoteAddress success:' + JSON.stringify(data)); 6287}); 6288``` 6289 6290### getRemoteAddress<sup>9+</sup> 6291 6292getRemoteAddress(): Promise\<NetAddress\> 6293 6294在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 6295 6296**系统能力**:SystemCapability.Communication.NetStack 6297 6298**返回值:** 6299 6300| 类型 | 说明 | 6301| ------------------------------------------ | ------------------------------------------ | 6302| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 6303 6304**错误码:** 6305 6306| 错误码ID | 错误信息 | 6307| ------- | ------------------------------ | 6308| 2303188 | Socket operation on non-socket.| 6309| 2300002 | System internal error. | 6310 6311**示例:** 6312 6313```ts 6314import { socket } from '@kit.NetworkKit'; 6315import { BusinessError } from '@kit.BasicServicesKit'; 6316 6317let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6318tls.getRemoteAddress().then(() => { 6319 console.log('getRemoteAddress success'); 6320}).catch((err: BusinessError) => { 6321 console.log('getRemoteAddress fail'); 6322}); 6323``` 6324 6325### getCertificate<sup>9+</sup> 6326 6327getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 6328 6329在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。 6330 6331**系统能力**:SystemCapability.Communication.NetStack 6332 6333**参数:** 6334 6335| 参数名 | 类型 | 必填 | 说明 | 6336| -------- | ----------------------------------------| ---- | ---------------| 6337| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。| 6338 6339**错误码:** 6340 6341| 错误码ID | 错误信息 | 6342| ------- | ------------------------------ | 6343| 2303501 | SSL is null. | 6344| 2303504 | An error occurred when verifying the X.509 certificate.| 6345| 2300002 | System internal error. | 6346 6347**示例:** 6348 6349```ts 6350import { socket } from '@kit.NetworkKit'; 6351import { BusinessError } from '@kit.BasicServicesKit'; 6352 6353let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6354tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 6355 if (err) { 6356 console.log("getCertificate callback error = " + err); 6357 } else { 6358 console.log("getCertificate callback = " + data); 6359 } 6360}); 6361``` 6362 6363### getCertificate<sup>9+</sup> 6364 6365getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 6366 6367在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。 6368 6369**系统能力**:SystemCapability.Communication.NetStack 6370 6371**返回值:** 6372 6373| 类型 | 说明 | 6374| -------------- | -------------------- | 6375| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 6376 6377**错误码:** 6378 6379| 错误码ID | 错误信息 | 6380| ------- | ------------------------------ | 6381| 2303501 | SSL is null. | 6382| 2303504 | An error occurred when verifying the X.509 certificate.| 6383| 2300002 | System internal error. | 6384 6385**示例:** 6386 6387```ts 6388import { socket } from '@kit.NetworkKit'; 6389import { BusinessError } from '@kit.BasicServicesKit'; 6390import { util } from '@kit.ArkTS'; 6391 6392let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6393tls.getCertificate().then((data: socket.X509CertRawData) => { 6394 const decoder = util.TextDecoder.create(); 6395 const str = decoder.decodeWithStream(data.data); 6396 console.log("getCertificate: " + str); 6397}).catch((err: BusinessError) => { 6398 console.error("failed" + err); 6399}); 6400``` 6401 6402### getRemoteCertificate<sup>9+</sup> 6403 6404getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 6405 6406在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。 6407 6408**系统能力**:SystemCapability.Communication.NetStack 6409 6410**参数:** 6411 6412| 参数名 | 类型 | 必填 | 说明 | 6413| -------- | ----------------------------------------| ---- | ---------------| 6414| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 | 6415 6416**错误码:** 6417 6418| 错误码ID | 错误信息 | 6419| ------- | ------------------------------ | 6420| 2303501 | SSL is null. | 6421| 2300002 | System internal error. | 6422 6423**示例:** 6424 6425```ts 6426import { socket } from '@kit.NetworkKit'; 6427import { BusinessError } from '@kit.BasicServicesKit'; 6428import { util } from '@kit.ArkTS'; 6429 6430let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6431tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 6432 if (err) { 6433 console.log("getRemoteCertificate callback error = " + err); 6434 } else { 6435 const decoder = util.TextDecoder.create(); 6436 const str = decoder.decodeWithStream(data.data); 6437 console.log("getRemoteCertificate callback = " + str); 6438 } 6439}); 6440``` 6441 6442### getRemoteCertificate<sup>9+</sup> 6443 6444getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 6445 6446在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。 6447 6448**系统能力**:SystemCapability.Communication.NetStack 6449 6450**返回值:** 6451 6452| 类型 | 说明 | 6453| -------------- | -------------------- | 6454| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 | 6455 6456**错误码:** 6457 6458| 错误码ID | 错误信息 | 6459| ------- | ------------------------------ | 6460| 2303501 | SSL is null. | 6461| 2300002 | System internal error. | 6462 6463**示例:** 6464 6465```ts 6466import { socket } from '@kit.NetworkKit'; 6467import { BusinessError } from '@kit.BasicServicesKit'; 6468import { util } from '@kit.ArkTS'; 6469 6470let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6471tls.getRemoteCertificate().then((data: socket.X509CertRawData) => { 6472 const decoder = util.TextDecoder.create(); 6473 const str = decoder.decodeWithStream(data.data); 6474 console.log("getRemoteCertificate:" + str); 6475}).catch((err: BusinessError) => { 6476 console.error("failed" + err); 6477}); 6478``` 6479 6480### getProtocol<sup>9+</sup> 6481 6482getProtocol(callback: AsyncCallback\<string\>): void 6483 6484在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 6485 6486**系统能力**:SystemCapability.Communication.NetStack 6487 6488**参数:** 6489 6490| 参数名 | 类型 | 必填 | 说明 | 6491| -------- | ----------------------------------------| ---- | ---------------| 6492| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。| 6493 6494**错误码:** 6495 6496| 错误码ID | 错误信息 | 6497| ------- | ----------------------------- | 6498| 2303501 | SSL is null. | 6499| 2303505 | An error occurred in the TLS system call. | 6500| 2300002 | System internal error. | 6501 6502**示例:** 6503 6504```ts 6505import { socket } from '@kit.NetworkKit'; 6506import { BusinessError } from '@kit.BasicServicesKit'; 6507 6508let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6509tls.getProtocol((err: BusinessError, data: string) => { 6510 if (err) { 6511 console.log("getProtocol callback error = " + err); 6512 } else { 6513 console.log("getProtocol callback = " + data); 6514 } 6515}); 6516``` 6517 6518### getProtocol<sup>9+</sup> 6519 6520getProtocol():Promise\<string\> 6521 6522在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 6523 6524**系统能力**:SystemCapability.Communication.NetStack 6525 6526**返回值:** 6527 6528| 类型 | 说明 | 6529| -------------- | -------------------- | 6530| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 6531 6532**错误码:** 6533 6534| 错误码ID | 错误信息 | 6535| ------- | ------------------------------ | 6536| 2303501 | SSL is null. | 6537| 2303505 | An error occurred in the TLS system call. | 6538| 2300002 | System internal error. | 6539 6540**示例:** 6541 6542```ts 6543import { socket } from '@kit.NetworkKit'; 6544import { BusinessError } from '@kit.BasicServicesKit'; 6545 6546let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6547tls.getProtocol().then((data: string) => { 6548 console.log(data); 6549}).catch((err: BusinessError) => { 6550 console.error("failed" + err); 6551}); 6552``` 6553 6554### getCipherSuite<sup>9+</sup> 6555 6556getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 6557 6558在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 6559 6560**系统能力**:SystemCapability.Communication.NetStack 6561 6562**参数:** 6563 6564| 参数名 | 类型 | 必填 | 说明 | 6565| -------- | ----------------------------------------| ---- | ---------------| 6566| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 6567 6568**错误码:** 6569 6570| 错误码ID | 错误信息 | 6571| ------- | ------------------------------ | 6572| 2303501 | SSL is null. | 6573| 2303502 | An error occurred when reading data on the TLS socket.| 6574| 2303505 | An error occurred in the TLS system call. | 6575| 2300002 | System internal error. | 6576 6577**示例:** 6578 6579```ts 6580import { socket } from '@kit.NetworkKit'; 6581import { BusinessError } from '@kit.BasicServicesKit'; 6582 6583let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6584tls.getCipherSuite((err: BusinessError, data: Array<string>) => { 6585 if (err) { 6586 console.log("getCipherSuite callback error = " + err); 6587 } else { 6588 console.log("getCipherSuite callback = " + data); 6589 } 6590}); 6591``` 6592 6593### getCipherSuite<sup>9+</sup> 6594 6595getCipherSuite(): Promise\<Array\<string\>\> 6596 6597在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 6598 6599**系统能力**:SystemCapability.Communication.NetStack 6600 6601**返回值:** 6602 6603| 类型 | 说明 | 6604| ---------------------- | --------------------- | 6605| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 6606 6607**错误码:** 6608 6609| 错误码ID | 错误信息 | 6610| ------- | ------------------------------ | 6611| 2303501 | SSL is null. | 6612| 2303502 | An error occurred when reading data on the TLS socket.| 6613| 2303505 | An error occurred in the TLS system call. | 6614| 2300002 | System internal error. | 6615 6616**示例:** 6617 6618```ts 6619import { socket } from '@kit.NetworkKit'; 6620import { BusinessError } from '@kit.BasicServicesKit'; 6621 6622let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6623tls.getCipherSuite().then((data: Array<string>) => { 6624 console.log('getCipherSuite success:' + JSON.stringify(data)); 6625}).catch((err: BusinessError) => { 6626 console.error("failed" + err); 6627}); 6628``` 6629 6630### getSignatureAlgorithms<sup>9+</sup> 6631 6632getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 6633 6634在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。 6635 6636**系统能力**:SystemCapability.Communication.NetStack 6637 6638**参数:** 6639 6640| 参数名 | 类型 | 必填 | 说明 | 6641| -------- | -------------------------------------| ---- | ---------------| 6642| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 6643 6644**错误码:** 6645 6646| 错误码ID | 错误信息 | 6647| ------- | ------------------------------ | 6648| 2303501 | SSL is null. | 6649| 2300002 | System internal error. | 6650 6651**示例:** 6652 6653```ts 6654import { socket } from '@kit.NetworkKit'; 6655import { BusinessError } from '@kit.BasicServicesKit'; 6656 6657let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6658tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 6659 if (err) { 6660 console.log("getSignatureAlgorithms callback error = " + err); 6661 } else { 6662 console.log("getSignatureAlgorithms callback = " + data); 6663 } 6664}); 6665``` 6666 6667### getSignatureAlgorithms<sup>9+</sup> 6668 6669getSignatureAlgorithms(): Promise\<Array\<string\>\> 6670 6671在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。 6672 6673**系统能力**:SystemCapability.Communication.NetStack 6674 6675**返回值:** 6676 6677| 类型 | 说明 | 6678| ---------------------- | -------------------- | 6679| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 6680 6681**错误码:** 6682 6683| 错误码ID | 错误信息 | 6684| ------- | ------------------------------ | 6685| 2303501 | SSL is null. | 6686| 2300002 | System internal error. | 6687 6688**示例:** 6689 6690```ts 6691import { socket } from '@kit.NetworkKit'; 6692import { BusinessError } from '@kit.BasicServicesKit'; 6693 6694let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6695tls.getSignatureAlgorithms().then((data: Array<string>) => { 6696 console.log("getSignatureAlgorithms success" + data); 6697}).catch((err: BusinessError) => { 6698 console.error("failed" + err); 6699}); 6700``` 6701 6702### getLocalAddress<sup>12+</sup> 6703 6704getLocalAddress(): Promise\<NetAddress\> 6705 6706获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。 6707 6708> **说明:** 6709> 在TLSSocketServer通信连接成功之后,才可调用此方法。 6710 6711**系统能力**:SystemCapability.Communication.NetStack 6712 6713**返回值:** 6714 6715| 类型 | 说明 | 6716| -------------- | --------------------------------------------------- | 6717| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 6718 6719**错误码:** 6720 6721| 错误码ID | 错误信息 | 6722| -------- | ------------------------------------------- | 6723| 2300002 | System internal error. | 6724| 2301009 | Bad file descriptor. | 6725| 2303188 | Socket operation on non-socket. | 6726 6727**示例:** 6728 6729```ts 6730import { socket } from '@kit.NetworkKit'; 6731import { BusinessError } from '@kit.BasicServicesKit'; 6732 6733let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6734tls.getLocalAddress().then((localAddress: socket.NetAddress) => { 6735 console.info("Get success: " + JSON.stringify(localAddress)); 6736}).catch((err: BusinessError) => { 6737 console.error("Get failed, error: " + JSON.stringify(err)); 6738}) 6739``` 6740 6741### send<sup>9+</sup> 6742 6743send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 6744 6745在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。 6746 6747**系统能力**:SystemCapability.Communication.NetStack 6748 6749**参数:** 6750 6751| 参数名 | 类型 | 必填 | 说明 | 6752| -------- | -----------------------------| ---- | ---------------| 6753| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 6754| callback | AsyncCallback\<void\> | 是 | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 | 6755 6756**错误码:** 6757 6758| 错误码ID | 错误信息 | 6759| ------- | -------------------------------------------- | 6760| 401 | Parameter error. | 6761| 2303501 | SSL is null. | 6762| 2303503 | An error occurred when writing data on the TLS socket.| 6763| 2303505 | An error occurred in the TLS system call. | 6764| 2303506 | Failed to close the TLS connection. | 6765| 2300002 | System internal error. | 6766 6767**示例:** 6768 6769```ts 6770import { socket } from '@kit.NetworkKit'; 6771import { BusinessError } from '@kit.BasicServicesKit'; 6772 6773let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6774tls.send("xxxx", (err: BusinessError) => { 6775 if (err) { 6776 console.log("send callback error = " + err); 6777 } else { 6778 console.log("send success"); 6779 } 6780}); 6781``` 6782 6783### send<sup>9+</sup> 6784 6785send(data: string \| ArrayBuffer): Promise\<void\> 6786 6787在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 6788 6789**系统能力**:SystemCapability.Communication.NetStack 6790 6791**参数:** 6792 6793| 参数名 | 类型 | 必填 | 说明 | 6794| -------- | -----------------------------| ---- | ---------------| 6795| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 6796 6797**错误码:** 6798 6799| 错误码ID | 错误信息 | 6800| ------- | -------------------------------------------- | 6801| 401 | Parameter error. | 6802| 2303501 | SSL is null. | 6803| 2303503 | An error occurred when writing data on the TLS socket.| 6804| 2303505 | An error occurred in the TLS system call. | 6805| 2303506 | Failed to close the TLS connection. | 6806| 2300002 | System internal error. | 6807 6808**返回值:** 6809 6810| 类型 | 说明 | 6811| -------------- | -------------------- | 6812| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 | 6813 6814**示例:** 6815 6816```ts 6817import { socket } from '@kit.NetworkKit'; 6818import { BusinessError } from '@kit.BasicServicesKit'; 6819 6820let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6821tls.send("xxxx").then(() => { 6822 console.log("send success"); 6823}).catch((err: BusinessError) => { 6824 console.error("failed" + err); 6825}); 6826``` 6827 6828### close<sup>9+</sup> 6829 6830close(callback: AsyncCallback\<void\>): void 6831 6832在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。 6833 6834**系统能力**:SystemCapability.Communication.NetStack 6835 6836**参数:** 6837 6838| 参数名 | 类型 | 必填 | 说明 | 6839| -------- | -----------------------------| ---- | ---------------| 6840| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 | 6841 6842**错误码:** 6843 6844| 错误码ID | 错误信息 | 6845| ------- | -------------------------------------------- | 6846| 401 | Parameter error. | 6847| 2303501 | SSL is null. | 6848| 2303505 | An error occurred in the TLS system call. | 6849| 2303506 | Failed to close the TLS connection. | 6850| 2300002 | System internal error. | 6851 6852**示例:** 6853 6854```ts 6855import { socket } from '@kit.NetworkKit'; 6856import { BusinessError } from '@kit.BasicServicesKit'; 6857 6858let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6859tls.close((err: BusinessError) => { 6860 if (err) { 6861 console.log("close callback error = " + err); 6862 } else { 6863 console.log("close success"); 6864 } 6865}); 6866``` 6867 6868### close<sup>9+</sup> 6869 6870close(): Promise\<void\> 6871 6872在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。 6873 6874**系统能力**:SystemCapability.Communication.NetStack 6875 6876**返回值:** 6877 6878| 类型 | 说明 | 6879| -------------- | -------------------- | 6880| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 | 6881 6882**错误码:** 6883 6884| 错误码ID | 错误信息 | 6885| ------- | -------------------------------------------- | 6886| 401 | Parameter error. | 6887| 2303501 | SSL is null. | 6888| 2303505 | An error occurred in the TLS system call. | 6889| 2303506 | Failed to close the TLS connection. | 6890| 2300002 | System internal error. | 6891 6892**示例:** 6893 6894```ts 6895import { socket } from '@kit.NetworkKit'; 6896import { BusinessError } from '@kit.BasicServicesKit'; 6897 6898let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6899tls.close().then(() => { 6900 console.log("close success"); 6901}).catch((err: BusinessError) => { 6902 console.error("failed" + err); 6903}); 6904``` 6905 6906## TLSConnectOptions<sup>9+</sup> 6907 6908TLS连接的操作。 6909 6910**系统能力**:SystemCapability.Communication.NetStack 6911 6912| 名称 | 类型 | 必填 | 说明 | 6913| -------------- | ------------------------------------- | --- |-------------- | 6914| address | [NetAddress](#netaddress) | 是 | 网关地址。 | 6915| secureOptions | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。| 6916| ALPNProtocols | Array\<string\> | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。 | 6917| skipRemoteValidation<sup>12+</sup> | boolean | 否 | 是否跳过对服务端进行证书认证,默认为false。 | 6918 6919## TLSSecureOptions<sup>9+</sup> 6920 6921TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。 6922 6923**系统能力**:SystemCapability.Communication.NetStack 6924 6925| 名称 | 类型 | 必填 | 说明 | 6926| --------------------- | ------------------------------------------------------ | --- |----------------------------------- | 6927| ca | string \| Array\<string\> | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书<sup>12+</sup>。 | 6928| cert | string | 否 | 本地客户端的数字证书。 | 6929| key | string | 否 | 本地数字证书的私钥。 | 6930| password | string | 否 | 读取私钥的密码。 | 6931| protocols | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。 | 6932| useRemoteCipherPrefer | boolean | 否 | 优先使用对等方的密码套件。 | 6933| signatureAlgorithms | string | 否 | 通信过程中的签名算法,默认为"" 。 | 6934| cipherSuite | string | 否 | 通信过程中的加密套件,默认为"" 。 | 6935| isBidirectionalAuthentication<sup>12+</sup> | boolean | 否 | 用于设置双向认证,默认为false。 | 6936 6937## Protocol<sup>9+</sup> 6938 6939TLS通信的协议版本。 6940 6941**系统能力**:SystemCapability.Communication.NetStack 6942 6943| 名称 | 值 | 说明 | 6944| --------- | --------- |------------------ | 6945| TLSv12 | "TLSv1.2" | 使用TLSv1.2协议通信。 | 6946| TLSv13 | "TLSv1.3" | 使用TLSv1.3协议通信。 | 6947 6948## X509CertRawData<sup>9+</sup> 6949 6950type X509CertRawData = cert.EncodingBlob 6951 6952存储证书的数据。 6953 6954**系统能力**:SystemCapability.Communication.NetStack 6955 6956| 类型 | 说明 | 6957| ---------------- | --------------------------- | 6958| cert.EncodingBlob | 提供证书编码blob类型。 | 6959 6960## socket.constructTLSSocketServerInstance<sup>10+</sup> 6961 6962constructTLSSocketServerInstance(): TLSSocketServer 6963 6964创建并返回一个TLSSocketServer对象。 6965 6966**系统能力**:SystemCapability.Communication.NetStack 6967 6968**返回值:** 6969 6970| 类型 | 说明 | 6971| ------------------------------------ | ---------------------------- | 6972| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 | 6973 6974**示例:** 6975 6976```ts 6977import { socket } from '@kit.NetworkKit'; 6978import { BusinessError } from '@kit.BasicServicesKit'; 6979 6980let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 6981``` 6982 6983## TLSSocketServer<sup>10+</sup> 6984 6985TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。 6986 6987### listen<sup>10+</sup> 6988 6989listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 6990 6991绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。 6992 6993**注意:**IP地址设置为0.0.0.0时,可以监听本机所有地址。 6994 6995**需要权限**:ohos.permission.INTERNET 6996 6997**系统能力**:SystemCapability.Communication.NetStack 6998 6999**参数:** 7000 7001| 参数名 | 类型 | 必填 | 说明 | 7002| -------- | ---------------------------------------- | ---- | ------------------------------------------------ | 7003| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocketServer连接所需要的参数。 | 7004| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 7005 7006**错误码:** 7007 7008| 错误码ID | 错误信息 | 7009| -------- | ------------------------------------------- | 7010| 401 | Parameter error. | 7011| 201 | Permission denied. | 7012| 2300002 | System internal error. | 7013| 2303109 | Bad file number. | 7014| 2303111 | Resource temporarily unavailable. Try again.| 7015| 2303198 | Address already in use. | 7016| 2303199 | Cannot assign requested address. | 7017| 2303501 | SSL is null. | 7018| 2303502 | An error occurred when reading data on the TLS socket.| 7019| 2303503 | An error occurred when writing data on the TLS socket.| 7020| 2303505 | An error occurred in the TLS system call. | 7021| 2303506 | Failed to close the TLS connection. | 7022 7023**示例:** 7024 7025```ts 7026import { socket } from '@kit.NetworkKit'; 7027import { BusinessError } from '@kit.BasicServicesKit'; 7028 7029let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7030let netAddress: socket.NetAddress = { 7031 address: '192.168.xx.xxx', 7032 port: 8080 7033} 7034let tlsSecureOptions: socket.TLSSecureOptions = { 7035 key: "xxxx", 7036 cert: "xxxx", 7037 ca: ["xxxx"], 7038 password: "xxxx", 7039 protocols: socket.Protocol.TLSv12, 7040 useRemoteCipherPrefer: true, 7041 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7042 cipherSuite: "AES256-SHA256" 7043} 7044let tlsConnectOptions: socket.TLSConnectOptions = { 7045 address: netAddress, 7046 secureOptions: tlsSecureOptions, 7047 ALPNProtocols: ["spdy/1", "http/1.1"], 7048 skipRemoteValidation: false 7049} 7050tlsServer.listen(tlsConnectOptions, (err: BusinessError) => { 7051 console.log("listen callback error" + err); 7052}); 7053``` 7054 7055### listen<sup>10+</sup> 7056 7057listen(options: TLSConnectOptions): Promise\<void\> 7058 7059绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。 7060 7061**需要权限**:ohos.permission.INTERNET 7062 7063**系统能力**:SystemCapability.Communication.NetStack 7064 7065**参数:** 7066 7067| 参数名 | 类型 | 必填 | 说明 | 7068| ------- | ---------------------------------------- | ---- | ------------------ | 7069| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。 | 7070 7071**返回值:** 7072 7073| 类型 | 说明 | 7074| --------------- | --------------------------------------------------------- | 7075| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 7076 7077**错误码:** 7078 7079| 错误码ID | 错误信息 | 7080| -------- | ------------------------------------------- | 7081| 401 | Parameter error. | 7082| 201 | Permission denied. | 7083| 2300002 | System internal error. | 7084| 2303109 | Bad file number. | 7085| 2303111 | Resource temporarily unavailable. Try again.| 7086| 2303198 | Address already in use. | 7087| 2303199 | Cannot assign requested address. | 7088| 2303501 | SSL is null. | 7089| 2303502 | An error occurred when reading data on the TLS socket.| 7090| 2303503 | An error occurred when writing data on the TLS socket.| 7091| 2303505 | An error occurred in the TLS system call. | 7092| 2303506 | Failed to close the TLS connection. | 7093 7094**示例:** 7095 7096```ts 7097import { socket } from '@kit.NetworkKit'; 7098import { BusinessError } from '@kit.BasicServicesKit'; 7099 7100let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7101let netAddress: socket.NetAddress = { 7102 address: '192.168.xx.xxx', 7103 port: 8080 7104} 7105let tlsSecureOptions: socket.TLSSecureOptions = { 7106 key: "xxxx", 7107 cert: "xxxx", 7108 ca: ["xxxx"], 7109 password: "xxxx", 7110 protocols: socket.Protocol.TLSv12, 7111 useRemoteCipherPrefer: true, 7112 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7113 cipherSuite: "AES256-SHA256" 7114} 7115let tlsConnectOptions: socket.TLSConnectOptions = { 7116 address: netAddress, 7117 secureOptions: tlsSecureOptions, 7118 ALPNProtocols: ["spdy/1", "http/1.1"], 7119 skipRemoteValidation: false 7120} 7121tlsServer.listen(tlsConnectOptions).then(() => { 7122 console.log("listen callback success"); 7123}).catch((err: BusinessError) => { 7124 console.log("failed: " + JSON.stringify(err)); 7125}); 7126``` 7127 7128### getState<sup>10+</sup> 7129 7130getState(callback: AsyncCallback\<SocketStateBase\>): void 7131 7132在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。 7133 7134> **说明:** 7135> listen方法调用成功后,才可调用此方法。 7136 7137**系统能力**:SystemCapability.Communication.NetStack 7138 7139**参数:** 7140 7141| 参数名 | 类型 | 必填 | 说明 | 7142| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 7143| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 | 7144 7145**错误码:** 7146 7147| 错误码ID | 错误信息 | 7148| -------- | ------------------------------- | 7149| 401 | Parameter error. | 7150| 2303188 | Socket operation on non-socket. | 7151| 2300002 | System internal error. | 7152 7153**示例:** 7154 7155```ts 7156import { socket } from '@kit.NetworkKit'; 7157import { BusinessError } from '@kit.BasicServicesKit'; 7158 7159let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7160let netAddress: socket.NetAddress = { 7161 address: '192.168.xx.xxx', 7162 port: 8080 7163} 7164let tlsSecureOptions: socket.TLSSecureOptions = { 7165 key: "xxxx", 7166 cert: "xxxx", 7167 ca: ["xxxx"], 7168 password: "xxxx", 7169 protocols: socket.Protocol.TLSv12, 7170 useRemoteCipherPrefer: true, 7171 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7172 cipherSuite: "AES256-SHA256" 7173} 7174let tlsConnectOptions: socket.TLSConnectOptions = { 7175 address: netAddress, 7176 secureOptions: tlsSecureOptions, 7177 ALPNProtocols: ["spdy/1", "http/1.1"] 7178} 7179tlsServer.listen(tlsConnectOptions).then(() => { 7180 console.log("listen callback success"); 7181}).catch((err: BusinessError) => { 7182 console.log("failed: " + JSON.stringify(err)); 7183}); 7184tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 7185 if (err) { 7186 console.log('getState fail'); 7187 return; 7188 } 7189 console.log('getState success:' + JSON.stringify(data)); 7190}); 7191``` 7192 7193### getState<sup>10+</sup> 7194 7195getState(): Promise\<SocketStateBase\> 7196 7197在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。 7198 7199> **说明:** 7200> listen方法调用成功后,才可调用此方法。 7201 7202**系统能力**:SystemCapability.Communication.NetStack 7203 7204**返回值:** 7205 7206| 类型 | 说明 | 7207| --------------------------------------------- | ----------------------------------------------------------- | 7208| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 | 7209 7210**错误码:** 7211 7212| 错误码ID | 错误信息 | 7213| -------- | ------------------------------- | 7214| 2303188 | Socket operation on non-socket. | 7215| 2300002 | System internal error. | 7216 7217**示例:** 7218 7219```ts 7220import { socket } from '@kit.NetworkKit'; 7221import { BusinessError } from '@kit.BasicServicesKit'; 7222 7223let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7224let netAddress: socket.NetAddress = { 7225 address: '192.168.xx.xxx', 7226 port: 8080 7227} 7228let tlsSecureOptions: socket.TLSSecureOptions = { 7229 key: "xxxx", 7230 cert: "xxxx", 7231 ca: ["xxxx"], 7232 password: "xxxx", 7233 protocols: socket.Protocol.TLSv12, 7234 useRemoteCipherPrefer: true, 7235 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7236 cipherSuite: "AES256-SHA256" 7237} 7238let tlsConnectOptions: socket.TLSConnectOptions = { 7239 address: netAddress, 7240 secureOptions: tlsSecureOptions, 7241 ALPNProtocols: ["spdy/1", "http/1.1"] 7242} 7243tlsServer.listen(tlsConnectOptions).then(() => { 7244 console.log("listen callback success"); 7245}).catch((err: BusinessError) => { 7246 console.log("failed: " + JSON.stringify(err)); 7247}); 7248tlsServer.getState().then(() => { 7249 console.log('getState success'); 7250}).catch((err: BusinessError) => { 7251 console.log('getState fail'); 7252}); 7253``` 7254 7255### setExtraOptions<sup>10+</sup> 7256 7257setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 7258 7259在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。 7260 7261> **说明:** 7262> listen方法调用成功后,才可调用此方法。 7263 7264**系统能力**:SystemCapability.Communication.NetStack 7265 7266**参数:** 7267 7268| 参数名 | 类型 | 必填 | 说明 | 7269| -------- | ------------------------------------ | ---- | ------------------------------------------------ | 7270| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 7271| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 7272 7273**错误码:** 7274 7275| 错误码ID | 错误信息 | 7276| -------- | ------------------------------- | 7277| 401 | Parameter error. | 7278| 2303188 | Socket operation on non-socket. | 7279| 2300002 | System internal error. | 7280 7281**示例:** 7282 7283```ts 7284import { socket } from '@kit.NetworkKit'; 7285import { BusinessError } from '@kit.BasicServicesKit'; 7286 7287let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7288let netAddress: socket.NetAddress = { 7289 address: '192.168.xx.xxx', 7290 port: 8080 7291} 7292let tlsSecureOptions: socket.TLSSecureOptions = { 7293 key: "xxxx", 7294 cert: "xxxx", 7295 ca: ["xxxx"], 7296 password: "xxxx", 7297 protocols: socket.Protocol.TLSv12, 7298 useRemoteCipherPrefer: true, 7299 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7300 cipherSuite: "AES256-SHA256" 7301} 7302let tlsConnectOptions: socket.TLSConnectOptions = { 7303 address: netAddress, 7304 secureOptions: tlsSecureOptions, 7305 ALPNProtocols: ["spdy/1", "http/1.1"] 7306} 7307tlsServer.listen(tlsConnectOptions).then(() => { 7308 console.log("listen callback success"); 7309}).catch((err: BusinessError) => { 7310 console.log("failed: " + JSON.stringify(err)); 7311}); 7312 7313interface SocketLinger { 7314 on: boolean; 7315 linger: number; 7316} 7317 7318let tcpExtraOptions: socket.TCPExtraOptions = { 7319 keepAlive: true, 7320 OOBInline: true, 7321 TCPNoDelay: true, 7322 socketLinger: { on: true, linger: 10 } as SocketLinger, 7323 receiveBufferSize: 1000, 7324 sendBufferSize: 1000, 7325 reuseAddress: true, 7326 socketTimeout: 3000 7327} 7328tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 7329 if (err) { 7330 console.log('setExtraOptions fail'); 7331 return; 7332 } 7333 console.log('setExtraOptions success'); 7334}); 7335``` 7336 7337### setExtraOptions<sup>10+</sup> 7338 7339setExtraOptions(options: TCPExtraOptions): Promise\<void\> 7340 7341在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。 7342 7343> **说明:** 7344> listen方法调用成功后,才可调用此方法。 7345 7346**系统能力**:SystemCapability.Communication.NetStack 7347 7348**参数:** 7349 7350| 参数名 | 类型 | 必填 | 说明 | 7351| ------- | ------------------------------------ | ---- | ------------------------------- | 7352| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 7353 7354**返回值:** 7355 7356| 类型 | 说明 | 7357| -------------- | -------------------------------------------------------- | 7358| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 7359 7360**错误码:** 7361 7362| 错误码ID | 错误信息 | 7363| -------- | ------------------------------- | 7364| 401 | Parameter error. | 7365| 2303188 | Socket operation on non-socket. | 7366| 2300002 | System internal error. | 7367 7368**示例:** 7369 7370```ts 7371import { socket } from '@kit.NetworkKit'; 7372import { BusinessError } from '@kit.BasicServicesKit'; 7373 7374let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7375let netAddress: socket.NetAddress = { 7376 address: '192.168.xx.xxx', 7377 port: 8080 7378} 7379let tlsSecureOptions: socket.TLSSecureOptions = { 7380 key: "xxxx", 7381 cert: "xxxx", 7382 ca: ["xxxx"], 7383 password: "xxxx", 7384 protocols: socket.Protocol.TLSv12, 7385 useRemoteCipherPrefer: true, 7386 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7387 cipherSuite: "AES256-SHA256" 7388} 7389let tlsConnectOptions: socket.TLSConnectOptions = { 7390 address: netAddress, 7391 secureOptions: tlsSecureOptions, 7392 ALPNProtocols: ["spdy/1", "http/1.1"] 7393} 7394tlsServer.listen(tlsConnectOptions).then(() => { 7395 console.log("listen callback success"); 7396}).catch((err: BusinessError) => { 7397 console.log("failed: " + JSON.stringify(err)); 7398}); 7399 7400interface SocketLinger { 7401 on: boolean; 7402 linger: number; 7403} 7404 7405let tcpExtraOptions: socket.TCPExtraOptions = { 7406 keepAlive: true, 7407 OOBInline: true, 7408 TCPNoDelay: true, 7409 socketLinger: { on: true, linger: 10 } as SocketLinger, 7410 receiveBufferSize: 1000, 7411 sendBufferSize: 1000, 7412 reuseAddress: true, 7413 socketTimeout: 3000 7414} 7415tlsServer.setExtraOptions(tcpExtraOptions).then(() => { 7416 console.log('setExtraOptions success'); 7417}).catch((err: BusinessError) => { 7418 console.log('setExtraOptions fail'); 7419}); 7420``` 7421 7422### getCertificate<sup>10+</sup> 7423 7424getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 7425 7426在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。 7427 7428> **说明:** 7429> listen方法调用成功后,才可调用此方法。 7430 7431**系统能力**:SystemCapability.Communication.NetStack 7432 7433**参数:** 7434 7435| 参数名 | 类型 | 必填 | 说明 | 7436| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- | 7437| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 | 7438 7439**错误码:** 7440 7441| 错误码ID | 错误信息 | 7442| -------- | ---------------------- | 7443| 401 | Parameter error. | 7444| 2303501 | SSL is null. | 7445| 2303504 | An error occurred when verifying the X.509 certificate. | 7446| 2300002 | System internal error. | 7447 7448**示例:** 7449 7450```ts 7451import { socket } from '@kit.NetworkKit'; 7452import { BusinessError } from '@kit.BasicServicesKit'; 7453import { util } from '@kit.ArkTS'; 7454 7455let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7456let netAddress: socket.NetAddress = { 7457 address: '192.168.xx.xxx', 7458 port: 8080 7459} 7460let tlsSecureOptions: socket.TLSSecureOptions = { 7461 key: "xxxx", 7462 cert: "xxxx", 7463 ca: ["xxxx"], 7464 password: "xxxx", 7465 protocols: socket.Protocol.TLSv12, 7466 useRemoteCipherPrefer: true, 7467 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7468 cipherSuite: "AES256-SHA256" 7469} 7470let tlsConnectOptions: socket.TLSConnectOptions = { 7471 address: netAddress, 7472 secureOptions: tlsSecureOptions, 7473 ALPNProtocols: ["spdy/1", "http/1.1"] 7474} 7475tlsServer.listen(tlsConnectOptions).then(() => { 7476 console.log("listen callback success"); 7477}).catch((err: BusinessError) => { 7478 console.log("failed: " + JSON.stringify(err)); 7479}); 7480tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 7481 if (err) { 7482 console.log("getCertificate callback error = " + err); 7483 } else { 7484 const decoder = util.TextDecoder.create(); 7485 const str = decoder.decodeWithStream(data.data); 7486 console.log("getCertificate callback: " + str); 7487 } 7488}); 7489``` 7490 7491### getCertificate<sup>10+</sup> 7492 7493getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 7494 7495在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。 7496 7497> **说明:** 7498> listen方法调用成功后,才可调用此方法。 7499 7500**系统能力**:SystemCapability.Communication.NetStack 7501 7502**返回值:** 7503 7504| 类型 | 说明 | 7505| ----------------------------------------------- | ------------------------------------------------------------ | 7506| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 7507 7508**错误码:** 7509 7510| 错误码ID | 错误信息 | 7511| -------- | ---------------------- | 7512| 2303501 | SSL is null. | 7513| 2303504 | An error occurred when verifying the X.509 certificate. | 7514| 2300002 | System internal error. | 7515 7516**示例:** 7517 7518```ts 7519import { socket } from '@kit.NetworkKit'; 7520import { BusinessError } from '@kit.BasicServicesKit'; 7521import { util } from '@kit.ArkTS'; 7522 7523let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7524let netAddress: socket.NetAddress = { 7525 address: '192.168.xx.xxx', 7526 port: 8080 7527} 7528let tlsSecureOptions: socket.TLSSecureOptions = { 7529 key: "xxxx", 7530 cert: "xxxx", 7531 ca: ["xxxx"], 7532 password: "xxxx", 7533 protocols: socket.Protocol.TLSv12, 7534 useRemoteCipherPrefer: true, 7535 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7536 cipherSuite: "AES256-SHA256" 7537} 7538let tlsConnectOptions: socket.TLSConnectOptions = { 7539 address: netAddress, 7540 secureOptions: tlsSecureOptions, 7541 ALPNProtocols: ["spdy/1", "http/1.1"] 7542} 7543tlsServer.listen(tlsConnectOptions).then(() => { 7544 console.log("listen callback success"); 7545}).catch((err: BusinessError) => { 7546 console.log("failed: " + JSON.stringify(err)); 7547}); 7548tlsServer.getCertificate().then((data: socket.X509CertRawData) => { 7549 const decoder = util.TextDecoder.create(); 7550 const str = decoder.decodeWithStream(data.data); 7551 console.log("getCertificate: " + str); 7552}).catch((err: BusinessError) => { 7553 console.error("failed" + err); 7554}); 7555``` 7556 7557### getProtocol<sup>10+</sup> 7558 7559getProtocol(callback: AsyncCallback\<string\>): void 7560 7561在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 7562 7563> **说明:** 7564> listen方法调用成功后,才可调用此方法。 7565 7566**系统能力**:SystemCapability.Communication.NetStack 7567 7568**参数:** 7569 7570| 参数名 | 类型 | 必填 | 说明 | 7571| -------- | ----------------------- | ---- | ---------------------------------------------------- | 7572| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。 | 7573 7574**错误码:** 7575 7576| 错误码ID | 错误信息 | 7577| -------- | -------------------------------------- | 7578| 401 | Parameter error. | 7579| 2303501 | SSL is null. | 7580| 2303505 | An error occurred in the TLS system call. | 7581| 2300002 | System internal error. | 7582 7583**示例:** 7584 7585```ts 7586import { socket } from '@kit.NetworkKit'; 7587import { BusinessError } from '@kit.BasicServicesKit'; 7588 7589let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7590let netAddress: socket.NetAddress = { 7591 address: '192.168.xx.xxx', 7592 port: 8080 7593} 7594let tlsSecureOptions: socket.TLSSecureOptions = { 7595 key: "xxxx", 7596 cert: "xxxx", 7597 ca: ["xxxx"], 7598 password: "xxxx", 7599 protocols: socket.Protocol.TLSv12, 7600 useRemoteCipherPrefer: true, 7601 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7602 cipherSuite: "AES256-SHA256" 7603} 7604let tlsConnectOptions: socket.TLSConnectOptions = { 7605 address: netAddress, 7606 secureOptions: tlsSecureOptions, 7607 ALPNProtocols: ["spdy/1", "http/1.1"] 7608} 7609tlsServer.listen(tlsConnectOptions).then(() => { 7610 console.log("listen callback success"); 7611}).catch((err: BusinessError) => { 7612 console.log("failed: " + JSON.stringify(err)); 7613}); 7614tlsServer.getProtocol((err: BusinessError, data: string) => { 7615 if (err) { 7616 console.log("getProtocol callback error = " + err); 7617 } else { 7618 console.log("getProtocol callback = " + data); 7619 } 7620}); 7621``` 7622 7623### getProtocol<sup>10+</sup> 7624 7625getProtocol():Promise\<string\> 7626 7627在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 7628 7629> **说明:** 7630> listen方法调用成功后,才可调用此方法。 7631 7632**系统能力**:SystemCapability.Communication.NetStack 7633 7634**返回值:** 7635 7636| 类型 | 说明 | 7637| ----------------- | ------------------------------------------------------- | 7638| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 7639 7640**错误码:** 7641 7642| 错误码ID | 错误信息 | 7643| -------- | -------------------------------------- | 7644| 2303501 | SSL is null. | 7645| 2303505 | An error occurred in the TLS system call. | 7646| 2300002 | System internal error. | 7647 7648**示例:** 7649 7650```ts 7651import { socket } from '@kit.NetworkKit'; 7652import { BusinessError } from '@kit.BasicServicesKit'; 7653 7654let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7655let netAddress: socket.NetAddress = { 7656 address: '192.168.xx.xxx', 7657 port: 8080 7658} 7659let tlsSecureOptions: socket.TLSSecureOptions = { 7660 key: "xxxx", 7661 cert: "xxxx", 7662 ca: ["xxxx"], 7663 password: "xxxx", 7664 protocols: socket.Protocol.TLSv12, 7665 useRemoteCipherPrefer: true, 7666 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7667 cipherSuite: "AES256-SHA256" 7668} 7669let tlsConnectOptions: socket.TLSConnectOptions = { 7670 address: netAddress, 7671 secureOptions: tlsSecureOptions, 7672 ALPNProtocols: ["spdy/1", "http/1.1"] 7673} 7674tlsServer.listen(tlsConnectOptions).then(() => { 7675 console.log("listen callback success"); 7676}).catch((err: BusinessError) => { 7677 console.log("failed: " + JSON.stringify(err)); 7678}); 7679tlsServer.getProtocol().then((data: string) => { 7680 console.log(data); 7681}).catch((err: BusinessError) => { 7682 console.error("failed" + err); 7683}); 7684``` 7685 7686### getLocalAddress<sup>12+</sup> 7687 7688getLocalAddress(): Promise\<NetAddress\> 7689 7690获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。 7691 7692> **说明:** 7693> 在TLSSocketServer通信连接成功之后,才可调用此方法。 7694 7695**系统能力**:SystemCapability.Communication.NetStack 7696 7697**返回值:** 7698 7699| 类型 | 说明 | 7700| -------------- | --------------------------------------------------- | 7701| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 7702 7703**错误码:** 7704 7705| 错误码ID | 错误信息 | 7706| -------- | ------------------------------------------- | 7707| 2300002 | System internal error. | 7708| 2301009 | Bad file descriptor. | 7709| 2303188 | Socket operation on non-socket. | 7710 7711**示例:** 7712 7713```ts 7714import { socket } from '@kit.NetworkKit'; 7715import { BusinessError } from '@kit.BasicServicesKit'; 7716 7717let tlsServer: socket.TLSSocket = socket.constructTLSSocketServerInstance(); 7718tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 7719 console.info("Get success: " + JSON.stringify(localAddress)); 7720}).catch((err: BusinessError) => { 7721 console.error("Get failed, error: " + JSON.stringify(err)); 7722}) 7723``` 7724 7725### on('connect')<sup>10+</sup> 7726 7727on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void 7728 7729订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 7730 7731> **说明:** 7732> listen方法调用成功后,才可调用此方法。 7733 7734**系统能力**:SystemCapability.Communication.NetStack 7735 7736**参数:** 7737 7738| 参数名 | 类型 | 必填 | 说明 | 7739| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 7740| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 7741| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 7742 7743**错误码:** 7744 7745| 错误码ID | 错误信息 | 7746| -------- | ---------------- | 7747| 401 | Parameter error. | 7748 7749**示例:** 7750 7751```ts 7752import { socket } from '@kit.NetworkKit'; 7753import { BusinessError } from '@kit.BasicServicesKit'; 7754 7755let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7756let netAddress: socket.NetAddress = { 7757 address: '192.168.xx.xxx', 7758 port: 8080 7759} 7760let tlsSecureOptions: socket.TLSSecureOptions = { 7761 key: "xxxx", 7762 cert: "xxxx", 7763 ca: ["xxxx"], 7764 password: "xxxx", 7765 protocols: socket.Protocol.TLSv12, 7766 useRemoteCipherPrefer: true, 7767 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7768 cipherSuite: "AES256-SHA256" 7769} 7770let tlsConnectOptions: socket.TLSConnectOptions = { 7771 address: netAddress, 7772 secureOptions: tlsSecureOptions, 7773 ALPNProtocols: ["spdy/1", "http/1.1"] 7774} 7775tlsServer.listen(tlsConnectOptions).then(() => { 7776 console.log("listen callback success"); 7777}).catch((err: BusinessError) => { 7778 console.log("failed: " + JSON.stringify(err)); 7779}); 7780tlsServer.on('connect', (data: socket.TLSSocketConnection) => { 7781 console.log(JSON.stringify(data)) 7782}); 7783``` 7784 7785### off('connect')<sup>10+</sup> 7786 7787off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void 7788 7789取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 7790 7791> **说明:** 7792> listen方法调用成功后,才可调用此方法。 7793> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7794 7795**系统能力**:SystemCapability.Communication.NetStack 7796 7797**参数:** 7798 7799| 参数名 | 类型 | 必填 | 说明 | 7800| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 7801| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 7802| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 7803 7804**错误码:** 7805 7806| 错误码ID | 错误信息 | 7807| -------- | ---------------- | 7808| 401 | Parameter error. | 7809 7810**示例:** 7811 7812```ts 7813import { socket } from '@kit.NetworkKit'; 7814import { BusinessError } from '@kit.BasicServicesKit'; 7815 7816let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7817let netAddress: socket.NetAddress = { 7818 address: '192.168.xx.xxx', 7819 port: 8080 7820} 7821let tlsSecureOptions: socket.TLSSecureOptions = { 7822 key: "xxxx", 7823 cert: "xxxx", 7824 ca: ["xxxx"], 7825 password: "xxxx", 7826 protocols: socket.Protocol.TLSv12, 7827 useRemoteCipherPrefer: true, 7828 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7829 cipherSuite: "AES256-SHA256" 7830} 7831let tlsConnectOptions: socket.TLSConnectOptions = { 7832 address: netAddress, 7833 secureOptions: tlsSecureOptions, 7834 ALPNProtocols: ["spdy/1", "http/1.1"] 7835} 7836tlsServer.listen(tlsConnectOptions).then(() => { 7837 console.log("listen callback success"); 7838}).catch((err: BusinessError) => { 7839 console.log("failed: " + JSON.stringify(err)); 7840}); 7841 7842let callback = (data: socket.TLSSocketConnection) => { 7843 console.log('on connect message: ' + JSON.stringify(data)); 7844} 7845tlsServer.on('connect', callback); 7846// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7847tlsServer.off('connect', callback); 7848tlsServer.off('connect'); 7849``` 7850 7851### on('error')<sup>10+</sup> 7852 7853on(type: 'error', callback: ErrorCallback): void 7854 7855订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 7856 7857> **说明:** 7858> listen方法调用成功后,才可调用此方法。 7859 7860**系统能力**:SystemCapability.Communication.NetStack 7861 7862**参数:** 7863 7864| 参数名 | 类型 | 必填 | 说明 | 7865| -------- | ------------- | ---- | ------------------------------------ | 7866| type | string | 是 | 订阅的事件类型。'error':error事件。 | 7867| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 7868 7869**错误码:** 7870 7871| 错误码ID | 错误信息 | 7872| -------- | ---------------- | 7873| 401 | Parameter error. | 7874 7875**示例:** 7876 7877```ts 7878import { socket } from '@kit.NetworkKit'; 7879import { BusinessError } from '@kit.BasicServicesKit'; 7880 7881let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7882let netAddress: socket.NetAddress = { 7883 address: '192.168.xx.xxx', 7884 port: 8080 7885} 7886let tlsSecureOptions: socket.TLSSecureOptions = { 7887 key: "xxxx", 7888 cert: "xxxx", 7889 ca: ["xxxx"], 7890 password: "xxxx", 7891 protocols: socket.Protocol.TLSv12, 7892 useRemoteCipherPrefer: true, 7893 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7894 cipherSuite: "AES256-SHA256" 7895} 7896let tlsConnectOptions: socket.TLSConnectOptions = { 7897 address: netAddress, 7898 secureOptions: tlsSecureOptions, 7899 ALPNProtocols: ["spdy/1", "http/1.1"] 7900} 7901tlsServer.listen(tlsConnectOptions).then(() => { 7902 console.log("listen callback success"); 7903}).catch((err: BusinessError) => { 7904 console.log("failed: " + JSON.stringify(err)); 7905}); 7906tlsServer.on('error', (err: BusinessError) => { 7907 console.log("on error, err:" + JSON.stringify(err)) 7908}); 7909``` 7910 7911### off('error')<sup>10+</sup> 7912 7913off(type: 'error', callback?: ErrorCallback): void 7914 7915取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 7916 7917> **说明:** 7918> listen方法调用成功后,才可调用此方法。 7919> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7920 7921**系统能力**:SystemCapability.Communication.NetStack 7922 7923**参数:** 7924 7925| 参数名 | 类型 | 必填 | 说明 | 7926| -------- | ------------- | ---- | ------------------------------------ | 7927| type | string | 是 | 订阅的事件类型。'error':error事件。 | 7928| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 7929 7930**错误码:** 7931 7932| 错误码ID | 错误信息 | 7933| -------- | ---------------- | 7934| 401 | Parameter error. | 7935 7936**示例:** 7937 7938```ts 7939import { socket } from '@kit.NetworkKit'; 7940import { BusinessError } from '@kit.BasicServicesKit'; 7941 7942let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7943let netAddress: socket.NetAddress = { 7944 address: '192.168.xx.xxx', 7945 port: 8080 7946} 7947let tlsSecureOptions: socket.TLSSecureOptions = { 7948 key: "xxxx", 7949 cert: "xxxx", 7950 ca: ["xxxx"], 7951 password: "xxxx", 7952 protocols: socket.Protocol.TLSv12, 7953 useRemoteCipherPrefer: true, 7954 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7955 cipherSuite: "AES256-SHA256" 7956} 7957let tlsConnectOptions: socket.TLSConnectOptions = { 7958 address: netAddress, 7959 secureOptions: tlsSecureOptions, 7960 ALPNProtocols: ["spdy/1", "http/1.1"] 7961} 7962tlsServer.listen(tlsConnectOptions).then(() => { 7963 console.log("listen callback success"); 7964}).catch((err: BusinessError) => { 7965 console.log("failed: " + JSON.stringify(err)); 7966}); 7967 7968let callback = (err: BusinessError) => { 7969 console.log("on error, err:" + JSON.stringify(err)); 7970} 7971tlsServer.on('error', callback); 7972// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7973tlsServer.off('error', callback); 7974tlsServer.off('error'); 7975``` 7976 7977## TLSSocketConnection<sup>10+</sup> 7978 7979TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。 7980 7981> **说明:** 7982> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。 7983 7984**系统能力**:SystemCapability.Communication.NetStack 7985 7986### 属性 7987 7988| 名称 | 类型 | 必填 | 说明 | 7989| -------- | ------ | ---- | ------------------------------------- | 7990| clientId | number | 是 | 客户端与TLSSocketServer建立连接的id。 | 7991 7992### send<sup>10+</sup> 7993 7994send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 7995 7996在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。 7997 7998**系统能力**:SystemCapability.Communication.NetStack 7999 8000**参数:** 8001 8002| 参数名 | 类型 | 必填 | 说明 | 8003| -------- | --------------------- | ---- | ------------------------------------------------ | 8004| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 8005| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 8006 8007**错误码:** 8008 8009| 错误码ID | 错误信息 | 8010| -------- | -------------------------------------- | 8011| 401 | Parameter error. | 8012| 2303501 | SSL is null. | 8013| 2303503 | An error occurred when writing data on the TLS socket.| 8014| 2303505 | An error occurred in the TLS system call.| 8015| 2303506 | Failed to close the TLS connection. | 8016| 2300002 | System internal error. | 8017 8018**示例:** 8019 8020```ts 8021import { socket } from '@kit.NetworkKit'; 8022import { BusinessError } from '@kit.BasicServicesKit'; 8023 8024let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8025let netAddress: socket.NetAddress = { 8026 address: '192.168.xx.xxx', 8027 port: 8080 8028} 8029let tlsSecureOptions: socket.TLSSecureOptions = { 8030 key: "xxxx", 8031 cert: "xxxx", 8032 ca: ["xxxx"], 8033 password: "xxxx", 8034 protocols: socket.Protocol.TLSv12, 8035 useRemoteCipherPrefer: true, 8036 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8037 cipherSuite: "AES256-SHA256" 8038} 8039let tlsConnectOptions: socket.TLSConnectOptions = { 8040 address: netAddress, 8041 secureOptions: tlsSecureOptions, 8042 ALPNProtocols: ["spdy/1", "http/1.1"] 8043} 8044tlsServer.listen(tlsConnectOptions).then(() => { 8045 console.log("listen callback success"); 8046}).catch((err: BusinessError) => { 8047 console.log("failed" + err); 8048}); 8049 8050tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8051 client.send('Hello, client!', (err: BusinessError) => { 8052 if (err) { 8053 console.log('send fail'); 8054 return; 8055 } 8056 console.log('send success'); 8057 }); 8058}); 8059``` 8060 8061### send<sup>10+</sup> 8062 8063send(data: string \| ArrayBuffer): Promise\<void\> 8064 8065在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 8066 8067**系统能力**:SystemCapability.Communication.NetStack 8068 8069**参数:** 8070 8071| 参数名 | 类型 | 必填 | 说明 | 8072| ------ | ------ | ---- | ------------------------------------- | 8073| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 8074 8075**返回值:** 8076 8077| 类型 | 说明 | 8078| --------------- | --------------------------------------------------------- | 8079| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 8080 8081**错误码:** 8082 8083| 错误码ID | 错误信息 | 8084| -------- | -------------------------------------- | 8085| 401 | Parameter error. | 8086| 2303501 | SSL is null. | 8087| 2303503 | An error occurred when writing data on the TLS socket.| 8088| 2303505 | An error occurred in the TLS system call.| 8089| 2303506 | Failed to close the TLS connection. | 8090| 2300002 | System internal error. | 8091 8092**示例:** 8093 8094```ts 8095import { socket } from '@kit.NetworkKit'; 8096import { BusinessError } from '@kit.BasicServicesKit'; 8097 8098let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8099let netAddress: socket.NetAddress = { 8100 address: '192.168.xx.xxx', 8101 port: 8080 8102} 8103let tlsSecureOptions: socket.TLSSecureOptions = { 8104 key: "xxxx", 8105 cert: "xxxx", 8106 ca: ["xxxx"], 8107 password: "xxxx", 8108 protocols: socket.Protocol.TLSv12, 8109 useRemoteCipherPrefer: true, 8110 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8111 cipherSuite: "AES256-SHA256" 8112} 8113let tlsConnectOptions: socket.TLSConnectOptions = { 8114 address: netAddress, 8115 secureOptions: tlsSecureOptions, 8116 ALPNProtocols: ["spdy/1", "http/1.1"] 8117} 8118tlsServer.listen(tlsConnectOptions).then(() => { 8119 console.log("listen callback success"); 8120}).catch((err: BusinessError) => { 8121 console.log("failed" + err); 8122}); 8123 8124tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8125 client.send('Hello, client!').then(() => { 8126 console.log('send success'); 8127 }).catch((err: BusinessError) => { 8128 console.log('send fail'); 8129 }); 8130}); 8131``` 8132 8133### close<sup>10+</sup> 8134 8135close(callback: AsyncCallback\<void\>): void 8136 8137在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。 8138 8139**系统能力**:SystemCapability.Communication.NetStack 8140 8141**参数:** 8142 8143| 参数名 | 类型 | 必填 | 说明 | 8144| -------- | --------------------- | ---- | ------------------------------------------------ | 8145| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 8146 8147**错误码:** 8148 8149| 错误码ID | 错误信息 | 8150| -------- | -------------------------------------- | 8151| 401 | Parameter error. | 8152| 2303501 | SSL is null. | 8153| 2303505 | An error occurred in the TLS system call. | 8154| 2303506 | Failed to close the TLS connection. | 8155| 2300002 | System internal error. | 8156 8157**示例:** 8158 8159```ts 8160import { socket } from '@kit.NetworkKit'; 8161import { BusinessError } from '@kit.BasicServicesKit'; 8162 8163let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8164let netAddress: socket.NetAddress = { 8165 address: '192.168.xx.xxx', 8166 port: 8080 8167} 8168let tlsSecureOptions: socket.TLSSecureOptions = { 8169 key: "xxxx", 8170 cert: "xxxx", 8171 ca: ["xxxx"], 8172 password: "xxxx", 8173 protocols: socket.Protocol.TLSv12, 8174 useRemoteCipherPrefer: true, 8175 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8176 cipherSuite: "AES256-SHA256" 8177} 8178let tlsConnectOptions: socket.TLSConnectOptions = { 8179 address: netAddress, 8180 secureOptions: tlsSecureOptions, 8181 ALPNProtocols: ["spdy/1", "http/1.1"] 8182} 8183tlsServer.listen(tlsConnectOptions).then(() => { 8184 console.log("listen callback success"); 8185}).catch((err: BusinessError) => { 8186 console.log("failed" + err); 8187}); 8188 8189tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8190 client.close((err: BusinessError) => { 8191 if (err) { 8192 console.log('close fail'); 8193 return; 8194 } 8195 console.log('close success'); 8196 }); 8197}); 8198``` 8199 8200### close<sup>10+</sup> 8201 8202close(): Promise\<void\> 8203 8204在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。 8205 8206**系统能力**:SystemCapability.Communication.NetStack 8207 8208**返回值:** 8209 8210| 类型 | 说明 | 8211| --------------- | --------------------------------------------------------- | 8212| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 | 8213 8214**错误码:** 8215 8216| 错误码ID | 错误信息 | 8217| -------- | -------------------------------------- | 8218| 2303501 | SSL is null. | 8219| 2303505 | An error occurred in the TLS system call. | 8220| 2303506 | Failed to close the TLS connection. | 8221| 2300002 | System internal error. | 8222 8223**示例:** 8224 8225```ts 8226import { socket } from '@kit.NetworkKit'; 8227import { BusinessError } from '@kit.BasicServicesKit'; 8228 8229let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8230let netAddress: socket.NetAddress = { 8231 address: '192.168.xx.xxx', 8232 port: 8080 8233} 8234let tlsSecureOptions: socket.TLSSecureOptions = { 8235 key: "xxxx", 8236 cert: "xxxx", 8237 ca: ["xxxx"], 8238 password: "xxxx", 8239 protocols: socket.Protocol.TLSv12, 8240 useRemoteCipherPrefer: true, 8241 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8242 cipherSuite: "AES256-SHA256" 8243} 8244let tlsConnectOptions: socket.TLSConnectOptions = { 8245 address: netAddress, 8246 secureOptions: tlsSecureOptions, 8247 ALPNProtocols: ["spdy/1", "http/1.1"] 8248} 8249tlsServer.listen(tlsConnectOptions).then(() => { 8250 console.log("listen callback success"); 8251}).catch((err: BusinessError) => { 8252 console.log("failed" + err); 8253}); 8254tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8255 client.close().then(() => { 8256 console.log('close success'); 8257 }).catch((err: BusinessError) => { 8258 console.log('close fail'); 8259 }); 8260}); 8261``` 8262 8263### getRemoteAddress<sup>10+</sup> 8264 8265getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 8266 8267在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 8268 8269**系统能力**:SystemCapability.Communication.NetStack 8270 8271**参数:** 8272 8273| 参数名 | 类型 | 必填 | 说明 | 8274| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ | 8275| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 8276 8277**错误码:** 8278 8279| 错误码ID | 错误信息 | 8280| -------- | ------------------------------- | 8281| 401 | Parameter error. | 8282| 2303188 | Socket operation on non-socket. | 8283| 2300002 | System internal error. | 8284 8285**示例:** 8286 8287```ts 8288import { socket } from '@kit.NetworkKit'; 8289import { BusinessError } from '@kit.BasicServicesKit'; 8290 8291let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8292let netAddress: socket.NetAddress = { 8293 address: '192.168.xx.xxx', 8294 port: 8080 8295} 8296let tlsSecureOptions: socket.TLSSecureOptions = { 8297 key: "xxxx", 8298 cert: "xxxx", 8299 ca: ["xxxx"], 8300 password: "xxxx", 8301 protocols: socket.Protocol.TLSv12, 8302 useRemoteCipherPrefer: true, 8303 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8304 cipherSuite: "AES256-SHA256" 8305} 8306let tlsConnectOptions: socket.TLSConnectOptions = { 8307 address: netAddress, 8308 secureOptions: tlsSecureOptions, 8309 ALPNProtocols: ["spdy/1", "http/1.1"] 8310} 8311tlsServer.listen(tlsConnectOptions).then(() => { 8312 console.log("listen callback success"); 8313}).catch((err: BusinessError) => { 8314 console.log("failed" + err); 8315}); 8316tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8317 client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 8318 if (err) { 8319 console.log('getRemoteAddress fail'); 8320 return; 8321 } 8322 console.log('getRemoteAddress success:' + JSON.stringify(data)); 8323 }); 8324}); 8325``` 8326 8327### getRemoteAddress<sup>10+</sup> 8328 8329getRemoteAddress(): Promise\<NetAddress\> 8330 8331在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 8332 8333**系统能力**:SystemCapability.Communication.NetStack 8334 8335**返回值:** 8336 8337| 类型 | 说明 | 8338| ----------------------------------- | ----------------------------------------------------------- | 8339| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 8340 8341**错误码:** 8342 8343| 错误码ID | 错误信息 | 8344| -------- | ------------------------------- | 8345| 2303188 | Socket operation on non-socket. | 8346| 2300002 | System internal error. | 8347 8348**示例:** 8349 8350```ts 8351import { socket } from '@kit.NetworkKit'; 8352import { BusinessError } from '@kit.BasicServicesKit'; 8353 8354let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8355let netAddress: socket.NetAddress = { 8356 address: '192.168.xx.xxx', 8357 port: 8080 8358} 8359let tlsSecureOptions: socket.TLSSecureOptions = { 8360 key: "xxxx", 8361 cert: "xxxx", 8362 ca: ["xxxx"], 8363 password: "xxxx", 8364 protocols: socket.Protocol.TLSv12, 8365 useRemoteCipherPrefer: true, 8366 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8367 cipherSuite: "AES256-SHA256" 8368} 8369let tlsConnectOptions: socket.TLSConnectOptions = { 8370 address: netAddress, 8371 secureOptions: tlsSecureOptions, 8372 ALPNProtocols: ["spdy/1", "http/1.1"] 8373} 8374tlsServer.listen(tlsConnectOptions).then(() => { 8375 console.log("listen callback success"); 8376}).catch((err: BusinessError) => { 8377 console.log("failed" + err); 8378}); 8379tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8380 client.getRemoteAddress().then((data: socket.NetAddress) => { 8381 console.log('getRemoteAddress success:' + JSON.stringify(data)); 8382 }).catch((err: BusinessError) => { 8383 console.error("failed" + err); 8384 }); 8385}); 8386``` 8387 8388### getRemoteCertificate<sup>10+</sup> 8389 8390getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 8391 8392在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。 8393 8394**系统能力**:SystemCapability.Communication.NetStack 8395 8396**参数:** 8397 8398| 参数名 | 类型 | 必填 | 说明 | 8399| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- | 8400| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回对端的证书。失败返回错误码、错误信息。 | 8401 8402**错误码:** 8403 8404| 错误码ID | 错误信息 | 8405| -------- | ---------------------- | 8406| 401 | Parameter error. | 8407| 2303501 | SSL is null. | 8408| 2300002 | System internal error. | 8409 8410**示例:** 8411 8412```ts 8413import { socket } from '@kit.NetworkKit'; 8414import { BusinessError } from '@kit.BasicServicesKit'; 8415import { util } from '@kit.ArkTS'; 8416 8417let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8418let netAddress: socket.NetAddress = { 8419 address: '192.168.xx.xxx', 8420 port: 8080 8421} 8422let tlsSecureOptions: socket.TLSSecureOptions = { 8423 key: "xxxx", 8424 cert: "xxxx", 8425 ca: ["xxxx"], 8426 password: "xxxx", 8427 protocols: socket.Protocol.TLSv12, 8428 useRemoteCipherPrefer: true, 8429 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8430 cipherSuite: "AES256-SHA256" 8431} 8432let tlsConnectOptions: socket.TLSConnectOptions = { 8433 address: netAddress, 8434 secureOptions: tlsSecureOptions, 8435 ALPNProtocols: ["spdy/1", "http/1.1"] 8436} 8437tlsServer.listen(tlsConnectOptions).then(() => { 8438 console.log("listen callback success"); 8439}).catch((err: BusinessError) => { 8440 console.log("failed" + err); 8441}); 8442tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8443 client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 8444 if (err) { 8445 console.log("getRemoteCertificate callback error: " + err); 8446 } else { 8447 const decoder = util.TextDecoder.create(); 8448 const str = decoder.decodeWithStream(data.data); 8449 console.log("getRemoteCertificate callback: " + str); 8450 } 8451 }); 8452}); 8453``` 8454 8455### getRemoteCertificate<sup>10+</sup> 8456 8457getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 8458 8459在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。 8460 8461**系统能力**:SystemCapability.Communication.NetStack 8462 8463**返回值:** 8464 8465| 类型 | 说明 | 8466| ----------------------------------------------- | ------------------------------------------------------------ | 8467| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 | 8468 8469**错误码:** 8470 8471| 错误码ID | 错误信息 | 8472| -------- | ---------------------- | 8473| 2303501 | SSL is null. | 8474| 2300002 | System internal error. | 8475 8476**示例:** 8477 8478```ts 8479import { socket } from '@kit.NetworkKit'; 8480import { BusinessError } from '@kit.BasicServicesKit'; 8481import { util } from '@kit.ArkTS'; 8482 8483let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8484let netAddress: socket.NetAddress = { 8485 address: '192.168.xx.xxx', 8486 port: 8080 8487} 8488let tlsSecureOptions: socket.TLSSecureOptions = { 8489 key: "xxxx", 8490 cert: "xxxx", 8491 ca: ["xxxx"], 8492 password: "xxxx", 8493 protocols: socket.Protocol.TLSv12, 8494 useRemoteCipherPrefer: true, 8495 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8496 cipherSuite: "AES256-SHA256" 8497} 8498let tlsConnectOptions: socket.TLSConnectOptions = { 8499 address: netAddress, 8500 secureOptions: tlsSecureOptions, 8501 ALPNProtocols: ["spdy/1", "http/1.1"] 8502} 8503tlsServer.listen(tlsConnectOptions).then(() => { 8504 console.log("listen callback success"); 8505}).catch((err: BusinessError) => { 8506 console.log("failed" + err); 8507}); 8508tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8509 client.getRemoteCertificate().then((data: socket.X509CertRawData) => { 8510 const decoder = util.TextDecoder.create(); 8511 const str = decoder.decodeWithStream(data.data); 8512 console.log("getRemoteCertificate success: " + str); 8513 }).catch((err: BusinessError) => { 8514 console.error("failed" + err); 8515 }); 8516}); 8517``` 8518 8519### getCipherSuite<sup>10+</sup> 8520 8521getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 8522 8523在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 8524 8525**系统能力**:SystemCapability.Communication.NetStack 8526 8527**参数:** 8528 8529| 参数名 | 类型 | 必填 | 说明 | 8530| -------- | -------------------------------- | ---- | ------------------------------------------------------------ | 8531| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 8532 8533**错误码:** 8534 8535| 错误码ID | 错误信息 | 8536| -------- | -------------------------------------- | 8537| 401 | Parameter error. | 8538| 2303501 | SSL is null. | 8539| 2303502 | An error occurred when reading data on the TLS socket.| 8540| 2303505 | An error occurred in the TLS system call.| 8541| 2300002 | System internal error. | 8542 8543**示例:** 8544 8545```ts 8546import { socket } from '@kit.NetworkKit'; 8547import { BusinessError } from '@kit.BasicServicesKit'; 8548 8549let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8550let netAddress: socket.NetAddress = { 8551 address: '192.168.xx.xxx', 8552 port: 8080 8553} 8554let tlsSecureOptions: socket.TLSSecureOptions = { 8555 key: "xxxx", 8556 cert: "xxxx", 8557 ca: ["xxxx"], 8558 password: "xxxx", 8559 protocols: socket.Protocol.TLSv12, 8560 useRemoteCipherPrefer: true, 8561 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8562 cipherSuite: "AES256-SHA256" 8563} 8564let tlsConnectOptions: socket.TLSConnectOptions = { 8565 address: netAddress, 8566 secureOptions: tlsSecureOptions, 8567 ALPNProtocols: ["spdy/1", "http/1.1"] 8568} 8569tlsServer.listen(tlsConnectOptions).then(() => { 8570 console.log("listen callback success"); 8571}).catch((err: BusinessError) => { 8572 console.log("failed" + err); 8573}); 8574tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8575 client.getCipherSuite((err: BusinessError, data: Array<string>) => { 8576 if (err) { 8577 console.log("getCipherSuite callback error = " + err); 8578 } else { 8579 console.log("getCipherSuite callback = " + data); 8580 } 8581 }); 8582}); 8583``` 8584 8585### getCipherSuite<sup>10+</sup> 8586 8587getCipherSuite(): Promise\<Array\<string\>\> 8588 8589在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 8590 8591**系统能力**:SystemCapability.Communication.NetStack 8592 8593**返回值:** 8594 8595| 类型 | 说明 | 8596| -------------------------- | ------------------------------------------------------------ | 8597| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 8598 8599**错误码:** 8600 8601| 错误码ID | 错误信息 | 8602| -------- | -------------------------------------- | 8603| 2303501 | SSL is null. | 8604| 2303502 | An error occurred when reading data on the TLS socket.| 8605| 2303505 | An error occurred in the TLS system call. | 8606| 2300002 | System internal error. | 8607 8608**示例:** 8609 8610```ts 8611import { socket } from '@kit.NetworkKit'; 8612import { BusinessError } from '@kit.BasicServicesKit'; 8613 8614let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8615let netAddress: socket.NetAddress = { 8616 address: '192.168.xx.xxx', 8617 port: 8080 8618} 8619let tlsSecureOptions: socket.TLSSecureOptions = { 8620 key: "xxxx", 8621 cert: "xxxx", 8622 ca: ["xxxx"], 8623 password: "xxxx", 8624 protocols: socket.Protocol.TLSv12, 8625 useRemoteCipherPrefer: true, 8626 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8627 cipherSuite: "AES256-SHA256" 8628} 8629let tlsConnectOptions: socket.TLSConnectOptions = { 8630 address: netAddress, 8631 secureOptions: tlsSecureOptions, 8632 ALPNProtocols: ["spdy/1", "http/1.1"] 8633} 8634tlsServer.listen(tlsConnectOptions).then(() => { 8635 console.log("listen callback success"); 8636}).catch((err: BusinessError) => { 8637 console.log("failed" + err); 8638}); 8639tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8640 client.getCipherSuite().then((data: Array<string>) => { 8641 console.log('getCipherSuite success:' + JSON.stringify(data)); 8642 }).catch((err: BusinessError) => { 8643 console.error("failed" + err); 8644 }); 8645}); 8646``` 8647 8648### getSignatureAlgorithms<sup>10+</sup> 8649 8650getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 8651 8652在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。 8653 8654**系统能力**:SystemCapability.Communication.NetStack 8655 8656**参数:** 8657 8658| 参数名 | 类型 | 必填 | 说明 | 8659| -------- | -------------------------------- | ---- | ---------------------------------- | 8660| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 8661 8662**错误码:** 8663 8664| 错误码ID | 错误信息 | 8665| -------- | ---------------------- | 8666| 401 | Parameter error. | 8667| 2303501 | SSL is null. | 8668| 2300002 | System internal error. | 8669 8670**示例:** 8671 8672```ts 8673import { socket } from '@kit.NetworkKit'; 8674import { BusinessError } from '@kit.BasicServicesKit'; 8675 8676let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8677let netAddress: socket.NetAddress = { 8678 address: '192.168.xx.xxx', 8679 port: 8080 8680} 8681let tlsSecureOptions: socket.TLSSecureOptions = { 8682 key: "xxxx", 8683 cert: "xxxx", 8684 ca: ["xxxx"], 8685 password: "xxxx", 8686 protocols: socket.Protocol.TLSv12, 8687 useRemoteCipherPrefer: true, 8688 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8689 cipherSuite: "AES256-SHA256" 8690} 8691let tlsConnectOptions: socket.TLSConnectOptions = { 8692 address: netAddress, 8693 secureOptions: tlsSecureOptions, 8694 ALPNProtocols: ["spdy/1", "http/1.1"] 8695} 8696tlsServer.listen(tlsConnectOptions).then(() => { 8697 console.log("listen callback success"); 8698}).catch((err: BusinessError) => { 8699 console.log("failed" + err); 8700}); 8701tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8702 client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 8703 if (err) { 8704 console.log("getSignatureAlgorithms callback error = " + err); 8705 } else { 8706 console.log("getSignatureAlgorithms callback = " + data); 8707 } 8708 }); 8709}); 8710``` 8711 8712### getSignatureAlgorithms<sup>10+</sup> 8713 8714getSignatureAlgorithms(): Promise\<Array\<string\>\> 8715 8716在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。 8717 8718**系统能力**:SystemCapability.Communication.NetStack 8719 8720**返回值:** 8721 8722| 类型 | 说明 | 8723| -------------------------- | --------------------------------------------- | 8724| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 8725 8726**错误码:** 8727 8728| 错误码ID | 错误信息 | 8729| -------- | ---------------------- | 8730| 2303501 | SSL is null. | 8731| 2300002 | System internal error. | 8732 8733**示例:** 8734 8735```ts 8736import { socket } from '@kit.NetworkKit'; 8737import { BusinessError } from '@kit.BasicServicesKit'; 8738 8739let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8740let netAddress: socket.NetAddress = { 8741 address: '192.168.xx.xxx', 8742 port: 8080 8743} 8744let tlsSecureOptions: socket.TLSSecureOptions = { 8745 key: "xxxx", 8746 cert: "xxxx", 8747 ca: ["xxxx"], 8748 password: "xxxx", 8749 protocols: socket.Protocol.TLSv12, 8750 useRemoteCipherPrefer: true, 8751 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8752 cipherSuite: "AES256-SHA256" 8753} 8754let tlsConnectOptions: socket.TLSConnectOptions = { 8755 address: netAddress, 8756 secureOptions: tlsSecureOptions, 8757 ALPNProtocols: ["spdy/1", "http/1.1"] 8758} 8759tlsServer.listen(tlsConnectOptions).then(() => { 8760 console.log("listen callback success"); 8761}).catch((err: BusinessError) => { 8762 console.log("failed" + err); 8763}); 8764tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8765 client.getSignatureAlgorithms().then((data: Array<string>) => { 8766 console.log("getSignatureAlgorithms success" + data); 8767 }).catch((err: BusinessError) => { 8768 console.error("failed" + err); 8769 }); 8770}); 8771``` 8772 8773### getLocalAddress<sup>12+</sup> 8774 8775getLocalAddress(): Promise\<NetAddress\> 8776 8777获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 8778 8779> **说明:** 8780> 在TLSSocketServer通信连接成功之后,才可调用此方法。 8781 8782**系统能力**:SystemCapability.Communication.NetStack 8783 8784**返回值:** 8785 8786| 类型 | 说明 | 8787| -------------- | --------------------------------------------------- | 8788| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 8789 8790**错误码:** 8791 8792| 错误码ID | 错误信息 | 8793| -------- | ------------------------------------------- | 8794| 2300002 | System internal error. | 8795| 2301009 | Bad file descriptor. | 8796| 2303188 | Socket operation on non-socket. | 8797 8798**示例:** 8799 8800```ts 8801import { socket } from '@kit.NetworkKit'; 8802import { BusinessError } from '@kit.BasicServicesKit'; 8803 8804let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8805let netAddress: socket.NetAddress = { 8806 address: '192.168.xx.xxx', 8807 port: 8080 8808} 8809let tlsSecureOptions: socket.TLSSecureOptions = { 8810 key: "xxxx", 8811 cert: "xxxx", 8812 ca: ["xxxx"], 8813 password: "xxxx", 8814 protocols: socket.Protocol.TLSv12, 8815 useRemoteCipherPrefer: true, 8816 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8817 cipherSuite: "AES256-SHA256" 8818} 8819let tlsConnectOptions: socket.TLSConnectOptions = { 8820 address: netAddress, 8821 secureOptions: tlsSecureOptions, 8822 ALPNProtocols: ["spdy/1", "http/1.1"] 8823} 8824tlsServer.listen(tlsConnectOptions).then(() => { 8825 console.info("listen callback success"); 8826}).catch((err: BusinessError) => { 8827 console.error("failed" + err); 8828}); 8829 8830tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8831 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 8832 console.info("Family IP Port: " + JSON.stringify(localAddress)); 8833 }).catch((err: BusinessError) => { 8834 console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err)); 8835 }) 8836}); 8837``` 8838 8839### on('message')<sup>10+</sup> 8840 8841on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 8842 8843订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 8844 8845**系统能力**:SystemCapability.Communication.NetStack 8846 8847**参数:** 8848 8849| 参数名 | 类型 | 必填 | 说明 | 8850| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 8851| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 8852| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 8853 8854**错误码:** 8855 8856| 错误码ID | 错误信息 | 8857| -------- | ---------------- | 8858| 401 | Parameter error. | 8859 8860**示例:** 8861 8862```ts 8863import { socket } from '@kit.NetworkKit'; 8864import { BusinessError } from '@kit.BasicServicesKit'; 8865 8866let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8867let netAddress: socket.NetAddress = { 8868 address: '192.168.xx.xxx', 8869 port: 8080 8870} 8871let tlsSecureOptions: socket.TLSSecureOptions = { 8872 key: "xxxx", 8873 cert: "xxxx", 8874 ca: ["xxxx"], 8875 password: "xxxx", 8876 protocols: socket.Protocol.TLSv12, 8877 useRemoteCipherPrefer: true, 8878 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8879 cipherSuite: "AES256-SHA256" 8880} 8881let tlsConnectOptions: socket.TLSConnectOptions = { 8882 address: netAddress, 8883 secureOptions: tlsSecureOptions, 8884 ALPNProtocols: ["spdy/1", "http/1.1"] 8885} 8886tlsServer.listen(tlsConnectOptions).then(() => { 8887 console.log("listen callback success"); 8888}).catch((err: BusinessError) => { 8889 console.log("failed" + err); 8890}); 8891 8892tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8893 client.on('message', (value: socket.SocketMessageInfo) => { 8894 let messageView = ''; 8895 for (let i: number = 0; i < value.message.byteLength; i++) { 8896 let uint8Array = new Uint8Array(value.message) 8897 let messages = uint8Array[i] 8898 let message = String.fromCharCode(messages); 8899 messageView += message; 8900 } 8901 console.log('on message message: ' + JSON.stringify(messageView)); 8902 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 8903 }); 8904}); 8905``` 8906 8907### off('message')<sup>10+</sup> 8908 8909off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 8910 8911取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 8912 8913**系统能力**:SystemCapability.Communication.NetStack 8914 8915**参数:** 8916 8917| 参数名 | 类型 | 必填 | 说明 | 8918| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 8919| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 8920| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 8921 8922**错误码:** 8923 8924| 错误码ID | 错误信息 | 8925| -------- | ---------------- | 8926| 401 | Parameter error. | 8927 8928**示例:** 8929 8930```ts 8931import { socket } from '@kit.NetworkKit'; 8932import { BusinessError } from '@kit.BasicServicesKit'; 8933 8934let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8935let netAddress: socket.NetAddress = { 8936 address: '192.168.xx.xxx', 8937 port: 8080 8938} 8939let tlsSecureOptions: socket.TLSSecureOptions = { 8940 key: "xxxx", 8941 cert: "xxxx", 8942 ca: ["xxxx"], 8943 password: "xxxx", 8944 protocols: socket.Protocol.TLSv12, 8945 useRemoteCipherPrefer: true, 8946 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8947 cipherSuite: "AES256-SHA256" 8948} 8949let tlsConnectOptions: socket.TLSConnectOptions = { 8950 address: netAddress, 8951 secureOptions: tlsSecureOptions, 8952 ALPNProtocols: ["spdy/1", "http/1.1"] 8953} 8954tlsServer.listen(tlsConnectOptions).then(() => { 8955 console.log("listen callback success"); 8956}).catch((err: BusinessError) => { 8957 console.log("failed" + err); 8958}); 8959 8960let callback = (value: socket.SocketMessageInfo) => { 8961 let messageView = ''; 8962 for (let i: number = 0; i < value.message.byteLength; i++) { 8963 let uint8Array = new Uint8Array(value.message) 8964 let messages = uint8Array[i] 8965 let message = String.fromCharCode(messages); 8966 messageView += message; 8967 } 8968 console.log('on message message: ' + JSON.stringify(messageView)); 8969 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 8970} 8971tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8972 client.on('message', callback); 8973 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8974 client.off('message', callback); 8975 client.off('message'); 8976}); 8977``` 8978 8979### on('close')<sup>10+</sup> 8980 8981on(type: 'close', callback: Callback\<void\>): void 8982 8983订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 8984 8985**系统能力**:SystemCapability.Communication.NetStack 8986 8987**参数:** 8988 8989| 参数名 | 类型 | 必填 | 说明 | 8990| -------- | ---------------- | ---- | ----------------------------------- | 8991| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 8992| callback | Callback\<void\> | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 8993 8994**错误码:** 8995 8996| 错误码ID | 错误信息 | 8997| -------- | ---------------- | 8998| 401 | Parameter error. | 8999 9000**示例:** 9001 9002```ts 9003import { socket } from '@kit.NetworkKit'; 9004import { BusinessError } from '@kit.BasicServicesKit'; 9005 9006let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9007let netAddress: socket.NetAddress = { 9008 address: '192.168.xx.xxx', 9009 port: 8080 9010} 9011let tlsSecureOptions: socket.TLSSecureOptions = { 9012 key: "xxxx", 9013 cert: "xxxx", 9014 ca: ["xxxx"], 9015 password: "xxxx", 9016 protocols: socket.Protocol.TLSv12, 9017 useRemoteCipherPrefer: true, 9018 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9019 cipherSuite: "AES256-SHA256" 9020} 9021let tlsConnectOptions: socket.TLSConnectOptions = { 9022 address: netAddress, 9023 secureOptions: tlsSecureOptions, 9024 ALPNProtocols: ["spdy/1", "http/1.1"] 9025} 9026tlsServer.listen(tlsConnectOptions).then(() => { 9027 console.log("listen callback success"); 9028}).catch((err: BusinessError) => { 9029 console.log("failed" + err); 9030}); 9031tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9032 client.on('close', () => { 9033 console.log("on close success") 9034 }); 9035}); 9036``` 9037 9038### off('close')<sup>10+</sup> 9039 9040off(type: 'close', callback?: Callback\<void\>): void 9041 9042取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 9043 9044**系统能力**:SystemCapability.Communication.NetStack 9045 9046**参数:** 9047 9048| 参数名 | 类型 | 必填 | 说明 | 9049| -------- | ---------------- | ---- | ----------------------------------- | 9050| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 9051| callback | Callback\<void\> | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9052 9053**错误码:** 9054 9055| 错误码ID | 错误信息 | 9056| -------- | ---------------- | 9057| 401 | Parameter error. | 9058 9059**示例:** 9060 9061```ts 9062import { socket } from '@kit.NetworkKit'; 9063import { BusinessError } from '@kit.BasicServicesKit'; 9064 9065let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9066let netAddress: socket.NetAddress = { 9067 address: '192.168.xx.xxx', 9068 port: 8080 9069} 9070let tlsSecureOptions: socket.TLSSecureOptions = { 9071 key: "xxxx", 9072 cert: "xxxx", 9073 ca: ["xxxx"], 9074 password: "xxxx", 9075 protocols: socket.Protocol.TLSv12, 9076 useRemoteCipherPrefer: true, 9077 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9078 cipherSuite: "AES256-SHA256" 9079} 9080let tlsConnectOptions: socket.TLSConnectOptions = { 9081 address: netAddress, 9082 secureOptions: tlsSecureOptions, 9083 ALPNProtocols: ["spdy/1", "http/1.1"] 9084} 9085tlsServer.listen(tlsConnectOptions).then(() => { 9086 console.log("listen callback success"); 9087}).catch((err: BusinessError) => { 9088 console.log("failed" + err); 9089}); 9090 9091let callback = () => { 9092 console.log("on close success"); 9093} 9094tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9095 client.on('close', callback); 9096 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9097 client.off('close', callback); 9098 client.off('close'); 9099}); 9100``` 9101 9102### on('error')<sup>10+</sup> 9103 9104on(type: 'error', callback: ErrorCallback): void 9105 9106订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 9107 9108**系统能力**:SystemCapability.Communication.NetStack 9109 9110**参数:** 9111 9112| 参数名 | 类型 | 必填 | 说明 | 9113| -------- | ------------- | ---- | ------------------------------------ | 9114| type | string | 是 | 订阅的事件类型。'error':error事件。 | 9115| callback | ErrorCallback | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9116 9117**错误码:** 9118 9119| 错误码ID | 错误信息 | 9120| -------- | ---------------- | 9121| 401 | Parameter error. | 9122 9123**示例:** 9124 9125```ts 9126import { socket } from '@kit.NetworkKit'; 9127import { BusinessError } from '@kit.BasicServicesKit'; 9128 9129let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9130let netAddress: socket.NetAddress = { 9131 address: '192.168.xx.xxx', 9132 port: 8080 9133} 9134let tlsSecureOptions: socket.TLSSecureOptions = { 9135 key: "xxxx", 9136 cert: "xxxx", 9137 ca: ["xxxx"], 9138 password: "xxxx", 9139 protocols: socket.Protocol.TLSv12, 9140 useRemoteCipherPrefer: true, 9141 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9142 cipherSuite: "AES256-SHA256" 9143} 9144let tlsConnectOptions: socket.TLSConnectOptions = { 9145 address: netAddress, 9146 secureOptions: tlsSecureOptions, 9147 ALPNProtocols: ["spdy/1", "http/1.1"] 9148} 9149tlsServer.listen(tlsConnectOptions).then(() => { 9150 console.log("listen callback success"); 9151}).catch((err: BusinessError) => { 9152 console.log("failed" + err); 9153}); 9154 9155tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9156 client.on('error', (err: BusinessError) => { 9157 console.log("on error, err:" + JSON.stringify(err)) 9158 }); 9159}); 9160``` 9161 9162### off('error')<sup>10+</sup> 9163 9164off(type: 'error', callback?: ErrorCallback): void 9165 9166取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 9167 9168**系统能力**:SystemCapability.Communication.NetStack 9169 9170**参数:** 9171 9172| 参数名 | 类型 | 必填 | 说明 | 9173| -------- | ------------- | ---- | ------------------------------------ | 9174| type | string | 是 | 订阅的事件类型。'error':error事件。 | 9175| callback | ErrorCallback | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9176 9177**错误码:** 9178 9179| 错误码ID | 错误信息 | 9180| -------- | ---------------- | 9181| 401 | Parameter error. | 9182 9183**示例:** 9184 9185```ts 9186import { socket } from '@kit.NetworkKit'; 9187import { BusinessError } from '@kit.BasicServicesKit'; 9188 9189let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9190let netAddress: socket.NetAddress = { 9191 address: '192.168.xx.xxx', 9192 port: 8080 9193} 9194let tlsSecureOptions: socket.TLSSecureOptions = { 9195 key: "xxxx", 9196 cert: "xxxx", 9197 ca: ["xxxx"], 9198 password: "xxxx", 9199 protocols: socket.Protocol.TLSv12, 9200 useRemoteCipherPrefer: true, 9201 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9202 cipherSuite: "AES256-SHA256" 9203} 9204let tlsConnectOptions: socket.TLSConnectOptions = { 9205 address: netAddress, 9206 secureOptions: tlsSecureOptions, 9207 ALPNProtocols: ["spdy/1", "http/1.1"] 9208} 9209tlsServer.listen(tlsConnectOptions).then(() => { 9210 console.log("listen callback success"); 9211}).catch((err: BusinessError) => { 9212 console.log("failed" + err); 9213}); 9214 9215let callback = (err: BusinessError) => { 9216 console.log("on error, err:" + JSON.stringify(err)); 9217} 9218tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9219 client.on('error', callback); 9220 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9221 client.off('error', callback); 9222 client.off('error'); 9223}); 9224``` 9225