1# @ohos.net.socket (Socket连接) 2 3<!--Kit: Network Kit--> 4<!--Subsystem: Communication--> 5<!--Owner: @wmyao_mm--> 6<!--Designer: @guo-min_net--> 7<!--Tester: @tongxilin--> 8<!--Adviser: @zhang_yixin13--> 9 10本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。 11 12> **说明:** 13> 14> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 15> 本模块API使用时建议放在worker线程或者taskpool中做网络操作,否则可能会导致UI线程卡顿。 16 17## 导入模块 18 19```ts 20import { socket } from '@kit.NetworkKit'; 21``` 22 23## socket.constructUDPSocketInstance 24 25constructUDPSocketInstance(): UDPSocket 26 27创建一个UDPSocket对象。 28 29**系统能力**:SystemCapability.Communication.NetStack 30 31**返回值:** 32 33| 类型 | 说明 | 34| --------------------------------- | ---------------------- | 35| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 | 36 37**示例:** 38 39```ts 40import { socket } from '@kit.NetworkKit'; 41let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 42``` 43 44## UDPSocket 45 46UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。 47 48### bind 49 50bind(address: NetAddress, callback: AsyncCallback\<void\>): void 51 52绑定IP地址和端口,端口可以由用户指定或由系统随机分配。使用callback方式作为异步方法。 53 54**需要权限**:ohos.permission.INTERNET 55 56**系统能力**:SystemCapability.Communication.NetStack 57 58**参数:** 59 60| 参数名 | 类型 | 必填 | 说明 | 61| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 62| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 63| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 64 65**错误码:** 66 67以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 68 69| 错误码ID | 错误信息 | 70| ------- | ----------------------- | 71| 401 | Parameter error. | 72| 201 | Permission denied. | 73 74**示例:** 75 76```ts 77import { socket } from '@kit.NetworkKit'; 78import { BusinessError } from '@kit.BasicServicesKit'; 79 80let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 81let bindAddr: socket.NetAddress = { 82 address: '192.168.xx.xxx', 83 port: 1234 84} 85udp.bind(bindAddr, (err: BusinessError) => { 86 if (err) { 87 console.error('bind fail'); 88 return; 89 } 90 console.log('bind success'); 91}); 92``` 93 94### bind 95 96bind(address: NetAddress): Promise\<void\> 97 98绑定IP地址和端口,端口可以由用户指定或由系统随机分配。使用Promise方式作为异步方法。 99 100**需要权限**:ohos.permission.INTERNET 101 102**系统能力**:SystemCapability.Communication.NetStack 103 104**参数:** 105 106| 参数名 | 类型 | 必填 | 说明 | 107| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 108| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 109 110**错误码:** 111 112以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 113 114| 错误码ID | 错误信息 | 115| ------- | ----------------------- | 116| 401 | Parameter error. | 117| 201 | Permission denied. | 118 119**返回值:** 120 121| 类型 | 说明 | 122| -------------- | ----------------------------------------- | 123| Promise\<void\> | Promise对象。无返回结果的Promise对象。| 124 125**示例:** 126 127```ts 128import { socket } from '@kit.NetworkKit'; 129import { BusinessError } from '@kit.BasicServicesKit'; 130 131let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 132let bindAddr: socket.NetAddress = { 133 address: '192.168.xx.xxx', 134 port: 8080 135} 136udp.bind(bindAddr).then(() => { 137 console.log('bind success'); 138}).catch((err: BusinessError) => { 139 console.error('bind fail'); 140}); 141``` 142 143### send 144 145send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void 146 147通过UDPSocket连接发送数据。使用callback方式作为异步方法。 148 149发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 150 151**需要权限**:ohos.permission.INTERNET 152 153**系统能力**:SystemCapability.Communication.NetStack 154 155**参数:** 156 157| 参数名 | 类型 | 必填 | 说明 | 158| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 159| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 160| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 161 162**错误码:** 163 164以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 165 166| 错误码ID | 错误信息 | 167| ------- | ----------------------- | 168| 401 | Parameter error. | 169| 201 | Permission denied. | 170| 2301206 | Socks5 failed to connect to the proxy server. | 171| 2301207 | Socks5 username or password is invalid. | 172| 2301208 | Socks5 failed to connect to the remote server. | 173| 2301209 | Socks5 failed to negotiate the authentication method. | 174| 2301210 | Socks5 failed to send the message. | 175| 2301211 | Socks5 failed to receive the message. | 176| 2301212 | Socks5 serialization error. | 177| 2301213 | Socks5 deserialization error. | 178 179**示例:** 180 181```ts 182import { socket } from '@kit.NetworkKit'; 183import { BusinessError } from '@kit.BasicServicesKit'; 184 185let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 186let bindAddr: socket.NetAddress = { 187 address: '192.168.xx.xxx', // 本端地址 188 port: 1234 189} 190udp.bind(bindAddr, (err: BusinessError) => { 191 if (err) { 192 console.error('bind fail'); 193 return; 194 } 195 console.log('bind success'); 196}); 197let netAddress: socket.NetAddress = { 198 address: '192.168.xx.xxx', // 对端地址 199 port: 8080 200} 201let sendOptions: socket.UDPSendOptions = { 202 data: 'Hello, server!', 203 address: netAddress 204} 205udp.send(sendOptions, (err: BusinessError) => { 206 if (err) { 207 console.error('send fail'); 208 return; 209 } 210 console.log('send success'); 211}); 212``` 213 214**示例(设置socket代理):** 215 216```ts 217import { socket } from '@kit.NetworkKit'; 218import { BusinessError } from '@kit.BasicServicesKit'; 219 220let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 221let bindAddr: socket.NetAddress = { 222 address: '192.168.xx.xxx', // 本端地址 223 port: 1234 224} 225udp.bind(bindAddr, (err: BusinessError) => { 226 if (err) { 227 console.error('bind fail'); 228 return; 229 } 230 console.log('bind success'); 231}); 232let netAddress: socket.NetAddress = { 233 address: '192.168.xx.xxx', // 对端地址 234 port: 8080 235} 236let socks5Server: socket.NetAddress = { 237 address: '192.168.xx.xxx', 238 port: 8080 239} 240let proxyOptions: socket.ProxyOptions = { 241 type : 1, 242 address: socks5Server, 243 username: "xxx", 244 password: "xxx" 245} 246let sendOptions: socket.UDPSendOptions = { 247 data: 'Hello, server!', 248 address: netAddress, 249 proxy: proxyOptions, 250} 251udp.send(sendOptions, (err: BusinessError) => { 252 if (err) { 253 console.error('send fail'); 254 return; 255 } 256 console.log('send success'); 257}); 258``` 259 260### send 261 262send(options: UDPSendOptions): Promise\<void\> 263 264通过UDPSocket连接发送数据。使用Promise方式作为异步方法。 265 266发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 267 268**需要权限**:ohos.permission.INTERNET 269 270**系统能力**:SystemCapability.Communication.NetStack 271 272**参数:** 273 274| 参数名 | 类型 | 必填 | 说明 | 275| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 276| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 277 278**错误码:** 279 280以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 281 282| 错误码ID | 错误信息 | 283| ------- | ----------------------- | 284| 401 | Parameter error. | 285| 201 | Permission denied. | 286| 2301206 | Socks5 failed to connect to the proxy server. | 287| 2301207 | Socks5 username or password is invalid. | 288| 2301208 | Socks5 failed to connect to the remote server. | 289| 2301209 | Socks5 failed to negotiate the authentication method. | 290| 2301210 | Socks5 failed to send the message. | 291| 2301211 | Socks5 failed to receive the message. | 292| 2301212 | Socks5 serialization error. | 293| 2301213 | Socks5 deserialization error. | 294 295**返回值:** 296 297| 类型 | 说明 | 298| -------------- | --------------------------------------------- | 299| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 300 301**示例:** 302 303```ts 304import { socket } from '@kit.NetworkKit'; 305import { BusinessError } from '@kit.BasicServicesKit'; 306 307let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 308let bindAddr: socket.NetAddress = { 309 address: '192.168.xx.xxx', // 本端地址 310 port: 8080 311} 312udp.bind(bindAddr).then(() => { 313 console.log('bind success'); 314}).catch((err: BusinessError) => { 315 console.error('bind fail'); 316 return; 317}); 318let netAddress: socket.NetAddress = { 319 address: '192.168.xx.xxx', // 对端地址 320 port: 8080 321} 322let sendOptions: socket.UDPSendOptions = { 323 data: 'Hello, server!', 324 address: netAddress 325} 326udp.send(sendOptions).then(() => { 327 console.log('send success'); 328}).catch((err: BusinessError) => { 329 console.error('send fail'); 330}); 331``` 332 333**示例(设置socket代理):** 334 335```ts 336import { socket } from '@kit.NetworkKit'; 337import { BusinessError } from '@kit.BasicServicesKit'; 338 339let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 340let bindAddr: socket.NetAddress = { 341 address: '192.168.xx.xxx', // 本端地址 342 port: 8080 343} 344udp.bind(bindAddr).then(() => { 345 console.log('bind success'); 346}).catch((err: BusinessError) => { 347 console.error('bind fail'); 348 return; 349}); 350let netAddress: socket.NetAddress = { 351 address: '192.168.xx.xxx', // 对端地址 352 port: 8080 353} 354let socks5Server: socket.NetAddress = { 355 address: '192.168.xx.xxx', 356 port: 8080 357} 358let proxyOptions: socket.ProxyOptions = { 359 type : 1, 360 address: socks5Server, 361 username: "xxx", 362 password: "xxx" 363} 364let sendOptions: socket.UDPSendOptions = { 365 data: 'Hello, server!', 366 address: netAddress, 367 proxy: proxyOptions, 368} 369udp.send(sendOptions).then(() => { 370 console.log('send success'); 371}).catch((err: BusinessError) => { 372 console.error('send fail'); 373}); 374``` 375 376### close 377 378close(callback: AsyncCallback\<void\>): void 379 380关闭UDPSocket连接。使用callback方式作为异步方法。 381 382**需要权限**:ohos.permission.INTERNET 383 384**系统能力**:SystemCapability.Communication.NetStack 385 386**参数:** 387 388| 参数名 | 类型 | 必填 | 说明 | 389| -------- | --------------------- | ---- | ---------- | 390| callback | AsyncCallback\<void\> | 是 | 回调函数。关闭UDPSocket连接后触发回调函数。 | 391 392**错误码:** 393 394以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 395 396| 错误码ID | 错误信息 | 397| ------- | ----------------------- | 398| 201 | Permission denied. | 399 400**示例:** 401 402```ts 403import { socket } from '@kit.NetworkKit'; 404import { BusinessError } from '@kit.BasicServicesKit'; 405 406let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 407udp.close((err: BusinessError) => { 408 if (err) { 409 console.error('close fail'); 410 return; 411 } 412 console.log('close success'); 413}) 414``` 415 416### close 417 418close(): Promise\<void\> 419 420关闭UDPSocket连接。使用Promise方式作为异步方法。 421 422**需要权限**:ohos.permission.INTERNET 423 424**系统能力**:SystemCapability.Communication.NetStack 425 426**错误码:** 427 428以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 429 430| 错误码ID | 错误信息 | 431| ------- | ----------------------- | 432| 201 | Permission denied. | 433 434**返回值:** 435 436| 类型 | 说明 | 437| -------------- | ----------------------------------------- | 438| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 439 440**示例:** 441 442```ts 443import { socket } from '@kit.NetworkKit'; 444import { BusinessError } from '@kit.BasicServicesKit'; 445 446let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 447udp.close().then(() => { 448 console.log('close success'); 449}).catch((err: BusinessError) => { 450 console.error('close fail'); 451}); 452``` 453 454### getState 455 456getState(callback: AsyncCallback\<SocketStateBase\>): void 457 458获取UDPSocket状态。使用callback方式作为异步方法。 459 460> **说明:** 461> bind方法调用成功后,才可调用此方法。 462 463**需要权限**:ohos.permission.INTERNET 464 465**系统能力**:SystemCapability.Communication.NetStack 466 467**参数:** 468 469| 参数名 | 类型 | 必填 | 说明 | 470| -------- | ------------------------------------------------------ | ---- | ---------- | 471| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 | 472 473**错误码:** 474 475以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 476 477| 错误码ID | 错误信息 | 478| ------- | ----------------------- | 479| 201 | Permission denied. | 480 481**示例:** 482 483```ts 484import { socket } from '@kit.NetworkKit'; 485import { BusinessError } from '@kit.BasicServicesKit'; 486 487let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 488let bindAddr: socket.NetAddress = { 489 address: '192.168.xx.xxx', 490 port: 8080 491} 492udp.bind(bindAddr, (err: BusinessError) => { 493 if (err) { 494 console.error('bind fail'); 495 return; 496 } 497 console.error('bind success'); 498 udp.getState((err: BusinessError, data: socket.SocketStateBase) => { 499 if (err) { 500 console.log('getState fail'); 501 return; 502 } 503 console.log('getState success:' + JSON.stringify(data)); 504 }) 505}) 506``` 507 508### getState 509 510getState(): Promise\<SocketStateBase\> 511 512获取UDPSocket状态。使用Promise方式作为异步方法。 513 514> **说明:** 515> bind方法调用成功后,才可调用此方法。 516 517**需要权限**:ohos.permission.INTERNET 518 519**系统能力**:SystemCapability.Communication.NetStack 520 521**错误码:** 522 523以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 524 525 526| 错误码ID | 错误信息 | 527| ------- | ----------------------- | 528| 201 | Permission denied. | 529 530**返回值:** 531 532| 类型 | 说明 | 533| ----------------------------------------------- | ----------------------------------------- | 534| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 | 535 536**示例:** 537 538```ts 539import { socket } from '@kit.NetworkKit'; 540import { BusinessError } from '@kit.BasicServicesKit'; 541 542let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 543let bindAddr: socket.NetAddress = { 544 address: '192.168.xx.xxx', 545 port: 8080 546} 547udp.bind(bindAddr, (err: BusinessError) => { 548 if (err) { 549 console.error('bind fail'); 550 return; 551 } 552 console.log('bind success'); 553 udp.getState().then((data: socket.SocketStateBase) => { 554 console.log('getState success:' + JSON.stringify(data)); 555 }).catch((err: BusinessError) => { 556 console.error('getState fail' + JSON.stringify(err)); 557 }); 558}); 559``` 560 561### setExtraOptions 562 563setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void 564 565设置UDPSocket连接的其他属性。使用callback方式作为异步方法。 566 567> **说明:** 568> bind方法调用成功后,才可调用此方法。 569 570**需要权限**:ohos.permission.INTERNET 571 572**系统能力**:SystemCapability.Communication.NetStack 573 574**参数:** 575 576| 参数名 | 类型 | 必填 | 说明 | 577| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 578| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 579| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 580 581**错误码:** 582 583以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 584 585| 错误码ID | 错误信息 | 586| ------- | ----------------------- | 587| 401 | Parameter error. | 588| 201 | Permission denied. | 589 590**示例:** 591 592```ts 593import { socket } from '@kit.NetworkKit'; 594import { BusinessError } from '@kit.BasicServicesKit'; 595 596let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 597 598let bindAddr: socket.NetAddress = { 599 address: '192.168.xx.xxx', 600 port: 8080 601} 602udp.bind(bindAddr, (err: BusinessError) => { 603 if (err) { 604 console.error('bind fail'); 605 return; 606 } 607 console.log('bind success'); 608 let udpextraoptions: socket.UDPExtraOptions = { 609 receiveBufferSize: 8192, 610 sendBufferSize: 8192, 611 reuseAddress: false, 612 socketTimeout: 6000, 613 broadcast: true 614 } 615 udp.setExtraOptions(udpextraoptions, (err: BusinessError) => { 616 if (err) { 617 console.error('setExtraOptions fail'); 618 return; 619 } 620 console.log('setExtraOptions success'); 621 }) 622}) 623``` 624 625### setExtraOptions 626 627setExtraOptions(options: UDPExtraOptions): Promise\<void\> 628 629设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。 630 631> **说明:** 632> bind方法调用成功后,才可调用此方法。 633 634**需要权限**:ohos.permission.INTERNET 635 636**系统能力**:SystemCapability.Communication.NetStack 637 638**参数:** 639 640| 参数名 | 类型 | 必填 | 说明 | 641| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 642| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 643 644**返回值:** 645 646| 类型 | 说明 | 647| -------------- | --------------------------------------------------- | 648| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 649 650**错误码:** 651 652以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 653 654| 错误码ID | 错误信息 | 655| ------- | ----------------------- | 656| 401 | Parameter error. | 657| 201 | Permission denied. | 658 659**示例:** 660 661```ts 662import { socket } from '@kit.NetworkKit'; 663import { BusinessError } from '@kit.BasicServicesKit'; 664 665let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 666 667let bindAddr: socket.NetAddress = { 668 address: '192.168.xx.xxx', 669 port: 8080 670} 671udp.bind(bindAddr, (err: BusinessError) => { 672 if (err) { 673 console.error('bind fail'); 674 return; 675 } 676 console.log('bind success'); 677 let udpextraoptions: socket.UDPExtraOptions = { 678 receiveBufferSize: 8192, 679 sendBufferSize: 8192, 680 reuseAddress: false, 681 socketTimeout: 6000, 682 broadcast: true 683 } 684 udp.setExtraOptions(udpextraoptions).then(() => { 685 console.log('setExtraOptions success'); 686 }).catch((err: BusinessError) => { 687 console.error('setExtraOptions fail'); 688 }); 689}) 690``` 691 692### getLocalAddress<sup>12+</sup> 693 694getLocalAddress(): Promise\<NetAddress\> 695 696获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。 697 698> **说明:** 699> bind方法调用成功后,才可调用此方法。 700 701**系统能力**:SystemCapability.Communication.NetStack 702 703**返回值:** 704 705| 类型 | 说明 | 706| -------------- | --------------------------------------------------- | 707| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 708 709**错误码:** 710 711以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 712 713| 错误码ID | 错误信息 | 714| -------- | ------------------------------------------- | 715| 2300002 | System internal error. | 716| 2301009 | Bad file descriptor. | 717| 2303188 | Socket operation on non-socket. | 718 719**示例:** 720 721```ts 722import { socket } from '@kit.NetworkKit'; 723import { BusinessError } from '@kit.BasicServicesKit'; 724 725let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 726 727let bindAddr: socket.NetAddress = { 728 address: '192.168.xx.xxx', 729 port: 8080 730} 731udp.bind(bindAddr).then(() => { 732 console.info('bind success'); 733 udp.getLocalAddress().then((localAddress: socket.NetAddress) => { 734 console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress)); 735 }).catch((err: BusinessError) => { 736 console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err)); 737 }) 738}).catch((err: BusinessError) => { 739 console.error('bind fail'); 740}); 741``` 742 743### on('message') 744 745on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 746 747订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 748 749**系统能力**:SystemCapability.Communication.NetStack 750 751**参数:** 752 753| 参数名 | 类型 | 必填 | 说明 | 754| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 755| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 756| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。 | 757 758**示例:** 759 760```ts 761import { socket } from '@kit.NetworkKit'; 762import { BusinessError } from '@kit.BasicServicesKit'; 763 764let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 765 766let messageView = ''; 767udp.on('message', (value: socket.SocketMessageInfo) => { 768 for (let i: number = 0; i < value.message.byteLength; i++) { 769 let uint8Array = new Uint8Array(value.message) 770 let messages = uint8Array[i] 771 let message = String.fromCharCode(messages); 772 messageView += message; 773 } 774 console.log('on message message: ' + JSON.stringify(messageView)); 775 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 776}); 777``` 778 779### off('message') 780 781off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 782 783取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 784 785**系统能力**:SystemCapability.Communication.NetStack 786 787**参数:** 788 789| 参数名 | 类型 | 必填 | 说明 | 790| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 791| type | string | 是 | 取消订阅的事件类型。'message':接收消息事件。 | 792| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 793 794**示例:** 795 796```ts 797import { socket } from '@kit.NetworkKit'; 798import { BusinessError } from '@kit.BasicServicesKit'; 799 800let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 801let messageView = ''; 802let callback = (value: socket.SocketMessageInfo) => { 803 for (let i: number = 0; i < value.message.byteLength; i++) { 804 let uint8Array = new Uint8Array(value.message) 805 let messages = uint8Array[i] 806 let message = String.fromCharCode(messages); 807 messageView += message; 808 } 809 console.log('on message message: ' + JSON.stringify(messageView)); 810 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 811} 812udp.on('message', callback); 813// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 814udp.off('message', callback); 815udp.off('message'); 816``` 817 818### on('listening' | 'close') 819 820on(type: 'listening' | 'close', callback: Callback\<void\>): void 821 822订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 823 824**系统能力**:SystemCapability.Communication.NetStack 825 826**参数:** 827 828| 参数名 | 类型 | 必填 | 说明 | 829| -------- | ---------------- | ---- | ------------------------------------------------------------ | 830| type | string | 是 | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 831| callback | Callback\<void\> | 是 | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。 | 832 833**示例:** 834 835```ts 836import { socket } from '@kit.NetworkKit'; 837import { BusinessError } from '@kit.BasicServicesKit'; 838 839let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 840udp.on('listening', () => { 841 console.log("on listening success"); 842}); 843udp.on('close', () => { 844 console.log("on close success"); 845}); 846``` 847 848### off('listening' | 'close') 849 850off(type: 'listening' | 'close', callback?: Callback\<void\>): void 851 852取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 853 854**系统能力**:SystemCapability.Communication.NetStack 855 856**参数:** 857 858| 参数名 | 类型 | 必填 | 说明 | 859| -------- | ---------------- | ---- | ------------------------------------------------------------ | 860| type | string | 是 | 取消订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 861| callback | Callback\<void\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 862 863**示例:** 864 865```ts 866import { socket } from '@kit.NetworkKit'; 867import { BusinessError } from '@kit.BasicServicesKit'; 868 869let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 870let callback1 = () => { 871 console.log("on listening, success"); 872} 873udp.on('listening', callback1); 874// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 875udp.off('listening', callback1); 876udp.off('listening'); 877let callback2 = () => { 878 console.log("on close, success"); 879} 880udp.on('close', callback2); 881// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 882udp.off('close', callback2); 883udp.off('close'); 884``` 885 886### on('error') 887 888on(type: 'error', callback: ErrorCallback): void 889 890订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 891 892**系统能力**:SystemCapability.Communication.NetStack 893 894**参数:** 895 896| 参数名 | 类型 | 必填 | 说明 | 897| -------- | ------------- | ---- | ------------------------------------ | 898| type | string | 是 | 订阅的事件类型。'error':error事件。 | 899| callback | ErrorCallback | 是 | 回调函数。UDPSocket连接发生error事件后触发回调函数。 | 900 901**示例:** 902 903```ts 904import { socket } from '@kit.NetworkKit'; 905import { BusinessError } from '@kit.BasicServicesKit'; 906 907let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 908udp.on('error', (err: BusinessError) => { 909 console.error("on error, err:" + JSON.stringify(err)) 910}); 911``` 912 913### off('error') 914 915off(type: 'error', callback?: ErrorCallback): void 916 917取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 918 919**系统能力**:SystemCapability.Communication.NetStack 920 921**参数:** 922 923| 参数名 | 类型 | 必填 | 说明 | 924| -------- | ------------- | ---- | ------------------------------------ | 925| type | string | 是 | 取消订阅的事件类型。'error':error事件。 | 926| callback | ErrorCallback | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 927 928**示例:** 929 930```ts 931import { socket } from '@kit.NetworkKit'; 932import { BusinessError } from '@kit.BasicServicesKit'; 933 934let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 935let callback = (err: BusinessError) => { 936 console.error("on error, err:" + JSON.stringify(err)); 937} 938udp.on('error', callback); 939// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 940udp.off('error', callback); 941udp.off('error'); 942``` 943 944## NetAddress 945 946目标地址信息。 947 948**系统能力**:SystemCapability.Communication.NetStack 949 950| 名称 | 类型 | 必填 | 说明 | 951| ------- | ------ | ---- | ------------------------------------------------------------ | 952| address<sup>11+</sup> | string | 是 | 本地绑定的ip地址。 | 953| port | number | 否 | 端口号 ,范围0~65535。如果不指定系统随机分配端口。 | 954| family | number | 否 | 网络协议类型,可选类型:<br />- 1:IPv4。默认为1。<br />- 2:IPv6。地址为IPV6类型,该字段必须被显式指定为2。<br />- 3:Domain<sup>18+</sup>。地址为Domain类型,该字段必须被显式指定为3。| 955 956## ProxyOptions<sup>18+</sup> 957 958Socket代理信息。 959 960**系统能力**:SystemCapability.Communication.NetStack 961 962| 名称 | 类型 | 必填 | 说明 | 963| ------- | ------ | ---- | ------------------------------------------------------------ | 964| type | [ProxyTypes](#proxytypes18) | 是 | 代理类型。 | 965| address | [NetAddress](#netaddress) | 是 | 代理地址信息。 | 966| username | string | 否 | 指定用户名,如果使用用户密码验证方式。 | 967| password | string | 否 | 指定密码,如果使用用户密码验证方式。 | 968 969## ProxyTypes<sup>18+</sup> 970 971Socket代理类型。 972 973**系统能力**:SystemCapability.Communication.NetStack 974 975| 名称 | 值 | 说明 | 976| --------- | --------- |------------------ | 977| NONE | 0 | 不使用代理。 | 978| SOCKS5 | 1 | 使用Socks5代理。 | 979 980## UDPSendOptions 981 982UDPSocket发送参数。 983 984**系统能力**:SystemCapability.Communication.NetStack 985 986| 名称 | 类型 | 必填 | 说明 | 987| ------- | ---------------------------------- | ---- | -------------- | 988| data | string \| ArrayBuffer | 是 | 发送的数据。 | 989| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 990| proxy<sup>18+</sup> | [ProxyOptions](#proxyoptions18) | 否 | 使用的代理信息,默认不使用代理。 | 991 992## UDPExtraOptions 993 994UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 995 996**系统能力**:SystemCapability.Communication.NetStack 997 998| 名称 | 类型 | 必填 | 说明 | 999| ----------------- | ------- | ---- | -------------------------------- | 1000| broadcast | boolean | 否 | 是否可以发送广播。true表示可发送广播,false表示不可发送广播。默认为false。 | 1001 1002## SocketMessageInfo<sup>11+</sup> 1003 1004socket连接信息 1005 1006**系统能力**:SystemCapability.Communication.NetStack 1007 1008| 名称 | 类型 | 必填 | 说明 | 1009| ---------- | ------ | ---- | ------------------------------------- | 1010| message | ArrayBuffer | 是 | 接收的事件消息。 | 1011| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是 | socket连接信息。 | 1012 1013## SocketStateBase 1014 1015Socket的状态信息。 1016 1017**系统能力**:SystemCapability.Communication.NetStack 1018 1019| 名称 | 类型 | 必填 | 说明 | 1020| ----------- | ------- | ---- | ---------- | 1021| isBound | boolean | 是 | 是否绑定。true:绑定;false:不绑定。 | 1022| isClose | boolean | 是 | 是否关闭。true:关闭;false:打开。 | 1023| isConnected | boolean | 是 | 是否连接。true:连接;false:断开。 | 1024 1025## SocketRemoteInfo 1026 1027Socket的连接信息。 1028 1029**系统能力**:SystemCapability.Communication.NetStack 1030 1031| 名称 | 类型 | 必填 | 说明 | 1032| ------- | ------ | ---- | ------------------------------------------------------------ | 1033| address | string | 是 | 本地绑定的ip地址。 | 1034| family | 'IPv4' \| 'IPv6' | 是 | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 | 1035| port | number | 是 | 端口号,范围0~65535。 | 1036| size | number | 是 | 服务器响应信息的字节长度。 | 1037 1038## UDP 错误码说明 1039 1040UDP 其余错误码映射形式为:2301000 + Linux内核错误码。 1041 1042错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)。 1043 1044## socket.constructMulticastSocketInstance<sup>11+</sup> 1045 1046constructMulticastSocketInstance(): MulticastSocket 1047 1048创建一个MulticastSocket对象。 1049 1050**系统能力**:SystemCapability.Communication.NetStack 1051 1052**返回值:** 1053 1054| 类型 | 说明 | 1055| ----------------------------------- | ----------------------------- | 1056| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 | 1057 1058**示例:** 1059 1060```ts 1061import { socket } from '@kit.NetworkKit'; 1062let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1063``` 1064## MulticastSocket<sup>11+</sup> 1065 1066MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。 1067 1068### addMembership<sup>11+</sup> 1069 1070addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void 1071 1072加入多播组。使用callback方法作为异步方法。 1073 1074> **说明:** 1075> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1076> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 1077 1078**需要权限**:ohos.permission.INTERNET 1079 1080**系统能力**:SystemCapability.Communication.NetStack 1081 1082**参数:** 1083 1084| 参数名 | 类型 | 必填 | 说明 | 1085| ----------------- | ----------------------------- | ---- | ----------------------------------------- | 1086| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1087| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1088 1089**错误码:** 1090 1091以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1092 1093| 错误码ID | 错误信息 | 1094| ------- | ----------------------- | 1095| 401 | Parameter error. | 1096| 201 | Permission denied. | 1097| 2301022 | Invalid argument. | 1098| 2301088 | Not a socket. | 1099| 2301098 | Address in use. | 1100 1101**示例:** 1102 1103```ts 1104import { socket } from '@kit.NetworkKit'; 1105 1106let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1107let addr: socket.NetAddress = { 1108 address: '239.255.0.1', 1109 port: 8080 1110} 1111multicast.addMembership(addr, (err: Object) => { 1112 if (err) { 1113 console.error('add membership fail, err: ' + JSON.stringify(err)); 1114 return; 1115 } 1116 console.log('add membership success'); 1117}) 1118``` 1119 1120### addMembership<sup>11+</sup> 1121 1122addMembership(multicastAddress: NetAddress): Promise\<void\> 1123 1124加入多播组。使用Promise方法作为异步方法。 1125 1126> **说明:** 1127> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1128> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 1129 1130**需要权限**:ohos.permission.INTERNET 1131 1132**系统能力**:SystemCapability.Communication.NetStack 1133 1134**参数:** 1135 1136| 参数名 | 类型 | 必填 | 说明 | 1137| ----------------- | ----------------------------- | ---- | -------------------------------------------- | 1138| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1139 1140**返回值:** 1141 1142| 类型 | 说明 | 1143| -------------- | ----------------------------------------------- | 1144| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 | 1145 1146**错误码:** 1147 1148以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1149 1150| 错误码ID | 错误信息 | 1151| ------- | ----------------------- | 1152| 401 | Parameter error. | 1153| 201 | Permission denied. | 1154| 2301088 | Not a socket. | 1155| 2301098 | Address in use. | 1156 1157**示例:** 1158 1159```ts 1160import { socket } from '@kit.NetworkKit'; 1161 1162let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1163let addr: socket.NetAddress = { 1164 address: '239.255.0.1', 1165 port: 8080 1166} 1167multicast.addMembership(addr).then(() => { 1168 console.log('addMembership success'); 1169}).catch((err: Object) => { 1170 console.error('addMembership fail'); 1171}); 1172``` 1173 1174### dropMembership<sup>11+</sup> 1175 1176dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void 1177 1178退出多播组。使用callback方法作为异步方法。 1179 1180> **说明:** 1181> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1182> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 1183 1184**需要权限**:ohos.permission.INTERNET 1185 1186**系统能力**:SystemCapability.Communication.NetStack 1187 1188**参数:** 1189 1190| 参数名 | 类型 | 必填 | 说明 | 1191| ----------------- | ----------------------------- | ---- | ------------------------------------------- | 1192| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1193| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。| 1194 1195**错误码:** 1196 1197以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1198 1199| 错误码ID | 错误信息 | 1200| ------- | ----------------------- | 1201| 401 | Parameter error. | 1202| 201 | Permission denied. | 1203| 2301088 | Not a socket. | 1204| 2301098 | Address in use. | 1205 1206**示例:** 1207 1208```ts 1209import { socket } from '@kit.NetworkKit'; 1210 1211let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1212let addr: socket.NetAddress = { 1213 address: '239.255.0.1', 1214 port: 8080 1215} 1216multicast.dropMembership(addr, (err: Object) => { 1217 if (err) { 1218 console.error('drop membership fail, err: ' + JSON.stringify(err)); 1219 return; 1220 } 1221 console.log('drop membership success'); 1222}) 1223``` 1224 1225### dropMembership<sup>11+</sup> 1226 1227dropMembership(multicastAddress: NetAddress): Promise\<void\> 1228 1229退出多播组。使用Promise方法作为异步方法。 1230 1231> **说明:** 1232> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1233> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 1234 1235**需要权限**:ohos.permission.INTERNET 1236 1237**系统能力**:SystemCapability.Communication.NetStack 1238 1239**参数:** 1240 1241| 参数名 | 类型 | 必填 | 说明 | 1242| ----------------- | ------------------------------------- | ---- | -------------------------------------------- | 1243| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1244 1245**返回值:** 1246 1247| 类型 | 说明 | 1248| -------------- | ----------------------------------------------- | 1249| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 | 1250 1251**错误码:** 1252 1253以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1254 1255| 错误码ID | 错误信息 | 1256| ------- | ----------------------- | 1257| 401 | Parameter error. | 1258| 201 | Permission denied. | 1259| 2301088 | Not a socket. | 1260| 2301098 | Address in use. | 1261 1262**示例:** 1263 1264```ts 1265import { socket } from '@kit.NetworkKit'; 1266 1267let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1268let addr: socket.NetAddress = { 1269 address: '239.255.0.1', 1270 port: 8080 1271} 1272multicast.dropMembership(addr).then(() => { 1273 console.log('drop membership success'); 1274}).catch((err: Object) => { 1275 console.error('drop membership fail'); 1276}); 1277``` 1278 1279### setMulticastTTL<sup>11+</sup> 1280 1281setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void 1282 1283设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。 1284 1285> **说明:** 1286> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1287> 范围为 0~255,默认值为 1 。 1288> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1289> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1290 1291**系统能力**:SystemCapability.Communication.NetStack 1292 1293**参数:** 1294 1295| 参数名 | 类型 | 必填 | 说明 | 1296| ------------- | --------------------- | ---- | ----------------------------- | 1297| ttl | number | 是 | ttl设置数值,类型为数字number。 | 1298| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1299 1300**错误码:** 1301 1302以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1303 1304| 错误码ID | 错误信息 | 1305| ------- | ----------------------- | 1306| 401 | Parameter error. | 1307| 2301022 | Invalid argument. | 1308| 2301088 | Not a socket. | 1309 1310**示例:** 1311 1312```ts 1313import { socket } from '@kit.NetworkKit'; 1314 1315let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1316let ttl = 8 1317multicast.setMulticastTTL(ttl, (err: Object) => { 1318 if (err) { 1319 console.error('set ttl fail, err: ' + JSON.stringify(err)); 1320 return; 1321 } 1322 console.log('set ttl success'); 1323}) 1324``` 1325 1326### setMulticastTTL<sup>11+</sup> 1327 1328setMulticastTTL(ttl: number): Promise\<void\> 1329 1330设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。 1331 1332> **说明:** 1333> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1334> 范围为 0~255,默认值为 1 。 1335> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1336> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1337 1338**系统能力**:SystemCapability.Communication.NetStack 1339 1340**参数:** 1341 1342| 参数名 | 类型 | 必填 | 说明 | 1343| ------------- | ---------------------- | ---- | ------------------------------ | 1344| ttl | number | 是 | ttl设置数值,类型为数字Number。 | 1345 1346**返回值:** 1347 1348| 类型 | 说明 | 1349| -------------- | ---------------------------------------------- | 1350| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 | 1351 1352**错误码:** 1353 1354以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1355 1356| 错误码ID | 错误信息 | 1357| ------- | ----------------------- | 1358| 401 | Parameter error. | 1359| 2301022 | Invalid argument. | 1360| 2301088 | Not a socket. | 1361 1362**示例:** 1363 1364```ts 1365import { socket } from '@kit.NetworkKit'; 1366 1367let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1368multicast.setMulticastTTL(8).then(() => { 1369 console.log('set ttl success'); 1370}).catch((err: Object) => { 1371 console.error('set ttl failed'); 1372}); 1373``` 1374 1375### getMulticastTTL<sup>11+</sup> 1376 1377getMulticastTTL(callback: AsyncCallback\<number\>): void 1378 1379获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。 1380 1381> **说明:** 1382> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1383> 范围为 0~255,默认值为 1 。 1384> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1385> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1386 1387**系统能力**:SystemCapability.Communication.NetStack 1388 1389**参数:** 1390 1391| 参数名 | 类型 | 必填 | 说明 | 1392| ------------- | ----------------------- | ---- | --------------------------- | 1393| callback | AsyncCallback\<number\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1394 1395**错误码:** 1396 1397以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1398 1399| 错误码ID | 错误信息 | 1400| ------- | ----------------------- | 1401| 401 | Parameter error. | 1402| 2301088 | Not a socket. | 1403 1404**示例:** 1405 1406```ts 1407import { socket } from '@kit.NetworkKit'; 1408 1409let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1410multicast.getMulticastTTL((err: Object, value: Number) => { 1411 if (err) { 1412 console.error('set ttl fail, err: ' + JSON.stringify(err)); 1413 return; 1414 } 1415 console.log('set ttl success, value: ' + JSON.stringify(value)); 1416}) 1417``` 1418 1419### getMulticastTTL<sup>11+</sup> 1420 1421getMulticastTTL(): Promise\<number\> 1422 1423获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。 1424 1425> **说明:** 1426> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1427> 范围为 0~255,默认值为 1 。 1428> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1429> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1430 1431**系统能力**:SystemCapability.Communication.NetStack 1432 1433**返回值:** 1434 1435| 类型 | 说明 | 1436| ---------------- | --------------------------- | 1437| Promise\<number\> | 以Promise形式返回当前TTL数值。 | 1438 1439**错误码:** 1440 1441以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1442 1443| 错误码ID | 错误信息 | 1444| ------- | ----------------------- | 1445| 401 | Parameter error. | 1446| 2301088 | Not a socket. | 1447 1448**示例:** 1449 1450```ts 1451import { socket } from '@kit.NetworkKit'; 1452 1453let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1454multicast.getMulticastTTL().then((value: Number) => { 1455 console.log('ttl: ', JSON.stringify(value)); 1456}).catch((err: Object) => { 1457 console.error('set ttl failed'); 1458}); 1459``` 1460 1461### setLoopbackMode<sup>11+</sup> 1462 1463setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void 1464 1465设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1466 1467> **说明:** 1468> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1469> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1470> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1471 1472**系统能力**:SystemCapability.Communication.NetStack 1473 1474**参数:** 1475 1476| 参数名 | 类型 | 必填 | 说明 | 1477| ------------- | --------------------- | ---- | ---------------------------- | 1478| flag | boolean | 是 | 是否开启环回模式。true表示环回模式开启,false表示环回模式关闭。 | 1479| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1480 1481**错误码:** 1482 1483以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1484 1485| 错误码ID | 错误信息 | 1486| ------- | ----------------------- | 1487| 401 | Parameter error. | 1488| 2301088 | Not a socket. | 1489 1490**示例:** 1491 1492```ts 1493import { socket } from '@kit.NetworkKit'; 1494 1495let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1496multicast.setLoopbackMode(false, (err: Object) => { 1497 if (err) { 1498 console.error('set loopback mode fail, err: ' + JSON.stringify(err)); 1499 return; 1500 } 1501 console.log('set loopback mode success'); 1502}) 1503``` 1504 1505### setLoopbackMode<sup>11+</sup> 1506 1507setLoopbackMode(flag: boolean): Promise\<void\> 1508 1509设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1510 1511> **说明:** 1512> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1513> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1514> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1515 1516**系统能力**:SystemCapability.Communication.NetStack 1517 1518**参数:** 1519 1520| 参数名 | 类型 | 必填 | 说明 | 1521| ------------- | ---------------------- | ---- | -------------------------------- | 1522| flag | boolean | 是 | 是否开启环回模式。true表示环回模式开启,false表示环回模式关闭。| 1523 1524**返回值:** 1525 1526| 类型 | 说明 | 1527| -------------- | ---------------------------------------------- | 1528| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 | 1529 1530**错误码:** 1531 1532以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1533 1534| 错误码ID | 错误信息 | 1535| ------- | ----------------------- | 1536| 401 | Parameter error. | 1537| 2301088 | Not a socket. | 1538 1539**示例:** 1540 1541```ts 1542import { socket } from '@kit.NetworkKit'; 1543 1544let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1545multicast.setLoopbackMode(false).then(() => { 1546 console.log('set loopback mode success'); 1547}).catch((err: Object) => { 1548 console.error('set loopback mode failed'); 1549}); 1550``` 1551 1552### getLoopbackMode<sup>11+</sup> 1553 1554getLoopbackMode(callback: AsyncCallback\<boolean\>): void 1555 1556获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1557 1558> **说明:** 1559> 用于获取当前环回模式开启或关闭的状态。 1560> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1561> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1562 1563**系统能力**:SystemCapability.Communication.NetStack 1564 1565**参数:** 1566 1567| 参数名 | 类型 | 必填 | 说明 | 1568| ------------- | ----------------------- | ---- | --------------------------- | 1569| callback | AsyncCallback\<boolean\> | 是 | 回调函数。返回值为环回模式状态,true表示环回模式开启,false表示环回模式关闭。 | 1570 1571**错误码:** 1572 1573以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1574 1575| 错误码ID | 错误信息 | 1576| ------- | ----------------------- | 1577| 401 | Parameter error. | 1578| 2301088 | Not a socket. | 1579 1580**示例:** 1581 1582```ts 1583import { socket } from '@kit.NetworkKit'; 1584 1585let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1586multicast.getLoopbackMode((err: Object, value: Boolean) => { 1587 if (err) { 1588 console.error('get loopback mode fail, err: ' + JSON.stringify(err)); 1589 return; 1590 } 1591 console.log('get loopback mode success, value: ' + JSON.stringify(value)); 1592}) 1593``` 1594 1595### getLoopbackMode<sup>11+</sup> 1596 1597getLoopbackMode(): Promise\<boolean\> 1598 1599获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1600 1601> **说明:** 1602> 用于获取当前环回模式开启或关闭的状态。 1603> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1604> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1605 1606**系统能力**:SystemCapability.Communication.NetStack 1607 1608**返回值:** 1609 1610| 类型 | 说明 | 1611| ---------------- | --------------------------- | 1612| Promise\<boolean\> | Promise对象。返回true表示环回模式开启,返回false表示环回模式关闭。 | 1613 1614**错误码:** 1615 1616以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1617 1618| 错误码ID | 错误信息 | 1619| ------- | ----------------------- | 1620| 401 | Parameter error. | 1621| 2301088 | Not a socket. | 1622 1623**示例:** 1624 1625```ts 1626import { socket } from '@kit.NetworkKit'; 1627 1628let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1629multicast.getLoopbackMode().then((value: Boolean) => { 1630 console.log('loopback mode: ', JSON.stringify(value)); 1631}).catch((err: Object) => { 1632 console.error('get loopback mode failed'); 1633}); 1634``` 1635 1636## socket.constructTCPSocketInstance<sup>7+</sup> 1637 1638constructTCPSocketInstance(): TCPSocket 1639 1640创建一个TCPSocket对象。 1641 1642**系统能力**:SystemCapability.Communication.NetStack 1643 1644**返回值:** 1645 1646| 类型 | 说明 | 1647| --------------------------------- | ---------------------- | 1648| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 | 1649 1650**示例:** 1651 1652```ts 1653import { socket } from '@kit.NetworkKit'; 1654let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1655``` 1656 1657## TCPSocket 1658 1659TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。 1660 1661### bind 1662 1663bind(address: NetAddress, callback: AsyncCallback\<void\>): void 1664 1665绑定IP地址和端口,端口可以指定为0由系统随机分配或由用户指定为其它非0端口。使用callback方法作为异步方法。 1666 1667> **说明:** 1668> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1669> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1670> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1671 1672**需要权限**:ohos.permission.INTERNET 1673 1674**系统能力**:SystemCapability.Communication.NetStack 1675 1676**参数:** 1677 1678| 参数名 | 类型 | 必填 | 说明 | 1679| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1680| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1681| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误、错误信息。 | 1682 1683**错误码:** 1684 1685以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 1686 1687| 错误码ID | 错误信息 | 1688| ------- | ----------------------- | 1689| 401 | Parameter error. | 1690| 201 | Permission denied. | 1691 1692**示例:** 1693 1694```ts 1695import { socket } from '@kit.NetworkKit'; 1696import { BusinessError } from '@kit.BasicServicesKit'; 1697 1698let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1699let bindAddr: socket.NetAddress = { 1700 address: '192.168.xx.xxx', 1701 port: 8080 1702} 1703tcp.bind(bindAddr, (err: BusinessError) => { 1704 if (err) { 1705 console.error('bind fail'); 1706 return; 1707 } 1708 console.log('bind success'); 1709}) 1710``` 1711 1712### bind 1713 1714bind(address: NetAddress): Promise\<void\> 1715 1716绑定IP地址和端口,端口可以指定为0由系统随机分配或由用户指定为其它非0端口。使用Promise方法作为异步方法。 1717 1718> **说明:** 1719> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1720> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1721> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1722 1723**需要权限**:ohos.permission.INTERNET 1724 1725**系统能力**:SystemCapability.Communication.NetStack 1726 1727**参数:** 1728 1729| 参数名 | 类型 | 必填 | 说明 | 1730| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1731| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1732 1733**返回值:** 1734 1735| 类型 | 说明 | 1736| --------------- | ------------------------------------------------------- | 1737| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 | 1738 1739**错误码:** 1740 1741以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 1742 1743| 错误码ID | 错误信息 | 1744| ------- | ----------------------- | 1745| 401 | Parameter error. | 1746| 201 | Permission denied. | 1747 1748**示例:** 1749 1750```ts 1751import { socket } from '@kit.NetworkKit'; 1752import { BusinessError } from '@kit.BasicServicesKit'; 1753 1754let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1755let bindAddr: socket.NetAddress = { 1756 address: '192.168.xx.xxx', 1757 port: 8080 1758} 1759tcp.bind(bindAddr).then(() => { 1760 console.log('bind success'); 1761}).catch((err: BusinessError) => { 1762 console.error('bind fail'); 1763}); 1764``` 1765 1766### connect 1767 1768connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void 1769 1770连接到指定的IP地址和端口。使用callback方法作为异步方法。 1771 1772> **说明:** 1773> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接 1774 1775**需要权限**:ohos.permission.INTERNET 1776 1777**系统能力**:SystemCapability.Communication.NetStack 1778 1779**参数:** 1780 1781| 参数名 | 类型 | 必填 | 说明 | 1782| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1783| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1784| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1785 1786**错误码:** 1787 1788以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1789 1790| 错误码ID | 错误信息 | 1791| ------- | ----------------------- | 1792| 401 | Parameter error. | 1793| 201 | Permission denied. | 1794| 2301206 | Socks5 failed to connect to the proxy server. | 1795| 2301207 | Socks5 username or password is invalid. | 1796| 2301208 | Socks5 failed to connect to the remote server. | 1797| 2301209 | Socks5 failed to negotiate the authentication method. | 1798| 2301210 | Socks5 failed to send the message. | 1799| 2301211 | Socks5 failed to receive the message. | 1800| 2301212 | Socks5 serialization error. | 1801| 2301213 | Socks5 deserialization error. | 1802 1803**示例:** 1804 1805```ts 1806import { socket } from '@kit.NetworkKit'; 1807import { BusinessError } from '@kit.BasicServicesKit'; 1808 1809let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1810let netAddress: socket.NetAddress = { 1811 address: '192.168.xx.xxx', 1812 port: 8080 1813} 1814let tcpconnectoptions: socket.TCPConnectOptions = { 1815 address: netAddress, 1816 timeout: 6000 1817} 1818tcp.connect(tcpconnectoptions, (err: BusinessError) => { 1819 if (err) { 1820 console.error('connect fail'); 1821 return; 1822 } 1823 console.log('connect success'); 1824}) 1825``` 1826 1827**示例(设置socket代理):** 1828 1829```ts 1830import { socket } from '@kit.NetworkKit'; 1831import { BusinessError } from '@kit.BasicServicesKit'; 1832 1833let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1834let netAddress: socket.NetAddress = { 1835 address: '192.168.xx.xxx', 1836 port: 8080 1837} 1838let socks5Server: socket.NetAddress = { 1839 address: '192.168.xx.xxx', 1840 port: 8080 1841} 1842let proxyOptions: socket.ProxyOptions = { 1843 type : 1, 1844 address: socks5Server, 1845 username: "xxx", 1846 password: "xxx" 1847} 1848let tcpconnectoptions: socket.TCPConnectOptions = { 1849 address: netAddress, 1850 timeout: 6000, 1851 proxy: proxyOptions, 1852} 1853tcp.connect(tcpconnectoptions, (err: BusinessError) => { 1854 if (err) { 1855 console.error('connect fail'); 1856 return; 1857 } 1858 console.log('connect success'); 1859}) 1860``` 1861 1862### connect 1863 1864connect(options: TCPConnectOptions): Promise\<void\> 1865 1866连接到指定的IP地址和端口。使用promise方法作为异步方法。 1867 1868> **说明:** 1869> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。 1870 1871**需要权限**:ohos.permission.INTERNET 1872 1873**系统能力**:SystemCapability.Communication.NetStack 1874 1875**参数:** 1876 1877| 参数名 | 类型 | 必填 | 说明 | 1878| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1879| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1880 1881**返回值:** 1882 1883| 类型 | 说明 | 1884| -------------- | --------------------------------------------------------- | 1885| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 | 1886 1887**错误码:** 1888 1889以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 1890 1891| 错误码ID | 错误信息 | 1892| ------- | ----------------------- | 1893| 401 | Parameter error. | 1894| 201 | Permission denied. | 1895| 2301206 | Socks5 failed to connect to the proxy server. | 1896| 2301207 | Socks5 username or password is invalid. | 1897| 2301208 | Socks5 failed to connect to the remote server. | 1898| 2301209 | Socks5 failed to negotiate the authentication method. | 1899| 2301210 | Socks5 failed to send the message. | 1900| 2301211 | Socks5 failed to receive the message. | 1901| 2301212 | Socks5 serialization error. | 1902| 2301213 | Socks5 deserialization error. | 1903 1904**示例:** 1905 1906```ts 1907import { socket } from '@kit.NetworkKit'; 1908import { BusinessError } from '@kit.BasicServicesKit'; 1909 1910let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1911let netAddress: socket.NetAddress = { 1912 address: '192.168.xx.xxx', 1913 port: 8080 1914} 1915let tcpconnectoptions: socket.TCPConnectOptions = { 1916 address: netAddress, 1917 timeout: 6000 1918} 1919tcp.connect(tcpconnectoptions).then(() => { 1920 console.log('connect success') 1921}).catch((err: BusinessError) => { 1922 console.error('connect fail'); 1923}); 1924``` 1925 1926**示例(设置socket代理):** 1927 1928```ts 1929import { socket } from '@kit.NetworkKit'; 1930import { BusinessError } from '@kit.BasicServicesKit'; 1931 1932let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1933let netAddress: socket.NetAddress = { 1934 address: '192.168.xx.xxx', 1935 port: 8080 1936} 1937let socks5Server: socket.NetAddress = { 1938 address: '192.168.xx.xxx', 1939 port: 8080 1940} 1941let proxyOptions: socket.ProxyOptions = { 1942 type : 1, 1943 address: socks5Server, 1944 username: "xxx", 1945 password: "xxx" 1946} 1947let tcpconnectoptions: socket.TCPConnectOptions = { 1948 address: netAddress, 1949 timeout: 6000, 1950 proxy: proxyOptions, 1951} 1952tcp.connect(tcpconnectoptions).then(() => { 1953 console.log('connect success') 1954}).catch((err: BusinessError) => { 1955 console.error('connect fail'); 1956}); 1957``` 1958 1959### send 1960 1961send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 1962 1963通过TCPSocket连接发送数据。使用callback方式作为异步方法。 1964 1965> **说明:** 1966> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 1967 1968**需要权限**:ohos.permission.INTERNET 1969 1970**系统能力**:SystemCapability.Communication.NetStack 1971 1972**参数:** 1973 1974| 参数名 | 类型 | 必填 | 说明 | 1975| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 1976| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 1977| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1978 1979**错误码:** 1980 1981以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 1982 1983| 错误码ID | 错误信息 | 1984| ------- | ----------------------- | 1985| 401 | Parameter error. | 1986| 201 | Permission denied. | 1987 1988**示例:** 1989 1990```ts 1991import { socket } from '@kit.NetworkKit'; 1992import { BusinessError } from '@kit.BasicServicesKit'; 1993 1994let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1995let netAddress: socket.NetAddress = { 1996 address: '192.168.xx.xxx', 1997 port: 8080 1998} 1999let tcpconnectoptions: socket.TCPConnectOptions = { 2000 address: netAddress, 2001 timeout: 6000 2002} 2003tcp.connect(tcpconnectoptions, () => { 2004 console.log('connect success'); 2005 let tcpSendOptions: socket.TCPSendOptions = { 2006 data: 'Hello, server!' 2007 } 2008 tcp.send(tcpSendOptions, (err: BusinessError) => { 2009 if (err) { 2010 console.error('send fail'); 2011 return; 2012 } 2013 console.log('send success'); 2014 }) 2015}) 2016``` 2017 2018### send 2019 2020send(options: TCPSendOptions): Promise\<void\> 2021 2022通过TCPSocket连接发送数据。使用Promise方式作为异步方法。 2023 2024> **说明:** 2025> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 2026 2027**需要权限**:ohos.permission.INTERNET 2028 2029**系统能力**:SystemCapability.Communication.NetStack 2030 2031**参数:** 2032 2033| 参数名 | 类型 | 必填 | 说明 | 2034| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 2035| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 2036 2037**返回值:** 2038 2039| 类型 | 说明 | 2040| -------------- | ------------------------------------------------- | 2041| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 2042 2043**错误码:** 2044 2045以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2046 2047| 错误码ID | 错误信息 | 2048| ------- | ----------------------- | 2049| 401 | Parameter error. | 2050| 201 | Permission denied. | 2051 2052**示例:** 2053 2054```ts 2055import { socket } from '@kit.NetworkKit'; 2056import { BusinessError } from '@kit.BasicServicesKit'; 2057 2058let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2059let netAddress: socket.NetAddress = { 2060 address: '192.168.xx.xxx', 2061 port: 8080 2062} 2063let tcpconnectoptions: socket.TCPConnectOptions = { 2064 address: netAddress, 2065 timeout: 6000 2066} 2067tcp.connect(tcpconnectoptions, () => { 2068 console.log('connect success'); 2069 let tcpSendOptions: socket.TCPSendOptions = { 2070 data: 'Hello, server!' 2071 } 2072 tcp.send(tcpSendOptions).then(() => { 2073 console.log('send success'); 2074 }).catch((err: BusinessError) => { 2075 console.error('send fail'); 2076 }); 2077}) 2078``` 2079 2080### close 2081 2082close(callback: AsyncCallback\<void\>): void 2083 2084关闭TCPSocket连接。使用callback方式作为异步方法。 2085 2086**需要权限**:ohos.permission.INTERNET 2087 2088**系统能力**:SystemCapability.Communication.NetStack 2089 2090**参数:** 2091 2092| 参数名 | 类型 | 必填 | 说明 | 2093| -------- | --------------------- | ---- | ---------- | 2094| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 2095 2096**错误码:** 2097 2098以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2099 2100| 错误码ID | 错误信息 | 2101| ------- | ----------------------- | 2102| 201 | Permission denied. | 2103 2104**示例:** 2105 2106```ts 2107import { socket } from '@kit.NetworkKit'; 2108import { BusinessError } from '@kit.BasicServicesKit'; 2109 2110let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2111 2112tcp.close((err: BusinessError) => { 2113 if (err) { 2114 console.error('close fail'); 2115 return; 2116 } 2117 console.log('close success'); 2118}) 2119``` 2120 2121### close 2122 2123close(): Promise\<void\> 2124 2125关闭TCPSocket连接。使用Promise方式作为异步方法。 2126 2127**需要权限**:ohos.permission.INTERNET 2128 2129**系统能力**:SystemCapability.Communication.NetStack 2130 2131**返回值:** 2132 2133| 类型 | 说明 | 2134| -------------- | ----------------------------------------- | 2135| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 2136 2137**错误码:** 2138 2139以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2140 2141| 错误码ID | 错误信息 | 2142| ------- | ----------------------- | 2143| 201 | Permission denied. | 2144 2145**示例:** 2146 2147```ts 2148import { socket } from '@kit.NetworkKit'; 2149import { BusinessError } from '@kit.BasicServicesKit'; 2150 2151let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2152 2153tcp.close().then(() => { 2154 console.log('close success'); 2155}).catch((err: BusinessError) => { 2156 console.error('close fail'); 2157}); 2158``` 2159 2160### getRemoteAddress 2161 2162getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 2163 2164获取对端Socket地址。使用callback方式作为异步方法。 2165 2166> **说明:** 2167> connect方法调用成功后,才可调用此方法。 2168 2169**需要权限**:ohos.permission.INTERNET 2170 2171**系统能力**:SystemCapability.Communication.NetStack 2172 2173**参数:** 2174 2175| 参数名 | 类型 | 必填 | 说明 | 2176| -------- | ------------------------------------------------- | ---- | ---------- | 2177| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 | 2178 2179**错误码:** 2180 2181以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2182 2183| 错误码ID | 错误信息 | 2184| ------- | ----------------------- | 2185| 201 | Permission denied. | 2186 2187**示例:** 2188 2189```ts 2190import { socket } from '@kit.NetworkKit'; 2191import { BusinessError } from '@kit.BasicServicesKit'; 2192 2193let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2194let netAddress: socket.NetAddress = { 2195 address: '192.168.xx.xxx', 2196 port: 8080 2197} 2198let tcpconnectoptions: socket.TCPConnectOptions = { 2199 address: netAddress, 2200 timeout: 6000 2201} 2202tcp.connect(tcpconnectoptions, () => { 2203 console.log('connect success'); 2204 tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 2205 if (err) { 2206 console.error('getRemoteAddressfail'); 2207 return; 2208 } 2209 console.log('getRemoteAddresssuccess:' + JSON.stringify(data)); 2210 }) 2211}); 2212``` 2213 2214### getRemoteAddress 2215 2216getRemoteAddress(): Promise\<NetAddress\> 2217 2218获取对端Socket地址。使用Promise方式作为异步方法。 2219 2220> **说明:** 2221> connect方法调用成功后,才可调用此方法。 2222 2223**需要权限**:ohos.permission.INTERNET 2224 2225**系统能力**:SystemCapability.Communication.NetStack 2226 2227**返回值:** 2228 2229| 类型 | 说明 | 2230| ------------------------------------------ | ------------------------------------------ | 2231| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 2232 2233**错误码:** 2234 2235以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2236 2237| 错误码ID | 错误信息 | 2238| ------- | ----------------------- | 2239| 201 | Permission denied. | 2240 2241**示例:** 2242 2243```ts 2244import { socket } from '@kit.NetworkKit'; 2245import { BusinessError } from '@kit.BasicServicesKit'; 2246 2247let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2248let netAddress: socket.NetAddress = { 2249 address: '192.168.xx.xxx', 2250 port: 8080 2251} 2252let tcpconnectoptions: socket.TCPConnectOptions = { 2253 address: netAddress, 2254 timeout: 6000 2255} 2256tcp.connect(tcpconnectoptions).then(() => { 2257 console.log('connect success'); 2258 tcp.getRemoteAddress().then(() => { 2259 console.log('getRemoteAddress success'); 2260 }).catch((err: BusinessError) => { 2261 console.error('getRemoteAddressfail'); 2262 }); 2263}).catch((err: BusinessError) => { 2264 console.error('connect fail'); 2265}); 2266``` 2267 2268### getState 2269 2270getState(callback: AsyncCallback\<SocketStateBase\>): void 2271 2272获取TCPSocket状态。使用callback方式作为异步方法。 2273 2274> **说明:** 2275> bind或connect方法调用成功后,才可调用此方法。 2276 2277**需要权限**:ohos.permission.INTERNET 2278 2279**系统能力**:SystemCapability.Communication.NetStack 2280 2281**参数:** 2282 2283| 参数名 | 类型 | 必填 | 说明 | 2284| -------- | ------------------------------------------------------ | ---- | ---------- | 2285| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 | 2286 2287**错误码:** 2288 2289以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2290 2291| 错误码ID | 错误信息 | 2292| ------- | ----------------------- | 2293| 201 | Permission denied. | 2294 2295**示例:** 2296 2297```ts 2298import { socket } from '@kit.NetworkKit'; 2299import { BusinessError } from '@kit.BasicServicesKit'; 2300 2301let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2302let netAddress: socket.NetAddress = { 2303 address: '192.168.xx.xxx', 2304 port: 8080 2305} 2306let tcpconnectoptions: socket.TCPConnectOptions = { 2307 address: netAddress, 2308 timeout: 6000 2309} 2310tcp.connect(tcpconnectoptions, () => { 2311 console.log('connect success'); 2312 tcp.getState((err: BusinessError, data: socket.SocketStateBase) => { 2313 if (err) { 2314 console.error('getState fail'); 2315 return; 2316 } 2317 console.log('getState success:' + JSON.stringify(data)); 2318 }); 2319}); 2320``` 2321 2322### getState 2323 2324getState(): Promise\<SocketStateBase\> 2325 2326获取TCPSocket状态。使用Promise方式作为异步方法。 2327 2328> **说明:** 2329> bind或connect方法调用成功后,才可调用此方法。 2330 2331**需要权限**:ohos.permission.INTERNET 2332 2333**系统能力**:SystemCapability.Communication.NetStack 2334 2335**返回值:** 2336 2337| 类型 | 说明 | 2338| ----------------------------------------------- | ----------------------------------------- | 2339| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 2340 2341**错误码:** 2342 2343以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2344 2345| 错误码ID | 错误信息 | 2346| ------- | ----------------------- | 2347| 201 | Permission denied. | 2348 2349**示例:** 2350 2351```ts 2352import { socket } from '@kit.NetworkKit'; 2353import { BusinessError } from '@kit.BasicServicesKit'; 2354 2355let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2356let netAddress: socket.NetAddress = { 2357 address: '192.168.xx.xxx', 2358 port: 8080 2359} 2360let tcpconnectoptions: socket.TCPConnectOptions = { 2361 address: netAddress, 2362 timeout: 6000 2363} 2364tcp.connect(tcpconnectoptions).then(() => { 2365 console.log('connect success'); 2366 tcp.getState().then(() => { 2367 console.log('getState success'); 2368 }).catch((err: BusinessError) => { 2369 console.error('getState fail'); 2370 }); 2371}).catch((err: BusinessError) => { 2372 console.error('connect fail'); 2373}); 2374``` 2375 2376### getSocketFd<sup>10+</sup> 2377 2378getSocketFd(callback: AsyncCallback\<number\>): void 2379 2380获取TCPSocket的文件描述符。使用callback方式作为异步方法。 2381 2382> **说明:** 2383> bind或connect方法调用成功后,才可调用此方法。 2384 2385**系统能力**:SystemCapability.Communication.NetStack 2386 2387**参数:** 2388 2389| 参数名 | 类型 | 必填 | 说明 | 2390| -------- | ------------------------------------------------------ | ---- | ---------- | 2391| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 | 2392 2393**示例:** 2394 2395```ts 2396import { socket } from '@kit.NetworkKit'; 2397import { BusinessError } from '@kit.BasicServicesKit'; 2398 2399let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2400let bindAddr: socket.NetAddress = { 2401 address: '0.0.0.0' 2402} 2403tcp.bind(bindAddr) 2404let netAddress: socket.NetAddress = { 2405 address: '192.168.xx.xxx', 2406 port: 8080 2407} 2408let tcpconnectoptions: socket.TCPConnectOptions = { 2409 address: netAddress, 2410 timeout: 6000 2411} 2412tcp.connect(tcpconnectoptions) 2413tcp.getSocketFd((err: BusinessError, data: number) => { 2414 console.info("getSocketFd failed: " + err); 2415 console.info("tunenlfd: " + data); 2416}) 2417``` 2418### getSocketFd<sup>10+</sup> 2419 2420getSocketFd(): Promise\<number\> 2421 2422获取TCPSocket的文件描述符。使用Promise方式作为异步方法。 2423 2424> **说明:** 2425> bind或connect方法调用成功后,才可调用此方法。 2426 2427**系统能力**:SystemCapability.Communication.NetStack 2428 2429**返回值:** 2430 2431| 类型 | 说明 | 2432| ----------------------------------------------- | ----------------------------------------- | 2433| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 2434 2435**示例:** 2436 2437```ts 2438import { socket } from '@kit.NetworkKit'; 2439import { BusinessError } from '@kit.BasicServicesKit'; 2440 2441let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2442let bindAddr: socket.NetAddress = { 2443 address: '0.0.0.0' 2444} 2445tcp.bind(bindAddr) 2446let netAddress: socket.NetAddress = { 2447 address: '192.168.xx.xxx', 2448 port: 8080 2449} 2450let tcpconnectoptions: socket.TCPConnectOptions = { 2451 address: netAddress, 2452 timeout: 6000 2453} 2454tcp.connect(tcpconnectoptions) 2455tcp.getSocketFd().then((data: number) => { 2456 console.info("tunenlfd: " + data); 2457}) 2458``` 2459 2460### setExtraOptions 2461 2462setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 2463 2464设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 2465 2466> **说明:** 2467> bind或connect方法调用成功后,才可调用此方法。 2468 2469**需要权限**:ohos.permission.INTERNET 2470 2471**系统能力**:SystemCapability.Communication.NetStack 2472 2473**参数:** 2474 2475| 参数名 | 类型 | 必填 | 说明 | 2476| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2477| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2478| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2479 2480**错误码:** 2481 2482以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2483 2484| 错误码ID | 错误信息 | 2485| ------- | ----------------------- | 2486| 401 | Parameter error. | 2487| 201 | Permission denied. | 2488 2489**示例:** 2490 2491```ts 2492import { socket } from '@kit.NetworkKit'; 2493import { BusinessError } from '@kit.BasicServicesKit'; 2494 2495let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2496let netAddress: socket.NetAddress = { 2497 address: '192.168.xx.xxx', 2498 port: 8080 2499} 2500let tcpconnectoptions: socket.TCPConnectOptions = { 2501 address: netAddress, 2502 timeout: 6000 2503} 2504 2505interface SocketLinger { 2506 on: boolean; 2507 linger: number; 2508} 2509 2510tcp.connect(tcpconnectoptions, () => { 2511 console.log('connect success'); 2512 let tcpExtraOptions: socket.TCPExtraOptions = { 2513 keepAlive: true, 2514 OOBInline: true, 2515 TCPNoDelay: true, 2516 socketLinger: { on: true, linger: 10 } as SocketLinger, 2517 receiveBufferSize: 8192, 2518 sendBufferSize: 8192, 2519 reuseAddress: true, 2520 socketTimeout: 3000 2521 } 2522 tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 2523 if (err) { 2524 console.error('setExtraOptions fail'); 2525 return; 2526 } 2527 console.log('setExtraOptions success'); 2528 }); 2529}); 2530``` 2531 2532### setExtraOptions 2533 2534setExtraOptions(options: TCPExtraOptions): Promise\<void\> 2535 2536设置TCPSocket连接的其他属性。使用Promise方式作为异步方法。 2537 2538> **说明:** 2539> bind或connect方法调用成功后,才可调用此方法。 2540 2541**需要权限**:ohos.permission.INTERNET 2542 2543**系统能力**:SystemCapability.Communication.NetStack 2544 2545**参数:** 2546 2547| 参数名 | 类型 | 必填 | 说明 | 2548| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2549| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2550 2551**返回值:** 2552 2553| 类型 | 说明 | 2554| -------------- | --------------------------------------------------- | 2555| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 2556 2557**错误码:** 2558 2559以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 2560 2561| 错误码ID | 错误信息 | 2562| ------- | ----------------------- | 2563| 401 | Parameter error. | 2564| 201 | Permission denied. | 2565 2566**示例:** 2567 2568```ts 2569import { socket } from '@kit.NetworkKit'; 2570import { BusinessError } from '@kit.BasicServicesKit'; 2571 2572let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2573let netAddress: socket.NetAddress = { 2574 address: '192.168.xx.xxx', 2575 port: 8080 2576} 2577let tcpconnectoptions: socket.TCPConnectOptions = { 2578 address: netAddress, 2579 timeout: 6000 2580} 2581 2582interface SocketLinger { 2583 on: boolean; 2584 linger: number; 2585} 2586 2587tcp.connect(tcpconnectoptions, () => { 2588 console.log('connect success'); 2589 let tcpExtraOptions: socket.TCPExtraOptions = { 2590 keepAlive: true, 2591 OOBInline: true, 2592 TCPNoDelay: true, 2593 socketLinger: { on: true, linger: 10 } as SocketLinger, 2594 receiveBufferSize: 8192, 2595 sendBufferSize: 8192, 2596 reuseAddress: true, 2597 socketTimeout: 3000 2598 } 2599 tcp.setExtraOptions(tcpExtraOptions).then(() => { 2600 console.log('setExtraOptions success'); 2601 }).catch((err: BusinessError) => { 2602 console.error('setExtraOptions fail'); 2603 }); 2604}); 2605``` 2606 2607### getLocalAddress<sup>12+</sup> 2608 2609getLocalAddress(): Promise\<NetAddress\> 2610 2611获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。 2612 2613> **说明:** 2614> bind方法调用成功后,才可调用此方法。 2615 2616**系统能力**:SystemCapability.Communication.NetStack 2617 2618**返回值:** 2619 2620| 类型 | 说明 | 2621| -------------- | --------------------------------------------------- | 2622| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 2623 2624**错误码:** 2625 2626以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 2627 2628| 错误码ID | 错误信息 | 2629| -------- | ------------------------------------------- | 2630| 2300002 | System internal error. | 2631| 2301009 | Bad file descriptor. | 2632| 2303188 | Socket operation on non-socket. | 2633 2634**示例:** 2635 2636```ts 2637import { socket } from '@kit.NetworkKit'; 2638import { BusinessError } from '@kit.BasicServicesKit'; 2639 2640let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2641let bindAddr: socket.NetAddress = { 2642 address: '192.168.xx.xxx', 2643 family: 1, 2644 port: 8080 2645} 2646tcp.bind(bindAddr).then(() => { 2647 tcp.getLocalAddress().then((localAddress: socket.NetAddress) => { 2648 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 2649 }).catch((err: BusinessError) => { 2650 console.error("FAILED! Error:" + JSON.stringify(err)); 2651 }) 2652}).catch((err: BusinessError) => { 2653 console.error('bind fail'); 2654}); 2655``` 2656 2657### on('message') 2658 2659on(type: 'message', callback: Callback<SocketMessageInfo\>): void 2660 2661订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2662 2663**系统能力**:SystemCapability.Communication.NetStack 2664 2665**参数:** 2666 2667| 参数名 | 类型 | 必填 | 说明 | 2668| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2669| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 2670| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回TCPSocket连接信息。 | 2671 2672**示例:** 2673 2674```ts 2675import { socket } from '@kit.NetworkKit'; 2676import { BusinessError } from '@kit.BasicServicesKit'; 2677 2678let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2679let messageView = ''; 2680tcp.on('message', (value: socket.SocketMessageInfo) => { 2681 for (let i: number = 0; i < value.message.byteLength; i++) { 2682 let uint8Array = new Uint8Array(value.message) 2683 let messages = uint8Array[i] 2684 let message = String.fromCharCode(messages); 2685 messageView += message; 2686 } 2687 console.log('on message message: ' + JSON.stringify(messageView)); 2688 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2689}); 2690``` 2691 2692### off('message') 2693 2694off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 2695 2696取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2697 2698**系统能力**:SystemCapability.Communication.NetStack 2699 2700**参数:** 2701 2702| 参数名 | 类型 | 必填 | 说明 | 2703| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2704| type | string | 是 | 取消订阅的事件类型。'message':接收消息事件。 | 2705| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 2706 2707**示例:** 2708 2709```ts 2710import { socket } from '@kit.NetworkKit'; 2711import { BusinessError } from '@kit.BasicServicesKit'; 2712 2713let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2714let messageView = ''; 2715let callback = (value: socket.SocketMessageInfo) => { 2716 for (let i: number = 0; i < value.message.byteLength; i++) { 2717 let uint8Array = new Uint8Array(value.message) 2718 let messages = uint8Array[i] 2719 let message = String.fromCharCode(messages); 2720 messageView += message; 2721 } 2722 console.log('on message message: ' + JSON.stringify(messageView)); 2723 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2724} 2725tcp.on('message', callback); 2726// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2727tcp.off('message', callback); 2728tcp.off('message'); 2729``` 2730 2731### on('connect' | 'close') 2732 2733on(type: 'connect' | 'close', callback: Callback\<void\>): void 2734 2735订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2736 2737**系统能力**:SystemCapability.Communication.NetStack 2738 2739**参数:** 2740 2741| 参数名 | 类型 | 必填 | 说明 | 2742| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2743| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2744| callback | Callback\<void\> | 是 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | 2745 2746**示例:** 2747 2748```ts 2749import { socket } from '@kit.NetworkKit'; 2750import { BusinessError } from '@kit.BasicServicesKit'; 2751 2752let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2753tcp.on('connect', () => { 2754 console.log("on connect success") 2755}); 2756tcp.on('close', () => { 2757 console.log("on close success") 2758}); 2759``` 2760 2761### off('connect' | 'close') 2762 2763off(type: 'connect' | 'close', callback?: Callback\<void\>): void 2764 2765取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2766 2767**系统能力**:SystemCapability.Communication.NetStack 2768 2769**参数:** 2770 2771| 参数名 | 类型 | 必填 | 说明 | 2772| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2773| type | string | 是 | 取消订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2774| callback | Callback\<void\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 2775 2776**示例:** 2777 2778```ts 2779import { socket } from '@kit.NetworkKit'; 2780import { BusinessError } from '@kit.BasicServicesKit'; 2781 2782let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2783let callback1 = () => { 2784 console.log("on connect success"); 2785} 2786tcp.on('connect', callback1); 2787// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2788tcp.off('connect', callback1); 2789tcp.off('connect'); 2790let callback2 = () => { 2791 console.log("on close success"); 2792} 2793tcp.on('close', callback2); 2794// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2795tcp.off('close', callback2); 2796tcp.off('close'); 2797``` 2798 2799### on('error') 2800 2801on(type: 'error', callback: ErrorCallback): void 2802 2803订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2804 2805**系统能力**:SystemCapability.Communication.NetStack 2806 2807**参数:** 2808 2809| 参数名 | 类型 | 必填 | 说明 | 2810| -------- | ------------- | ---- | ------------------------------------ | 2811| type | string | 是 | 订阅的事件类型。'error':error事件。 | 2812| callback | ErrorCallback | 是 | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。 | 2813 2814**示例:** 2815 2816```ts 2817import { socket } from '@kit.NetworkKit'; 2818import { BusinessError } from '@kit.BasicServicesKit'; 2819 2820let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2821tcp.on('error', (err: BusinessError) => { 2822 console.error("on error, err:" + JSON.stringify(err)) 2823}); 2824``` 2825 2826### off('error') 2827 2828off(type: 'error', callback?: ErrorCallback): void 2829 2830取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2831 2832**系统能力**:SystemCapability.Communication.NetStack 2833 2834**参数:** 2835 2836| 参数名 | 类型 | 必填 | 说明 | 2837| -------- | ------------- | ---- | ------------------------------------ | 2838| type | string | 是 | 取消订阅的事件类型。'error':error事件。 | 2839| callback | ErrorCallback | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 2840 2841**示例:** 2842 2843```ts 2844import { socket } from '@kit.NetworkKit'; 2845import { BusinessError } from '@kit.BasicServicesKit'; 2846 2847let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2848let callback = (err: BusinessError) => { 2849 console.error("on error, err:" + JSON.stringify(err)); 2850} 2851tcp.on('error', callback); 2852// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2853tcp.off('error', callback); 2854tcp.off('error'); 2855``` 2856 2857## TCPConnectOptions 2858 2859TCPSocket连接的参数。 2860 2861**系统能力**:SystemCapability.Communication.NetStack 2862 2863| 名称 | 类型 | 必填 | 说明 | 2864| ------- | ---------------------------------- | ---- | -------------------------- | 2865| address | [NetAddress](#netaddress) | 是 | 绑定的地址以及端口。 | 2866| timeout | number | 否 | 超时时间,单位毫秒(ms)。默认值为5000。 | 2867| proxy<sup>18+</sup> | [ProxyOptions](#proxyoptions18) | 否 | 使用的代理信息,默认不使用代理。 | 2868 2869## TCPSendOptions 2870 2871TCPSocket发送请求的参数。 2872 2873**系统能力**:SystemCapability.Communication.NetStack 2874 2875| 名称 | 类型 | 必填 | 说明 | 2876| -------- | ------ | ---- | ------------------------------------------------------------ | 2877| data | string\| ArrayBuffer | 是 | 发送的数据。 | 2878| encoding | string | 否 | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 | 2879 2880## TCPExtraOptions 2881 2882TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 2883 2884**系统能力**:SystemCapability.Communication.NetStack 2885 2886| 名称 | 类型 | 必填 | 说明 | 2887| ----------------- | ------- | ---- | ------------------------------------------------------------ | 2888| keepAlive | boolean | 否 | 是否保持连接。默认为false。true:保持连接;false:断开连接。 | 2889| OOBInline | boolean | 否 | 是否为OOB内联。默认为false。true:是OOB内联;false:不是OOB内联。 | 2890| TCPNoDelay | boolean | 否 | TCPSocket连接是否无时延。默认为false。true:无时延;false:有时延。 | 2891| socketLinger | \{on:boolean, linger:number\} | 否 | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 | 2892 2893## socket.constructTCPSocketServerInstance<sup>10+</sup> 2894 2895constructTCPSocketServerInstance(): TCPSocketServer 2896 2897创建一个TCPSocketServer对象。 2898 2899**系统能力**:SystemCapability.Communication.NetStack 2900 2901**返回值:** 2902 2903| 类型 | 说明 | 2904| ---------------------------------- | ---------------------------- | 2905| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 | 2906 2907**示例:** 2908 2909```ts 2910import { socket } from '@kit.NetworkKit'; 2911let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2912``` 2913 2914## TCPSocketServer<sup>10+</sup> 2915 2916TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。 2917 2918### listen<sup>10+</sup> 2919 2920listen(address: NetAddress, callback: AsyncCallback\<void\>): void 2921 2922绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。 2923 2924> **说明:** 2925> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2926 2927**需要权限**:ohos.permission.INTERNET 2928 2929**系统能力**:SystemCapability.Communication.NetStack 2930 2931**参数:** 2932 2933| 参数名 | 类型 | 必填 | 说明 | 2934| -------- | ------------------------- | ---- | --------------------------------------------- | 2935| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2936| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2937 2938**错误码:** 2939 2940以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 2941 2942| 错误码ID | 错误信息 | 2943| -------- | ------------------------------------------- | 2944| 401 | Parameter error. | 2945| 201 | Permission denied. | 2946| 2300002 | System internal error. | 2947| 2303109 | Bad file number. | 2948| 2303111 | Resource temporarily unavailable. Try again.| 2949| 2303198 | Address already in use. | 2950| 2303199 | Cannot assign requested address. | 2951 2952**示例:** 2953 2954```ts 2955import { socket } from '@kit.NetworkKit'; 2956import { BusinessError } from '@kit.BasicServicesKit'; 2957 2958let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2959let listenAddr: socket.NetAddress = { 2960 address: '192.168.xx.xxx', 2961 port: 8080, 2962 family: 1 2963} 2964tcpServer.listen(listenAddr, (err: BusinessError) => { 2965 if (err) { 2966 console.error("listen fail"); 2967 return; 2968 } 2969 console.log("listen success"); 2970}) 2971``` 2972 2973### listen<sup>10+</sup> 2974 2975listen(address: NetAddress): Promise\<void\> 2976 2977绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 2978 2979> **说明:** 2980> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2981 2982**需要权限**:ohos.permission.INTERNET 2983 2984**系统能力**:SystemCapability.Communication.NetStack 2985 2986**参数:** 2987 2988| 参数名 | 类型 | 必填 | 说明 | 2989| ------- | ------------------------- | ---- | --------------------------------------------- | 2990| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2991 2992**返回值:** 2993 2994| 类型 | 说明 | 2995| -------------- | ----------------------------------------------------------- | 2996| Promise\<void\> | Promise对象。无返回结果的Promise对象。| 2997 2998**错误码:** 2999 3000以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3001 3002| 错误码ID | 错误信息 | 3003| -------- | ------------------------------------------- | 3004| 401 | Parameter error. | 3005| 201 | Permission denied. | 3006| 2300002 | System internal error. | 3007| 2303109 | Bad file number. | 3008| 2303111 | Resource temporarily unavailable. Try again.| 3009| 2303198 | Address already in use. | 3010| 2303199 | Cannot assign requested address. | 3011 3012**示例:** 3013 3014```ts 3015import { socket } from '@kit.NetworkKit'; 3016import { BusinessError } from '@kit.BasicServicesKit'; 3017 3018let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3019let listenAddr: socket.NetAddress = { 3020 address: '192.168.xx.xxx', 3021 port: 8080, 3022 family: 1 3023} 3024tcpServer.listen(listenAddr).then(() => { 3025 console.log('listen success'); 3026}).catch((err: BusinessError) => { 3027 console.error('listen fail'); 3028}); 3029``` 3030 3031### getState<sup>10+</sup> 3032 3033getState(callback: AsyncCallback\<SocketStateBase\>): void 3034 3035获取TCPSocketServer状态。使用callback方式作为异步方法。 3036 3037> **说明:** 3038> listen方法调用成功后,才可调用此方法。 3039 3040**需要权限**:ohos.permission.INTERNET 3041 3042**系统能力**:SystemCapability.Communication.NetStack 3043 3044**参数:** 3045 3046| 参数名 | 类型 | 必填 | 说明 | 3047| -------- | -------------------------------------------------- | ---- | ---------- | 3048| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3049 3050**错误码:** 3051 3052以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3053 3054| 错误码ID | 错误信息 | 3055| -------- | ------------------------------- | 3056| 401 | Parameter error. | 3057| 201 | Permission denied. | 3058| 2300002 | System internal error. | 3059| 2303188 | Socket operation on non-socket. | 3060 3061**示例:** 3062 3063```ts 3064import { socket } from '@kit.NetworkKit'; 3065import { BusinessError } from '@kit.BasicServicesKit'; 3066 3067let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3068let listenAddr: socket.NetAddress = { 3069 address: '192.168.xx.xxx', 3070 port: 8080, 3071 family: 1 3072} 3073tcpServer.listen(listenAddr, (err: BusinessError) => { 3074 if (err) { 3075 console.error("listen fail"); 3076 return; 3077 } 3078 console.log("listen success"); 3079}) 3080tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 3081 if (err) { 3082 console.error('getState fail'); 3083 return; 3084 } 3085 console.log('getState success:' + JSON.stringify(data)); 3086}) 3087``` 3088 3089### getState<sup>10+</sup> 3090 3091getState(): Promise\<SocketStateBase\> 3092 3093获取TCPSocketServer状态。使用Promise方式作为异步方法。 3094 3095> **说明:** 3096> listen方法调用成功后,才可调用此方法。 3097 3098**需要权限**:ohos.permission.INTERNET 3099 3100**系统能力**:SystemCapability.Communication.NetStack 3101 3102**返回值:** 3103 3104| 类型 | 说明 | 3105| ------------------------------------------- | ----------------------------------------- | 3106| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 3107 3108**错误码:** 3109 3110以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3111 3112| 错误码ID | 错误信息 | 3113| -------- | ------------------------------- | 3114| 201 | Permission denied. | 3115| 2300002 | System internal error. | 3116| 2303188 | Socket operation on non-socket. | 3117 3118**示例:** 3119 3120```ts 3121import { socket } from '@kit.NetworkKit'; 3122import { BusinessError } from '@kit.BasicServicesKit'; 3123 3124let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3125let listenAddr: socket.NetAddress = { 3126 address: '192.168.xx.xxx', 3127 port: 8080, 3128 family: 1 3129} 3130tcpServer.listen(listenAddr, (err: BusinessError) => { 3131 if (err) { 3132 console.error("listen fail"); 3133 return; 3134 } 3135 console.log("listen success"); 3136}) 3137tcpServer.getState().then((data: socket.SocketStateBase) => { 3138 console.log('getState success' + JSON.stringify(data)); 3139}).catch((err: BusinessError) => { 3140 console.error('getState fail'); 3141}); 3142``` 3143 3144### setExtraOptions<sup>10+</sup> 3145 3146setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 3147 3148设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。 3149 3150> **说明:** 3151> listen方法调用成功后,才可调用此方法。 3152 3153**需要权限**:ohos.permission.INTERNET 3154 3155**系统能力**:SystemCapability.Communication.NetStack 3156 3157**参数:** 3158 3159| 参数名 | 类型 | 必填 | 说明 | 3160| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 3161| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 3162| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3163 3164**错误码:** 3165 3166以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3167 3168| 错误码ID | 错误信息 | 3169| -------- | ------------------------------- | 3170| 401 | Parameter error. | 3171| 201 | Permission denied. | 3172| 2300002 | System internal error. | 3173| 2303188 | Socket operation on non-socket. | 3174 3175**示例:** 3176 3177```ts 3178import { socket } from '@kit.NetworkKit'; 3179import { BusinessError } from '@kit.BasicServicesKit'; 3180 3181let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3182let listenAddr: socket.NetAddress = { 3183 address: '192.168.xx.xxx', 3184 port: 8080, 3185 family: 1 3186} 3187tcpServer.listen(listenAddr, (err: BusinessError) => { 3188 if (err) { 3189 console.error("listen fail"); 3190 return; 3191 } 3192 console.log("listen success"); 3193}) 3194 3195interface SocketLinger { 3196 on: boolean; 3197 linger: number; 3198} 3199 3200let tcpExtraOptions: socket.TCPExtraOptions = { 3201 keepAlive: true, 3202 OOBInline: true, 3203 TCPNoDelay: true, 3204 socketLinger: { on: true, linger: 10 } as SocketLinger, 3205 receiveBufferSize: 8192, 3206 sendBufferSize: 8192, 3207 reuseAddress: true, 3208 socketTimeout: 3000 3209} 3210tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 3211 if (err) { 3212 console.error('setExtraOptions fail'); 3213 return; 3214 } 3215 console.log('setExtraOptions success'); 3216}); 3217``` 3218 3219### setExtraOptions<sup>10+</sup> 3220 3221setExtraOptions(options: TCPExtraOptions): Promise\<void\> 3222 3223设置TCPSocketServer连接的其他属性。使用Promise方式作为异步方法。 3224 3225> **说明:** 3226> listen方法调用成功后,才可调用此方法。 3227 3228**需要权限**:ohos.permission.INTERNET 3229 3230**系统能力**:SystemCapability.Communication.NetStack 3231 3232**参数:** 3233 3234| 参数名 | 类型 | 必填 | 说明 | 3235| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 3236| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 3237 3238**返回值:** 3239 3240| 类型 | 说明 | 3241| -------------- | --------------------------------------------------------- | 3242| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 3243 3244**错误码:** 3245 3246以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3247 3248| 错误码ID | 错误信息 | 3249| -------- | ------------------------------- | 3250| 401 | Parameter error. | 3251| 201 | Permission denied. | 3252| 2300002 | System internal error. | 3253| 2303188 | Socket operation on non-socket. | 3254 3255**示例:** 3256 3257```ts 3258import { socket } from '@kit.NetworkKit'; 3259import { BusinessError } from '@kit.BasicServicesKit'; 3260 3261let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3262let listenAddr: socket.NetAddress = { 3263 address: '192.168.xx.xxx', 3264 port: 8080, 3265 family: 1 3266} 3267 3268interface SocketLinger { 3269 on: boolean; 3270 linger: number; 3271} 3272 3273tcpServer.listen(listenAddr, (err: BusinessError) => { 3274 if (err) { 3275 console.error("listen fail"); 3276 return; 3277 } 3278 console.log("listen success"); 3279}) 3280 3281let tcpExtraOptions: socket.TCPExtraOptions = { 3282 keepAlive: true, 3283 OOBInline: true, 3284 TCPNoDelay: true, 3285 socketLinger: { on: true, linger: 10 } as SocketLinger, 3286 receiveBufferSize: 8192, 3287 sendBufferSize: 8192, 3288 reuseAddress: true, 3289 socketTimeout: 3000 3290} 3291tcpServer.setExtraOptions(tcpExtraOptions).then(() => { 3292 console.log('setExtraOptions success'); 3293}).catch((err: BusinessError) => { 3294 console.error('setExtraOptions fail'); 3295}); 3296``` 3297 3298### getLocalAddress<sup>12+</sup> 3299 3300getLocalAddress(): Promise\<NetAddress\> 3301 3302获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。 3303 3304> **说明:** 3305> listen方法调用成功后,才可调用此方法。 3306 3307**系统能力**:SystemCapability.Communication.NetStack 3308 3309**返回值:** 3310 3311| 类型 | 说明 | 3312| -------------- | --------------------------------------------------- | 3313| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 3314 3315**错误码:** 3316 3317以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 3318 3319| 错误码ID | 错误信息 | 3320| -------- | ------------------------------------------- | 3321| 2300002 | System internal error. | 3322| 2301009 | Bad file descriptor. | 3323| 2303188 | Socket operation on non-socket. | 3324 3325**示例:** 3326 3327```ts 3328import { socket } from '@kit.NetworkKit'; 3329import { BusinessError } from '@kit.BasicServicesKit'; 3330 3331let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3332let listenAddr: socket.NetAddress = { 3333 address: '192.168.xx.xxx', 3334 port: 8080, 3335 family: 1 3336} 3337tcpServer.listen(listenAddr).then(() => { 3338 tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 3339 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 3340 }).catch((err: BusinessError) => { 3341 console.error("FerrorAILED! Error:" + JSON.stringify(err)); 3342 }) 3343}).catch((err: BusinessError) => { 3344 console.error('listen fail'); 3345}); 3346``` 3347 3348### on('connect')<sup>10+</sup> 3349 3350on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void 3351 3352订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3353 3354> **说明:** 3355> listen方法调用成功后,才可调用此方法。 3356 3357**系统能力**:SystemCapability.Communication.NetStack 3358 3359**参数:** 3360 3361| 参数名 | 类型 | 必填 | 说明 | 3362| -------- | ------------------------------- | ---- | ------------------------------------- | 3363| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 3364| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3365 3366**错误码:** 3367 3368以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 3369 3370| 错误码ID | 错误信息 | 3371| -------- | ---------------- | 3372| 401 | Parameter error. | 3373 3374**示例:** 3375 3376```ts 3377import { socket } from '@kit.NetworkKit'; 3378import { BusinessError } from '@kit.BasicServicesKit'; 3379 3380let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3381 3382let listenAddr: socket.NetAddress = { 3383 address: '192.168.xx.xxx', 3384 port: 8080, 3385 family: 1 3386} 3387tcpServer.listen(listenAddr, (err: BusinessError) => { 3388 if (err) { 3389 console.error("listen fail"); 3390 return; 3391 } 3392 console.log("listen success"); 3393 tcpServer.on('connect', (data: socket.TCPSocketConnection) => { 3394 console.log(JSON.stringify(data)) 3395 }); 3396}) 3397``` 3398 3399### off('connect')<sup>10+</sup> 3400 3401off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void 3402 3403取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3404 3405**系统能力**:SystemCapability.Communication.NetStack 3406 3407**参数:** 3408 3409| 参数名 | 类型 | 必填 | 说明 | 3410| -------- | ------------------------------- | ---- | ------------------------------------- | 3411| type | string | 是 | 取消订阅的事件类型。'connect':连接事件。 | 3412| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 3413 3414**错误码:** 3415 3416以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 3417 3418| 错误码ID | 错误信息 | 3419| -------- | ---------------- | 3420| 401 | Parameter error. | 3421 3422**示例:** 3423 3424```ts 3425import { socket } from '@kit.NetworkKit'; 3426import { BusinessError } from '@kit.BasicServicesKit'; 3427 3428let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3429 3430let listenAddr: socket.NetAddress = { 3431 address: '192.168.xx.xxx', 3432 port: 8080, 3433 family: 1 3434} 3435tcpServer.listen(listenAddr, (err: BusinessError) => { 3436 if (err) { 3437 console.error("listen fail"); 3438 return; 3439 } 3440 console.log("listen success"); 3441 let callback = (data: socket.TCPSocketConnection) => { 3442 console.log('on connect message: ' + JSON.stringify(data)); 3443 } 3444 tcpServer.on('connect', callback); 3445 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3446 tcpServer.off('connect', callback); 3447 tcpServer.off('connect'); 3448}) 3449``` 3450 3451### on('error')<sup>10+</sup> 3452 3453on(type: 'error', callback: ErrorCallback): void 3454 3455订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3456 3457> **说明:** 3458> listen方法调用成功后,才可调用此方法。 3459 3460**系统能力**:SystemCapability.Communication.NetStack 3461 3462**参数:** 3463 3464| 参数名 | 类型 | 必填 | 说明 | 3465| -------- | ------------- | ---- | ------------------------------------ | 3466| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3467| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。| 3468 3469**错误码:** 3470 3471以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 3472 3473| 错误码ID | 错误信息 | 3474| -------- | ---------------- | 3475| 401 | Parameter error. | 3476 3477**示例:** 3478 3479```ts 3480import { socket } from '@kit.NetworkKit'; 3481import { BusinessError } from '@kit.BasicServicesKit'; 3482 3483let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3484 3485let listenAddr: socket.NetAddress = { 3486 address: '192.168.xx.xxx', 3487 port: 8080, 3488 family: 1 3489} 3490tcpServer.listen(listenAddr, (err: BusinessError) => { 3491 if (err) { 3492 console.error("listen fail"); 3493 return; 3494 } 3495 console.log("listen success"); 3496 tcpServer.on('error', (err: BusinessError) => { 3497 console.error("on error, err:" + JSON.stringify(err)) 3498 }); 3499}) 3500``` 3501 3502### off('error')<sup>10+</sup> 3503 3504off(type: 'error', callback?: ErrorCallback): void 3505 3506取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3507 3508**系统能力**:SystemCapability.Communication.NetStack 3509 3510**参数:** 3511 3512| 参数名 | 类型 | 必填 | 说明 | 3513| -------- | ------------- | ---- | ------------------------------------ | 3514| type | string | 是 | 取消订阅的事件类型。'error':error事件。 | 3515| callback | ErrorCallback | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 3516 3517**错误码:** 3518 3519以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 3520 3521| 错误码ID | 错误信息 | 3522| -------- | ---------------- | 3523| 401 | Parameter error. | 3524 3525**示例:** 3526 3527```ts 3528import { socket } from '@kit.NetworkKit'; 3529import { BusinessError } from '@kit.BasicServicesKit'; 3530 3531let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3532 3533let listenAddr: socket.NetAddress = { 3534 address: '192.168.xx.xxx', 3535 port: 8080, 3536 family: 1 3537} 3538tcpServer.listen(listenAddr, (err: BusinessError) => { 3539 if (err) { 3540 console.error("listen fail"); 3541 return; 3542 } 3543 console.log("listen success"); 3544 let callback = (err: BusinessError) => { 3545 console.error("on error, err:" + JSON.stringify(err)); 3546 } 3547 tcpServer.on('error', callback); 3548 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3549 tcpServer.off('error', callback); 3550 tcpServer.off('error'); 3551}) 3552``` 3553 3554### close<sup>20+</sup> 3555 3556close(): Promise\<void\> 3557 3558TCPSocketServer停止监听并释放通过[listen](#listen10)方法绑定的端口。若多次调用[listen](#listen10)方法,再调用此方法时会释放TCPSocketServer的所有监听端口。使用Promise异步回调。 3559 3560> **说明:** 3561> 该方法不会关闭已有连接。如需关闭,请调用[TCPSocketConnection](#tcpsocketconnection10)的[close](#close10)方法。 3562 3563**需要权限**:ohos.permission.INTERNET 3564 3565**系统能力**:SystemCapability.Communication.NetStack 3566 3567**返回值:** 3568 3569| 类型 | 说明 | 3570| -------------- | --------------------------------------------------------- | 3571| Promise\<void\> | Promise对象,无返回结果。 | 3572 3573**错误码:** 3574 3575以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3576 3577| 错误码ID | 错误信息 | 3578| -------- | ------------------------------------------- | 3579| 201 | Permission denied. | 3580| 2300002 | System internal error. | 3581 3582**示例:** 3583 3584```ts 3585import { socket } from '@kit.NetworkKit'; 3586import { BusinessError } from '@kit.BasicServicesKit'; 3587 3588let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3589let listenAddr: socket.NetAddress = { 3590 address: '192.168.xx.xxx', 3591 port: 8080, 3592 family: 1 3593} 3594tcpServer.on('connect', (connection: socket.TCPSocketConnection) => { 3595 console.info("connection clientId: " + connection.clientId); 3596 // 逻辑处理 3597 tcpServer.close(); // 停止监听 3598 connection.close(); // 关闭当前连接 3599}); 3600tcpServer.listen(listenAddr).then(() => { 3601 console.info('listen success'); 3602}).catch((err: BusinessError) => { 3603 console.error('listen fail: ' + err.code); 3604}); 3605``` 3606 3607## TCPSocketConnection<sup>10+</sup> 3608 3609TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。 3610 3611> **说明:** 3612> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。 3613 3614**系统能力**:SystemCapability.Communication.NetStack 3615 3616### 属性 3617 3618| 名称 | 类型 | 必填 | 说明 | 3619| -------- | ------ | ---- | ----------------------------------------- | 3620| clientId | number | 是 | 客户端与TCPSocketServer建立连接的id。 | 3621 3622### send<sup>10+</sup> 3623 3624send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 3625 3626通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。 3627 3628> **说明:** 3629> 与客户端建立连接后,才可调用此方法。 3630 3631**需要权限**:ohos.permission.INTERNET 3632 3633**系统能力**:SystemCapability.Communication.NetStack 3634 3635**参数:** 3636 3637| 参数名 | 类型 | 必填 | 说明 | 3638| -------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3639| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3640| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3641 3642**错误码:** 3643 3644以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3645 3646| 错误码ID | 错误信息 | 3647| -------- | ---------------------- | 3648| 401 | Parameter error. | 3649| 201 | Permission denied. | 3650| 2300002 | System internal error. | 3651 3652**示例:** 3653 3654```ts 3655import { socket } from '@kit.NetworkKit'; 3656 3657let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3658 3659tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3660 let tcpSendOption: socket.TCPSendOptions = { 3661 data: 'Hello, client!' 3662 } 3663 client.send(tcpSendOption, () => { 3664 console.log('send success'); 3665 }); 3666}); 3667``` 3668 3669### send<sup>10+</sup> 3670 3671send(options: TCPSendOptions): Promise\<void\> 3672 3673通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。 3674 3675> **说明:** 3676> 与客户端建立连接后,才可调用此方法。 3677 3678**需要权限**:ohos.permission.INTERNET 3679 3680**系统能力**:SystemCapability.Communication.NetStack 3681 3682**参数:** 3683 3684| 参数名 | 类型 | 必填 | 说明 | 3685| ------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3686| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3687 3688**返回值:** 3689 3690| 类型 | 说明 | 3691| -------------- | ----------------------------------------------------------- | 3692| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 3693 3694**错误码:** 3695 3696以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3697 3698| 错误码ID | 错误信息 | 3699| -------- | ---------------------- | 3700| 401 | Parameter error. | 3701| 201 | Permission denied. | 3702| 2300002 | System internal error. | 3703 3704**示例:** 3705 3706```ts 3707import { socket } from '@kit.NetworkKit'; 3708import { BusinessError } from '@kit.BasicServicesKit'; 3709 3710let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3711 3712tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3713 let tcpSendOption: socket.TCPSendOptions = { 3714 data: 'Hello, client!' 3715 } 3716 client.send(tcpSendOption).then(() => { 3717 console.log('send success'); 3718 }).catch((err: BusinessError) => { 3719 console.error('send fail'); 3720 }); 3721}); 3722``` 3723 3724### close<sup>10+</sup> 3725 3726close(callback: AsyncCallback\<void\>): void 3727 3728关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。 3729 3730**需要权限**:ohos.permission.INTERNET 3731 3732**系统能力**:SystemCapability.Communication.NetStack 3733 3734**参数:** 3735 3736| 参数名 | 类型 | 必填 | 说明 | 3737| -------- | --------------------- | ---- | ---------- | 3738| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3739 3740**错误码:** 3741 3742以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3743 3744| 错误码ID | 错误信息 | 3745| -------- | ---------------------- | 3746| 401 | Parameter error. | 3747| 201 | Permission denied. | 3748| 2300002 | System internal error. | 3749 3750**示例:** 3751 3752```ts 3753import { socket } from '@kit.NetworkKit'; 3754import { BusinessError } from '@kit.BasicServicesKit'; 3755 3756let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3757 3758tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3759 client.close((err: BusinessError) => { 3760 if (err) { 3761 console.error('close fail'); 3762 return; 3763 } 3764 console.log('close success'); 3765 }); 3766}); 3767``` 3768 3769### close<sup>10+</sup> 3770 3771close(): Promise\<void\> 3772 3773关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。 3774 3775**需要权限**:ohos.permission.INTERNET 3776 3777**系统能力**:SystemCapability.Communication.NetStack 3778 3779**返回值:** 3780 3781| 类型 | 说明 | 3782| -------------- | ------------------------------------------- | 3783| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 3784 3785**错误码:** 3786 3787以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3788 3789| 错误码ID | 错误信息 | 3790| -------- | ---------------------- | 3791| 201 | Permission denied. | 3792| 2300002 | System internal error. | 3793 3794**示例:** 3795 3796```ts 3797import { socket } from '@kit.NetworkKit'; 3798import { BusinessError } from '@kit.BasicServicesKit'; 3799 3800let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3801tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3802 client.close().then(() => { 3803 console.log('close success'); 3804 }).catch((err: BusinessError) => { 3805 console.error('close fail'); 3806 }); 3807}); 3808``` 3809 3810### getRemoteAddress<sup>10+</sup> 3811 3812getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 3813 3814获取对端Socket地址。使用callback方式作为异步方法。 3815 3816> **说明:** 3817> 与客户端建立连接后,才可调用此方法。 3818 3819**需要权限**:ohos.permission.INTERNET 3820 3821**系统能力**:SystemCapability.Communication.NetStack 3822 3823**参数:** 3824 3825| 参数名 | 类型 | 必填 | 说明 | 3826| -------- | ---------------------------------------- | ---- | ---------- | 3827| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3828 3829**错误码:** 3830 3831以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3832 3833| 错误码ID | 错误信息 | 3834| -------- | ------------------------------- | 3835| 401 | Parameter error. | 3836| 201 | Permission denied. | 3837| 2300002 | System internal error. | 3838| 2303188 | Socket operation on non-socket. | 3839 3840**示例:** 3841 3842```ts 3843import { socket } from '@kit.NetworkKit'; 3844import { BusinessError } from '@kit.BasicServicesKit'; 3845 3846let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3847tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3848 client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 3849 if (err) { 3850 console.error('getRemoteAddress fail'); 3851 return; 3852 } 3853 console.log('getRemoteAddress success:' + JSON.stringify(data)); 3854 }); 3855}); 3856``` 3857 3858### getRemoteAddress<sup>10+</sup> 3859 3860getRemoteAddress(): Promise\<NetAddress\> 3861 3862获取对端Socket地址。使用Promise方式作为异步方法。 3863 3864> **说明:** 3865> 与客户端建立连接后,才可调用此方法。 3866 3867**需要权限**:ohos.permission.INTERNET 3868 3869**系统能力**:SystemCapability.Communication.NetStack 3870 3871**返回值:** 3872 3873| 类型 | 说明 | 3874| --------------------------------- | ------------------------------------------ | 3875| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 3876 3877**错误码:** 3878 3879以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 3880 3881| 错误码ID | 错误信息 | 3882| -------- | ------------------------------- | 3883| 201 | Permission denied. | 3884| 2300002 | System internal error. | 3885| 2303188 | Socket operation on non-socket. | 3886 3887**示例:** 3888 3889```ts 3890import { socket } from '@kit.NetworkKit'; 3891import { BusinessError } from '@kit.BasicServicesKit'; 3892 3893let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3894tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3895 client.getRemoteAddress().then(() => { 3896 console.log('getRemoteAddress success'); 3897 }).catch((err: BusinessError) => { 3898 console.error('getRemoteAddress fail'); 3899 }); 3900}); 3901``` 3902 3903### getLocalAddress<sup>12+</sup> 3904 3905getLocalAddress(): Promise\<NetAddress\> 3906 3907获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 3908 3909**系统能力**:SystemCapability.Communication.NetStack 3910 3911**返回值:** 3912 3913| 类型 | 说明 | 3914| -------------- | --------------------------------------------------- | 3915| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 3916 3917**错误码:** 3918 3919以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 3920 3921| 错误码ID | 错误信息 | 3922| -------- | ------------------------------------------- | 3923| 2300002 | System internal error. | 3924| 2301009 | Bad file descriptor. | 3925| 2303188 | Socket operation on non-socket. | 3926 3927**示例:** 3928 3929```ts 3930import { socket } from '@kit.NetworkKit'; 3931import { BusinessError } from '@kit.BasicServicesKit'; 3932 3933let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3934let listenAddr: socket.NetAddress = { 3935 address: "192.168.xx.xx", 3936 port: 8080, 3937 family: 1 3938} 3939tcpServer.listen(listenAddr, (err: BusinessError) => { 3940 let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 3941 let netAddress: socket.NetAddress = { 3942 address: "192.168.xx.xx", 3943 port: 8080 3944 } 3945 let options: socket.TCPConnectOptions = { 3946 address: netAddress, 3947 timeout: 6000 3948 } 3949 tcp.connect(options, (err: BusinessError) => { 3950 if (err) { 3951 console.error('connect fail'); 3952 return; 3953 } 3954 console.info('connect success!'); 3955 }) 3956 tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3957 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 3958 console.info("Family IP Port: " + JSON.stringify(localAddress)); 3959 }).catch((err: BusinessError) => { 3960 console.error('Error:' + JSON.stringify(err)); 3961 }); 3962 }) 3963}) 3964``` 3965 3966### on('message')<sup>10+</sup> 3967 3968on(type: 'message', callback: Callback<SocketMessageInfo\>): void 3969 3970订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 3971 3972**系统能力**:SystemCapability.Communication.NetStack 3973 3974**参数:** 3975 3976| 参数名 | 类型 | 必填 | 说明 | 3977| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 3978| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 3979| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3980 3981**错误码:** 3982 3983以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 3984 3985| 错误码ID | 错误信息 | 3986| -------- | ---------------- | 3987| 401 | Parameter error. | 3988 3989**示例:** 3990 3991```ts 3992import { socket } from '@kit.NetworkKit'; 3993import { BusinessError } from '@kit.BasicServicesKit'; 3994 3995let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3996 3997tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3998 client.on('message', (value: socket.SocketMessageInfo) => { 3999 let messageView = ''; 4000 for (let i: number = 0; i < value.message.byteLength; i++) { 4001 let uint8Array = new Uint8Array(value.message) 4002 let messages = uint8Array[i] 4003 let message = String.fromCharCode(messages); 4004 messageView += message; 4005 } 4006 console.log('on message message: ' + JSON.stringify(messageView)); 4007 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 4008 }); 4009}); 4010``` 4011 4012### off('message')<sup>10+</sup> 4013 4014off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 4015 4016取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 4017 4018**系统能力**:SystemCapability.Communication.NetStack 4019 4020**参数:** 4021 4022| 参数名 | 类型 | 必填 | 说明 | 4023| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 4024| type | string | 是 | 取消订阅的事件类型。'message':接收消息事件。 | 4025| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 4026 4027**错误码:** 4028 4029以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4030 4031| 错误码ID | 错误信息 | 4032| -------- | ---------------- | 4033| 401 | Parameter error. | 4034 4035**示例:** 4036 4037```ts 4038import { socket } from '@kit.NetworkKit'; 4039import { BusinessError } from '@kit.BasicServicesKit'; 4040 4041let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 4042let callback = (value: socket.SocketMessageInfo) => { 4043 let messageView = ''; 4044 for (let i: number = 0; i < value.message.byteLength; i++) { 4045 let uint8Array = new Uint8Array(value.message) 4046 let messages = uint8Array[i] 4047 let message = String.fromCharCode(messages); 4048 messageView += message; 4049 } 4050 console.log('on message message: ' + JSON.stringify(messageView)); 4051 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 4052} 4053tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 4054 client.on('message', callback); 4055 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4056 client.off('message', callback); 4057 client.off('message'); 4058}); 4059``` 4060 4061### on('close')<sup>10+</sup> 4062 4063on(type: 'close', callback: Callback\<void\>): void 4064 4065订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 4066 4067**系统能力**:SystemCapability.Communication.NetStack 4068 4069**参数:** 4070 4071| 参数名 | 类型 | 必填 | 说明 | 4072| -------- | ---------------- | ---- | ----------------------------------- | 4073| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 4074| callback | Callback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 4075 4076**错误码:** 4077 4078以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4079 4080| 错误码ID | 错误信息 | 4081| -------- | ---------------- | 4082| 401 | Parameter error. | 4083 4084**示例:** 4085 4086```ts 4087import { socket } from '@kit.NetworkKit'; 4088import { BusinessError } from '@kit.BasicServicesKit'; 4089 4090let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 4091tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 4092 client.on('close', () => { 4093 console.log("on close success") 4094 }); 4095}); 4096``` 4097 4098### off('close')<sup>10+</sup> 4099 4100off(type: 'close', callback?: Callback\<void\>): void 4101 4102取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 4103 4104**系统能力**:SystemCapability.Communication.NetStack 4105 4106**参数:** 4107 4108| 参数名 | 类型 | 必填 | 说明 | 4109| -------- | ---------------- | ---- | ----------------------------------- | 4110| type | string | 是 | 取消订阅的事件类型。'close':关闭事件。 | 4111| callback | Callback\<void\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 4112 4113**错误码:** 4114 4115以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4116 4117| 错误码ID | 错误信息 | 4118| -------- | ---------------- | 4119| 401 | Parameter error. | 4120 4121**示例:** 4122 4123```ts 4124import { socket } from '@kit.NetworkKit'; 4125 4126let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 4127let callback = () => { 4128 console.log("on close success"); 4129} 4130tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 4131 client.on('close', callback); 4132 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4133 client.off('close', callback); 4134 client.off('close'); 4135}); 4136``` 4137 4138### on('error')<sup>10+</sup> 4139 4140on(type: 'error', callback: ErrorCallback): void 4141 4142订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 4143 4144**系统能力**:SystemCapability.Communication.NetStack 4145 4146**参数:** 4147 4148| 参数名 | 类型 | 必填 | 说明 | 4149| -------- | ------------- | ---- | ------------------------------------ | 4150| type | string | 是 | 订阅的事件类型。'error':error事件。 | 4151| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 4152 4153**错误码:** 4154 4155以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4156 4157| 错误码ID | 错误信息 | 4158| -------- | ---------------- | 4159| 401 | Parameter error. | 4160 4161**示例:** 4162 4163```ts 4164import { socket } from '@kit.NetworkKit'; 4165import { BusinessError } from '@kit.BasicServicesKit'; 4166 4167let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 4168tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 4169 client.on('error', (err: BusinessError) => { 4170 console.error("on error, err:" + JSON.stringify(err)) 4171 }); 4172}); 4173``` 4174 4175### off('error')<sup>10+</sup> 4176 4177off(type: 'error', callback?: ErrorCallback): void 4178 4179取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 4180 4181**系统能力**:SystemCapability.Communication.NetStack 4182 4183**参数:** 4184 4185| 参数名 | 类型 | 必填 | 说明 | 4186| -------- | ------------- | ---- | ------------------------------------ | 4187| type | string | 是 | 取消订阅的事件类型。'error':error事件。 | 4188| callback | ErrorCallback | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 4189 4190**错误码:** 4191 4192以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4193 4194| 错误码ID | 错误信息 | 4195| -------- | ---------------- | 4196| 401 | Parameter error. | 4197 4198**示例:** 4199 4200```ts 4201import { socket } from '@kit.NetworkKit'; 4202import { BusinessError } from '@kit.BasicServicesKit'; 4203 4204let callback = (err: BusinessError) => { 4205 console.error("on error, err:" + JSON.stringify(err)); 4206} 4207let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 4208tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 4209 client.on('error', callback); 4210 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4211 client.off('error', callback); 4212 client.off('error'); 4213}); 4214``` 4215 4216## TCP 错误码说明 4217 4218TCP 其余错误码映射形式为:2301000 + Linux内核错误码。 4219 4220错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)。 4221 4222## socket.constructLocalSocketInstance<sup>11+</sup> 4223 4224constructLocalSocketInstance(): LocalSocket 4225 4226创建一个LocalSocket对象。 4227 4228**系统能力**:SystemCapability.Communication.NetStack 4229 4230**返回值:** 4231 4232| 类型 | 说明 | 4233| :--------------------------------- | :---------------------- | 4234| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 | 4235 4236**示例:** 4237 4238```ts 4239import { socket } from '@kit.NetworkKit'; 4240let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4241``` 4242 4243## LocalSocket<sup>11+</sup> 4244 4245LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。 4246 4247### bind<sup>11+</sup> 4248 4249bind(address: LocalAddress): Promise\<void\>; 4250 4251绑定本地套接字文件的路径。使用promise方法作为异步方法。 4252 4253> **说明:** 4254> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。 4255> bind方法在本地套接字通信中非必须。 4256 4257**系统能力**:SystemCapability.Communication.NetStack 4258 4259**参数:** 4260 4261| 参数名 | 类型 | 必填 | 说明 | 4262| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 4263| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息,参考[LocalAddress](#localaddress11)。 | 4264 4265**返回值:** 4266 4267| 类型 | 说明 | 4268| :-------------- | :---------------------------------------- | 4269| Promise\<void\> | Promise对象。无返回结果的Promise对象。| 4270 4271**错误码:** 4272 4273以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 4274 4275| 错误码ID | 错误信息 | 4276| ------- | -------------------------- | 4277| 401 | Parameter error. | 4278| 2301013 | Insufficient permissions. | 4279| 2301022 | Invalid argument. | 4280| 2301098 | Address already in use. | 4281 4282**示例:** 4283 4284>**说明:** 4285> 4286>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4287 4288<!--code_no_check--> 4289```ts 4290import { socket } from '@kit.NetworkKit'; 4291import { common } from '@kit.AbilityKit'; 4292 4293let client: socket.LocalSocket = socket.constructLocalSocketInstance() 4294let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4295let sandboxPath: string = context.filesDir + '/testSocket'; 4296let address : socket.LocalAddress = { 4297 address: sandboxPath 4298} 4299client.bind(address).then(() => { 4300 console.log('bind success') 4301}).catch((err: Object) => { 4302 console.error('failed to bind: ' + JSON.stringify(err)) 4303}) 4304``` 4305 4306### connect<sup>11+</sup> 4307 4308connect(options: LocalConnectOptions): Promise\<void\> 4309 4310连接到指定的套接字文件。使用promise方法作为异步方法。 4311 4312> **说明:** 4313> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。 4314 4315**系统能力**:SystemCapability.Communication.NetStack 4316 4317**参数:** 4318 4319| 参数名 | 类型 | 必填 | 说明 | 4320| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 4321| options | [LocalConnectOptions](#localconnectoptions11) | 是 | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 | 4322 4323**返回值:** 4324 4325| 类型 | 说明 | 4326| :-------------- | :---------------------------------------- | 4327| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 | 4328 4329**错误码:** 4330 4331以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 4332 4333| 错误码ID | 错误信息 | 4334| ------- | ----------------------- | 4335| 401 | Parameter error. | 4336| 2301013 | Insufficient permissions. | 4337| 2301022 | Invalid argument. | 4338| 2301111 | Connection refused. | 4339| 2301099 | Cannot assign requested address. | 4340 4341**示例:** 4342 4343>**说明:** 4344> 4345>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4346 4347<!--code_no_check--> 4348```ts 4349import { socket } from '@kit.NetworkKit'; 4350import { common } from '@kit.AbilityKit'; 4351 4352let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4353let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4354let sandboxPath: string = context.filesDir + '/testSocket'; 4355let localAddress : socket.LocalAddress = { 4356 address: sandboxPath 4357} 4358let connectOpt: socket.LocalConnectOptions = { 4359 address: localAddress, 4360 timeout: 6000 4361} 4362client.connect(connectOpt).then(() => { 4363 console.log('connect success') 4364}).catch((err: Object) => { 4365 console.error('connect fail: ' + JSON.stringify(err)); 4366}); 4367``` 4368 4369### send<sup>11+</sup> 4370 4371send(options: LocalSendOptions): Promise\<void\> 4372 4373通过LocalSocket连接发送数据。使用Promise方式作为异步方法。 4374 4375> **说明:** 4376> connect方法调用成功后,才可调用此方法。 4377 4378**系统能力**:SystemCapability.Communication.NetStack 4379 4380**参数:** 4381 4382| 参数名 | 类型 | 必填 | 说明 | 4383| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 4384| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 | 4385 4386**返回值:** 4387 4388| 类型 | 说明 | 4389| :-------------- | :------------------------------------------ | 4390| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 4391 4392**错误码:** 4393 4394以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 4395 4396| 错误码ID | 错误信息 | 4397| ------- | ----------------------- | 4398| 401 | Parameter error. | 4399| 2301011 | Operation would block. | 4400 4401**示例:** 4402 4403>**说明:** 4404> 4405>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4406 4407<!--code_no_check--> 4408```ts 4409import { socket } from '@kit.NetworkKit'; 4410import { common } from '@kit.AbilityKit'; 4411 4412let client: socket.LocalSocket = socket.constructLocalSocketInstance() 4413let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4414let sandboxPath: string = context.filesDir + '/testSocket'; 4415let localAddress : socket.LocalAddress = { 4416 address: sandboxPath 4417} 4418let connectOpt: socket.LocalConnectOptions = { 4419 address: localAddress, 4420 timeout: 6000 4421} 4422client.connect(connectOpt).then(() => { 4423 console.log('connect success') 4424}).catch((err: Object) => { 4425 console.error('connect failed: ' + JSON.stringify(err)) 4426}) 4427let sendOpt: socket.LocalSendOptions = { 4428 data: 'Hello world!' 4429} 4430client.send(sendOpt).then(() => { 4431 console.log('send success') 4432}).catch((err: Object) => { 4433 console.error('send fail: ' + JSON.stringify(err)) 4434}) 4435``` 4436 4437### close<sup>11+</sup> 4438 4439close(): Promise\<void\> 4440 4441关闭LocalSocket连接。使用Promise方式作为异步方法。 4442 4443**系统能力**:SystemCapability.Communication.NetStack 4444 4445**返回值:** 4446 4447| 类型 | 说明 | 4448| :-------------- | :----------------------------------------- | 4449| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 4450 4451**错误码:** 4452 4453以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 4454 4455| 错误码ID | 错误信息 | 4456| ------- | ----------------------- | 4457| 2301009 | Bad file descriptor. | 4458 4459**示例:** 4460 4461```ts 4462import { socket } from '@kit.NetworkKit'; 4463 4464let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4465 4466client.close().then(() => { 4467 console.log('close success'); 4468}).catch((err: Object) => { 4469 console.error('close fail: ' + JSON.stringify(err)); 4470}); 4471``` 4472 4473### getState<sup>11+</sup> 4474 4475getState(): Promise\<SocketStateBase\> 4476 4477获取LocalSocket状态。使用Promise方式作为异步方法。 4478 4479> **说明:** 4480> bind或connect方法调用成功后,才可调用此方法。 4481 4482**系统能力**:SystemCapability.Communication.NetStack 4483 4484**返回值:** 4485 4486| 类型 | 说明 | 4487| :------------------------------------------- | :--------------------------------------- | 4488| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 | 4489 4490**示例:** 4491 4492>**说明:** 4493> 4494>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4495 4496<!--code_no_check--> 4497```ts 4498import { socket } from '@kit.NetworkKit'; 4499import { common } from '@kit.AbilityKit'; 4500 4501let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4502let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4503let sandboxPath: string = context.filesDir + '/testSocket'; 4504let localAddress : socket.LocalAddress = { 4505 address: sandboxPath 4506} 4507let connectOpt: socket.LocalConnectOptions = { 4508 address: localAddress, 4509 timeout: 6000 4510} 4511client.connect(connectOpt).then(() => { 4512 console.log('connect success'); 4513 client.getState().then(() => { 4514 console.log('getState success'); 4515 }).catch((err: Object) => { 4516 console.error('getState fail: ' + JSON.stringify(err)) 4517 }); 4518}).catch((err: Object) => { 4519 console.error('connect fail: ' + JSON.stringify(err)); 4520}); 4521``` 4522 4523### getSocketFd<sup>11+</sup> 4524 4525getSocketFd(): Promise\<number\> 4526 4527获取LocalSocket的文件描述符。使用Promise方式作为异步方法。 4528 4529> **说明:** 4530> bind或connect方法调用成功后,才可调用此方法。 4531> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。 4532 4533**系统能力**:SystemCapability.Communication.NetStack 4534 4535**返回值:** 4536 4537| 类型 | 说明 | 4538| :---------------- | :-------------------------------- | 4539| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 4540 4541**示例:** 4542 4543>**说明:** 4544> 4545>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4546 4547<!--code_no_check--> 4548```ts 4549import { socket } from '@kit.NetworkKit'; 4550import { common } from '@kit.AbilityKit'; 4551 4552let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4553let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4554let sandboxPath: string = context.filesDir + '/testSocket'; 4555let localAddress : socket.LocalAddress = { 4556 address: sandboxPath 4557} 4558let connectOpt: socket.LocalConnectOptions = { 4559 address: localAddress, 4560 timeout: 6000 4561} 4562client.connect(connectOpt).then(() => { 4563 console.log('connect ok') 4564}).catch((err: Object) => { 4565 console.error('connect fail: ' + JSON.stringify(err)) 4566}) 4567client.getSocketFd().then((data: number) => { 4568 console.info("fd: " + data); 4569}).catch((err: Object) => { 4570 console.error("getSocketFd faile: " + JSON.stringify(err)); 4571}) 4572``` 4573 4574### setExtraOptions<sup>11+</sup> 4575 4576setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 4577 4578设置LocalSocket的套接字属性。使用Promise方式作为异步方法。 4579 4580> **说明:** 4581> bind或connect方法调用成功后,才可调用此方法。 4582 4583**系统能力**:SystemCapability.Communication.NetStack 4584 4585**参数:** 4586 4587| 参数名 | 类型 | 必填 | 说明 | 4588| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 4589| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 | 4590 4591**返回值:** 4592 4593| 类型 | 说明 | 4594| :-------------- | :-------------------------------------------- | 4595| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 | 4596 4597**错误码:** 4598 4599以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 4600 4601| 错误码ID | 错误信息 | 4602| ------- | ----------------------- | 4603| 401 | Parameter error. | 4604| 2301009 | Bad file descriptor. | 4605 4606**示例:** 4607 4608>**说明:** 4609> 4610>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4611 4612<!--code_no_check--> 4613```ts 4614import { socket } from '@kit.NetworkKit'; 4615import { common } from '@kit.AbilityKit'; 4616 4617let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4618let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4619let sandboxPath: string = context.filesDir + '/testSocket'; 4620let localAddress : socket.LocalAddress = { 4621 address: sandboxPath 4622} 4623let connectOpt: socket.LocalConnectOptions = { 4624 address: localAddress, 4625 timeout: 6000 4626} 4627client.connect(connectOpt).then(() => { 4628 console.log('connect success'); 4629 let options: socket.ExtraOptionsBase = { 4630 receiveBufferSize: 8192, 4631 sendBufferSize: 8192, 4632 socketTimeout: 3000 4633 } 4634 client.setExtraOptions(options).then(() => { 4635 console.log('setExtraOptions success'); 4636 }).catch((err: Object) => { 4637 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4638 }); 4639}).catch((err: Object) => { 4640 console.error('connect fail: ' + JSON.stringify(err)); 4641}); 4642``` 4643 4644### getExtraOptions<sup>11+</sup> 4645 4646getExtraOptions(): Promise\<ExtraOptionsBase\>; 4647 4648获取LocalSocket的套接字属性。使用Promise方式作为异步方法。 4649 4650> **说明:** 4651> bind或connect方法调用成功后,才可调用此方法。 4652 4653**系统能力**:SystemCapability.Communication.NetStack 4654 4655**返回值:** 4656 4657| 类型 | 说明 | 4658| :-------------------------- | :---------------------------------------- | 4659| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 | 4660 4661**错误码:** 4662 4663以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 4664 4665| 错误码ID | 错误信息 | 4666| ------- | ----------------------- | 4667| 2301009 | Bad file descriptor. | 4668 4669**示例:** 4670 4671>**说明:** 4672> 4673>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4674 4675<!--code_no_check--> 4676```ts 4677import { socket } from '@kit.NetworkKit'; 4678import { common } from '@kit.AbilityKit'; 4679 4680let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4681let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4682let sandboxPath: string = context.filesDir + '/testSocket'; 4683let localAddress : socket.LocalAddress = { 4684 address: sandboxPath 4685} 4686let connectOpt: socket.LocalConnectOptions = { 4687 address: localAddress, 4688 timeout: 6000 4689} 4690client.connect(connectOpt).then(() => { 4691 console.log('connect success'); 4692 client.getExtraOptions().then((options : socket.ExtraOptionsBase) => { 4693 console.log('options: ' + JSON.stringify(options)); 4694 }).catch((err: Object) => { 4695 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4696 }); 4697}).catch((err: Object) => { 4698 console.error('connect fail: ' + JSON.stringify(err)); 4699}); 4700``` 4701 4702### getLocalAddress<sup>12+</sup> 4703 4704getLocalAddress(): Promise\<string\> 4705 4706获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。 4707 4708> **说明:** 4709> bind方法调用成功后,才可调用此方法。 4710 4711**系统能力**:SystemCapability.Communication.NetStack 4712 4713**返回值:** 4714 4715| 类型 | 说明 | 4716| -------------- | --------------------------------------------------- | 4717| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 4718 4719**错误码:** 4720 4721以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 4722 4723| 错误码ID | 错误信息 | 4724| -------- | ------------------------------------------- | 4725| 2300002 | System internal error. | 4726| 2301009 | Bad file descriptor. | 4727| 2303188 | Socket operation on non-socket. | 4728 4729**示例:** 4730 4731>**说明:** 4732> 4733>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 4734 4735<!--code_no_check--> 4736```ts 4737import { common } from '@kit.AbilityKit'; 4738import { socket } from '@kit.NetworkKit'; 4739import { BusinessError } from '@kit.BasicServicesKit'; 4740 4741let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4742let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4743let sandboxPath: string = context.filesDir + '/testSocket'; 4744let address : socket.LocalAddress = { 4745 address: sandboxPath 4746} 4747client.bind(address).then(() => { 4748 console.error('bind success'); 4749 client.getLocalAddress().then((localPath: string) => { 4750 console.info("SUCCESS " + JSON.stringify(localPath)); 4751 }).catch((err: BusinessError) => { 4752 console.error("FAIL " + JSON.stringify(err)); 4753 }) 4754}).catch((err: Object) => { 4755 console.error('failed to bind: ' + JSON.stringify(err)); 4756}) 4757``` 4758 4759### on('message')<sup>11+</sup> 4760 4761on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void 4762 4763订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4764 4765**系统能力**:SystemCapability.Communication.NetStack 4766 4767**参数:** 4768 4769| 参数名 | 类型 | 必填 | 说明 | 4770| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 4771| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 4772| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收的消息。| 4773 4774**错误码:** 4775 4776以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4777 4778| 错误码ID | 错误信息 | 4779| ------- | ----------------------- | 4780| 401 | Parameter error. | 4781 4782**示例:** 4783 4784```ts 4785import { socket } from '@kit.NetworkKit'; 4786 4787let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4788client.on('message', (value: socket.LocalSocketMessageInfo) => { 4789 const uintArray = new Uint8Array(value.message) 4790 let messageView = ''; 4791 for (let i = 0; i < uintArray.length; i++) { 4792 messageView += String.fromCharCode(uintArray[i]); 4793 } 4794 console.log('total: ' + JSON.stringify(value)); 4795 console.log('message infomation: ' + messageView); 4796}); 4797``` 4798 4799### off('message')<sup>11+</sup> 4800 4801off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 4802 4803取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4804 4805**系统能力**:SystemCapability.Communication.NetStack 4806 4807**参数:** 4808 4809| 参数名 | 类型 | 必填 | 说明 | 4810| -------- | ------------------------------------------------ | ---- | ----------------------------------- | 4811| type | string | 是 | 取消订阅的事件类型。'message':接收消息事件。 | 4812| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。| 4813 4814**错误码:** 4815 4816以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4817 4818| 错误码ID | 错误信息 | 4819| ------- | ----------------------- | 4820| 401 | Parameter error. | 4821 4822**示例:** 4823 4824```ts 4825import { socket } from '@kit.NetworkKit'; 4826 4827let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4828let messageView = ''; 4829let callback = (value: socket.LocalSocketMessageInfo) => { 4830 const uintArray = new Uint8Array(value.message) 4831 let messageView = ''; 4832 for (let i = 0; i < uintArray.length; i++) { 4833 messageView += String.fromCharCode(uintArray[i]); 4834 } 4835 console.log('total: ' + JSON.stringify(value)); 4836 console.log('message infomation: ' + messageView); 4837} 4838client.on('message', callback); 4839client.off('message'); 4840``` 4841 4842### on('connect')<sup>11+</sup> 4843 4844on(type: 'connect', callback: Callback\<void\>): void 4845 4846订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4847 4848**系统能力**:SystemCapability.Communication.NetStack 4849 4850**参数:** 4851 4852| 参数名 | 类型 | 必填 | 说明 | 4853| -------- | ---------------- | ---- | --------------------------------------------------------- | 4854| type | string | 是 | 订阅的事件类型。 | 4855| callback | Callback\<void\> | 是 | 以callback的形式异步返回与服务端连接的结果。 | 4856 4857**错误码:** 4858 4859以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4860 4861| 错误码ID | 错误信息 | 4862| ------- | ----------------------- | 4863| 401 | Parameter error. | 4864 4865**示例:** 4866 4867```ts 4868import { socket } from '@kit.NetworkKit'; 4869 4870let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4871client.on('connect', () => { 4872 console.log("on connect success") 4873}); 4874``` 4875 4876### off('connect')<sup>11+</sup> 4877 4878off(type: 'connect', callback?: Callback\<void\>): void 4879 4880取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4881 4882**系统能力**:SystemCapability.Communication.NetStack 4883 4884**参数:** 4885 4886| 参数名 | 类型 | 必填 | 说明 | 4887| -------- | ---------------- | ---- | --------------------------------------------------------- | 4888| type | string | 是 | 取消订阅的事件类型。'connect':LocalSocket的connect事件。 | 4889| callback | Callback\<void\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 4890 4891**错误码:** 4892 4893以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4894 4895| 错误码ID | 错误信息 | 4896| ------- | ----------------------- | 4897| 401 | Parameter error. | 4898 4899**示例:** 4900 4901```ts 4902import { socket } from '@kit.NetworkKit'; 4903 4904let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4905let callback = () => { 4906 console.log("on connect success"); 4907} 4908client.on('connect', callback); 4909// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4910client.off('connect', callback); 4911client.off('connect'); 4912``` 4913 4914### on('close')<sup>11+</sup> 4915 4916on(type: 'close', callback: Callback\<void\>): void 4917 4918订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4919 4920**系统能力**:SystemCapability.Communication.NetStack 4921 4922**参数:** 4923 4924| 参数名 | 类型 | 必填 | 说明 | 4925| -------- | ---------------- | ---- | ------------------------ | 4926| type | string | 是 | 订阅LocalSocket的关闭事件。 | 4927| callback | Callback\<void\> | 是 | 以callback的形式异步返回关闭localsocket的结果。| 4928 4929**错误码:** 4930 4931以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4932 4933| 错误码ID | 错误信息 | 4934| ------- | ----------------------- | 4935| 401 | Parameter error. | 4936 4937**示例:** 4938 4939```ts 4940import { socket } from '@kit.NetworkKit'; 4941 4942let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4943let callback = () => { 4944 console.log("on close success"); 4945} 4946client.on('close', callback); 4947``` 4948 4949### off('close')<sup>11+</sup> 4950 4951off(type: 'close', callback?: Callback\<void\>): void 4952 4953订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4954 4955**系统能力**:SystemCapability.Communication.NetStack 4956 4957**参数:** 4958 4959| 参数名 | 类型 | 必填 | 说明 | 4960| -------- | ---------------- | ---- | ------------------------ | 4961| type | string | 是 | 取消订阅的事件类型。'close':LocalSocket的关闭事件。 | 4962| callback | Callback\<void\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。| 4963 4964**错误码:** 4965 4966以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 4967 4968| 错误码ID | 错误信息 | 4969| ------- | ----------------------- | 4970| 401 | Parameter error. | 4971 4972**示例:** 4973 4974```ts 4975import { socket } from '@kit.NetworkKit'; 4976 4977let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4978let callback = () => { 4979 console.log("on close success"); 4980} 4981client.on('close', callback); 4982// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4983client.off('close', callback); 4984client.off('close'); 4985``` 4986 4987### on('error')<sup>11+</sup> 4988 4989on(type: 'error', callback: ErrorCallback): void 4990 4991订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 4992 4993**系统能力**:SystemCapability.Communication.NetStack 4994 4995**参数:** 4996 4997| 参数名 | 类型 | 必填 | 说明 | 4998| -------- | ------------- | ---- | ---------------------------- | 4999| type | string | 是 | 订阅LocalSocket的error事件。 | 5000| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 5001 5002**错误码:** 5003 5004以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5005 5006| 错误码ID | 错误信息 | 5007| ------- | ----------------------- | 5008| 401 | Parameter error. | 5009 5010**示例:** 5011 5012```ts 5013import { socket } from '@kit.NetworkKit'; 5014 5015let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 5016client.on('error', (err: Object) => { 5017 console.error("on error, err:" + JSON.stringify(err)) 5018}); 5019``` 5020 5021### off('error')<sup>11+</sup> 5022 5023off(type: 'error', callback?: ErrorCallback): void 5024 5025取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 5026 5027**系统能力**:SystemCapability.Communication.NetStack 5028 5029**参数:** 5030 5031| 参数名 | 类型 | 必填 | 说明 | 5032| -------- | ------------- | ---- | ----------------------------- | 5033| type | string | 是 | 取消订阅的事件类型。'error':LocalSocket的error事件。 | 5034| callback | ErrorCallback | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。| 5035 5036**错误码:** 5037 5038以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5039 5040| 错误码ID | 错误信息 | 5041| ------- | ----------------------- | 5042| 401 | Parameter error. | 5043 5044**示例:** 5045 5046```ts 5047import { socket } from '@kit.NetworkKit'; 5048 5049let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 5050let callback = (err: Object) => { 5051 console.error("on error, err:" + JSON.stringify(err)); 5052} 5053client.on('error', callback); 5054// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5055client.off('error', callback); 5056client.off('error'); 5057``` 5058 5059## LocalSocketMessageInfo<sup>11+</sup> 5060 5061LocalSocket客户端与服务端通信时接收的数据。 5062 5063**系统能力**:SystemCapability.Communication.NetStack 5064 5065| 名称 | 类型 | 必填 | 说明 | 5066| ------- | --------------- | --- | ------------------ | 5067| message | ArrayBuffer | 是 | 收到的消息数据。 | 5068| address | string | 是 | 使用的本地套接字路径。| 5069| size | number | 是 | 数据长度。 | 5070 5071## LocalAddress<sup>11+</sup> 5072 5073LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。 5074 5075**系统能力**:SystemCapability.Communication.NetStack 5076 5077| 名称 | 类型 | 必填 | 说明 | 5078| ------- | ---------- | --- | ------------------ | 5079| address | string | 是 | 本地套接字路径。 | 5080 5081## LocalConnectOptions<sup>11+</sup> 5082 5083LocalSocket客户端在连接服务端时传入的参数信息。 5084 5085**系统能力**:SystemCapability.Communication.NetStack 5086 5087| 名称 | 类型 | 必填 | 说明 | 5088| ------- | ---------- | --- | ------------------------------ | 5089| address | [LocalAddress](#localaddress11) | 是 | 指定的本地套接字路径。 | 5090| timeout | number | 否 | 连接服务端的超时时间,单位为毫秒。默认值为0。需要应用手动设置一下,建议设置为5000。 | 5091 5092## LocalSendOptions<sup>11+</sup> 5093 5094LocalSocket发送请求的参数。 5095 5096**系统能力**:SystemCapability.Communication.NetStack 5097 5098| 名称 | 类型 | 必填 | 说明 | 5099| ------- | ---------- | --- | ------------------- | 5100| data | string \| ArrayBuffer | 是 | 需要发送的数据。 | 5101| encoding | string | 否 | 字符编码。 | 5102 5103## ExtraOptionsBase<sup>7+</sup> 5104 5105Socket套接字的基础属性。 5106 5107**系统能力**:SystemCapability.Communication.NetStack 5108 5109| 名称 | 类型 | 必填 | 说明 | 5110| ----------------- | ------- | ---- | ----------------------------- | 5111| receiveBufferSize | number | 否 | 接收缓冲区大小(单位:Byte),取值范围0~262144,不设置或设置的值超过取值范围则会默认为8192。 | 5112| sendBufferSize | number | 否 | 发送缓冲区大小(单位:Byte),取值范围0~262144,不设置或设置的值超过取值范围则会默认为8192。 | 5113| reuseAddress | boolean | 否 | 是否重用地址。true:重用地址;false:不重用地址。 | 5114| socketTimeout | number | 否 | 套接字超时时间,单位毫秒(ms)。 | 5115 5116## socket.constructLocalSocketServerInstance<sup>11+</sup> 5117 5118constructLocalSocketServerInstance(): LocalSocketServer 5119 5120创建一个LocalSocketServer对象。 5121 5122**系统能力**:SystemCapability.Communication.NetStack 5123 5124**返回值:** 5125 5126| 类型 | 说明 | 5127| :---------------------------------- | :---------------------------- | 5128| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 | 5129 5130**示例:** 5131 5132```ts 5133import { socket } from '@kit.NetworkKit'; 5134let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5135``` 5136 5137## LocalSocketServer<sup>11+</sup> 5138 5139LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。 5140 5141### listen<sup>11+</sup> 5142 5143listen(address: LocalAddress): Promise\<void\> 5144 5145绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 5146 5147> **说明:** 5148> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。 5149 5150**系统能力**:SystemCapability.Communication.NetStack 5151 5152**参数:** 5153 5154| 参数名 | 类型 | 必填 | 说明 | 5155| ------- | ------------------------- | ---- | --------------------------------------------- | 5156| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息。 | 5157 5158**返回值:** 5159 5160| 类型 | 说明 | 5161| :-------------- | :---------------------------------------------------- | 5162| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。| 5163 5164**错误码:** 5165 5166以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 5167 5168| 错误码ID | 错误信息 | 5169| -------- | --------------------------- | 5170| 401 | Parameter error. | 5171| 2303109 | Bad file number. | 5172| 2301013 | Insufficient permissions. | 5173| 2301022 | Invalid argument. | 5174| 2301098 | Address already in use. | 5175 5176**示例:** 5177 5178>**说明:** 5179> 5180>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5181 5182<!--code_no_check--> 5183```ts 5184import { socket } from '@kit.NetworkKit'; 5185import { common } from '@kit.AbilityKit'; 5186 5187let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5188let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5189let sandboxPath: string = context.filesDir + '/testSocket'; 5190let addr: socket.LocalAddress = { 5191 address: sandboxPath 5192} 5193server.listen(addr).then(() => { 5194 console.log('listen success'); 5195}).catch((err: Object) => { 5196 console.error('listen fail: ' + JSON.stringify(err)); 5197}); 5198``` 5199 5200### getState<sup>11+</sup> 5201 5202getState(): Promise\<SocketStateBase\> 5203 5204获取LocalSocketServer状态。使用Promise方式作为异步方法。 5205 5206> **说明:** 5207> listen方法调用成功后,才可调用此方法。 5208 5209**系统能力**:SystemCapability.Communication.NetStack 5210 5211**返回值:** 5212 5213| 类型 | 说明 | 5214| :------------------------------------------- | :--------------------------------------------- | 5215| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 | 5216 5217**示例:** 5218 5219>**说明:** 5220> 5221>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5222 5223<!--code_no_check--> 5224```ts 5225import { socket } from '@kit.NetworkKit'; 5226import { common } from '@kit.AbilityKit'; 5227 5228 5229let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5230let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5231let sandboxPath: string = context.filesDir + '/testSocket'; 5232let listenAddr: socket.LocalAddress = { 5233 address: sandboxPath 5234} 5235server.listen(listenAddr).then(() => { 5236 console.log("listen success"); 5237}).catch((err: Object) => { 5238 console.error("listen fail: " + JSON.stringify(err)); 5239}) 5240server.getState().then((data: socket.SocketStateBase) => { 5241 console.log('getState success: ' + JSON.stringify(data)); 5242}).catch((err: Object) => { 5243 console.error('getState fail: ' + JSON.stringify(err)); 5244}); 5245``` 5246 5247### setExtraOptions<sup>11+</sup> 5248 5249setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 5250 5251设置LocalSocketServer连接的套接字属性。使用Promise方式作为异步方法。 5252 5253> **说明:** 5254> listen方法调用成功后,才可调用此方法。 5255 5256**系统能力**:SystemCapability.Communication.NetStack 5257 5258**参数:** 5259 5260| 参数名 | 类型 | 必填 | 说明 | 5261| ------- | --------------------------------------- | ---- | ------------------------------ | 5262| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocketServer连接的其他属性。 | 5263 5264**返回值:** 5265 5266| 类型 | 说明 | 5267| :-------------- | :---------------------------------------------- | 5268| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 5269 5270**错误码:** 5271 5272以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 5273 5274| 错误码ID | 错误信息 | 5275| -------- | ------------------------------- | 5276| 401 | Parameter error. | 5277| 2301009 | Bad file descriptor. | 5278 5279**示例:** 5280 5281>**说明:** 5282> 5283>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5284 5285<!--code_no_check--> 5286```ts 5287import { socket } from '@kit.NetworkKit'; 5288import { common } from '@kit.AbilityKit'; 5289 5290let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5291let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5292let sandboxPath: string = context.filesDir + '/testSocket'; 5293let listenAddr: socket.NetAddress = { 5294 address: sandboxPath 5295} 5296server.listen(listenAddr).then(() => { 5297 console.log("listen success"); 5298}).catch((err: Object) => { 5299 console.error("listen fail: " + JSON.stringify(err)); 5300}) 5301 5302let options: socket.ExtraOptionsBase = { 5303 receiveBufferSize: 8192, 5304 sendBufferSize: 8192, 5305 socketTimeout: 3000 5306} 5307server.setExtraOptions(options).then(() => { 5308 console.log('setExtraOptions success'); 5309}).catch((err: Object) => { 5310 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 5311}); 5312``` 5313 5314### getExtraOptions<sup>11+</sup> 5315 5316getExtraOptions(): Promise\<ExtraOptionsBase\>; 5317 5318获取LocalSocketServer中连接的套接字的属性。使用Promise方式作为异步方法。 5319 5320> **说明:** 5321> listen方法调用成功后,才可调用此方法。 5322 5323**系统能力**:SystemCapability.Communication.NetStack 5324 5325**返回值:** 5326 5327| 类型 | 说明 | 5328| :-------------------------- | :-------------------------- | 5329| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 | 5330 5331**错误码:** 5332 5333以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5334 5335| 错误码ID | 错误信息 | 5336| -------- | -------------------- | 5337| 401 | Parameter error. | 5338 5339**示例:** 5340 5341>**说明:** 5342> 5343>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5344 5345<!--code_no_check--> 5346```ts 5347import { socket } from '@kit.NetworkKit'; 5348import { common } from '@kit.AbilityKit'; 5349 5350let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5351let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5352let sandboxPath: string = context.filesDir + '/testSocket'; 5353let listenAddr: socket.LocalAddress = { 5354 address: sandboxPath 5355} 5356server.listen(listenAddr).then(() => { 5357 console.log("listen success"); 5358}).catch((err: Object) => { 5359 console.error("listen fail: " + JSON.stringify(err)); 5360}) 5361server.getExtraOptions().then((options: socket.ExtraOptionsBase) => { 5362 console.log('options: ' + JSON.stringify(options)); 5363}).catch((err: Object) => { 5364 console.error('getExtraOptions fail: ' + JSON.stringify(err)); 5365}); 5366``` 5367 5368### getLocalAddress<sup>12+</sup> 5369 5370getLocalAddress(): Promise\<string\> 5371 5372获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。 5373 5374> **说明:** 5375> listen方法调用成功后,才可调用此方法。 5376 5377**系统能力**:SystemCapability.Communication.NetStack 5378 5379**返回值:** 5380 5381| 类型 | 说明 | 5382| -------------- | --------------------------------------------------- | 5383| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 5384 5385**错误码:** 5386 5387以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 5388 5389| 错误码ID | 错误信息 | 5390| -------- | ------------------------------------------- | 5391| 2300002 | System internal error. | 5392| 2301009 | Bad file descriptor. | 5393| 2303188 | Socket operation on non-socket. | 5394 5395**示例:** 5396 5397>**说明:** 5398> 5399>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5400 5401<!--code_no_check--> 5402```ts 5403import { common } from '@kit.AbilityKit'; 5404import { socket } from '@kit.NetworkKit'; 5405import { BusinessError } from '@kit.BasicServicesKit'; 5406 5407let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5408let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5409let sandboxPath: string = context.filesDir + '/testSocket'; 5410let listenAddr: socket.LocalAddress = { 5411 address: sandboxPath 5412} 5413server.listen(listenAddr).then(() => { 5414 console.info("listen success"); 5415 server.getLocalAddress().then((localPath: string) => { 5416 console.info("SUCCESS " + JSON.stringify(localPath)); 5417 }).catch((err: BusinessError) => { 5418 console.error("FAIL " + JSON.stringify(err)); 5419 }) 5420}).catch((err: Object) => { 5421 console.error("listen fail: " + JSON.stringify(err)); 5422}) 5423 5424``` 5425 5426### on('connect')<sup>11+</sup> 5427 5428on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void 5429 5430订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 5431 5432> **说明:** 5433> listen方法调用成功后,才可调用此方法。 5434 5435**系统能力**:SystemCapability.Communication.NetStack 5436 5437**参数:** 5438 5439| 参数名 | 类型 | 必填 | 说明 | 5440| -------- | ------------------------------- | ---- | ------------------------------------- | 5441| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 5442| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是 | 以callback的形式异步返回接收到客户端连接的结果。| 5443 5444**错误码:** 5445 5446以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5447 5448| 错误码ID | 错误信息 | 5449| -------- | ---------------- | 5450| 401 | Parameter error. | 5451 5452**示例:** 5453 5454```ts 5455import { socket } from '@kit.NetworkKit'; 5456 5457let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5458server.on('connect', (connection: socket.LocalSocketConnection) => { 5459 if (connection) { 5460 console.log('accept a client') 5461 } 5462}); 5463``` 5464 5465### off('connect')<sup>11+</sup> 5466 5467off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void 5468 5469取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 5470 5471**系统能力**:SystemCapability.Communication.NetStack 5472 5473**参数:** 5474 5475| 参数名 | 类型 | 必填 | 说明 | 5476| -------- | ------------------------------- | ---- | ------------------------------------- | 5477| type | string | 是 | 取消订阅的事件类型。'connect':LocalSocketServer的连接事件。 | 5478| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。| 5479 5480**错误码:** 5481 5482以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5483 5484| 错误码ID | 错误信息 | 5485| -------- | ---------------- | 5486| 401 | Parameter error. | 5487 5488**示例:** 5489 5490```ts 5491import { socket } from '@kit.NetworkKit'; 5492 5493let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5494let callback = (connection: socket.LocalSocketConnection) => { 5495 if (connection) { 5496 console.log('accept a client') 5497 } 5498} 5499server.on('connect', callback); 5500// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5501server.off('connect', callback); 5502server.off('connect'); 5503``` 5504 5505### on('error')<sup>11+</sup> 5506 5507on(type: 'error', callback: ErrorCallback): void 5508 5509订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 5510 5511> **说明:** 5512> listen方法调用成功后,才可调用此方法。 5513 5514**系统能力**:SystemCapability.Communication.NetStack 5515 5516**参数:** 5517 5518| 参数名 | 类型 | 必填 | 说明 | 5519| -------- | ------------- | ---- | ------------------------------------ | 5520| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5521| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 5522 5523**错误码:** 5524 5525以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5526 5527| 错误码ID | 错误信息 | 5528| -------- | ---------------- | 5529| 401 | Parameter error. | 5530 5531**示例:** 5532 5533```ts 5534import { socket } from '@kit.NetworkKit'; 5535 5536let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5537server.on('error', (err: Object) => { 5538 console.error("on error, err:" + JSON.stringify(err)) 5539}); 5540``` 5541 5542### off('error')<sup>11+</sup> 5543 5544off(type: 'error', callback?: ErrorCallback): void 5545 5546取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 5547 5548**系统能力**:SystemCapability.Communication.NetStack 5549 5550**参数:** 5551 5552| 参数名 | 类型 | 必填 | 说明 | 5553| -------- | ------------- | ---- | ------------------------------------ | 5554| type | string | 是 | 取消订阅的事件类型。'error':error事件。 | 5555| callback | ErrorCallback | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 5556 5557**错误码:** 5558 5559以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5560 5561| 错误码ID | 错误信息 | 5562| -------- | ---------------- | 5563| 401 | Parameter error. | 5564 5565**示例:** 5566 5567```ts 5568import { socket } from '@kit.NetworkKit'; 5569 5570let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5571let callback = (err: Object) => { 5572 console.error("on error, err:" + JSON.stringify(err)); 5573} 5574server.on('error', callback); 5575// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5576server.off('error', callback); 5577server.off('error'); 5578``` 5579 5580### close<sup>20+</sup> 5581 5582close(): Promise\<void\> 5583 5584LocalSocketServer停止监听并释放通过[listen](#listen11)方法绑定的监听端口。使用Promise异步回调。 5585 5586> **说明:** 5587> 该方法不会关闭已有连接。如需关闭,请调用[LocalSocketConnection](#localsocketconnection11)的[close](#close11-1)方法。 5588 5589**系统能力**:SystemCapability.Communication.NetStack 5590 5591**返回值:** 5592 5593| 类型 | 说明 | 5594| -------------- | --------------------------------------------------------- | 5595| Promise\<void\> | Promise对象,无返回结果。 | 5596 5597**错误码:** 5598 5599以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 5600 5601| 错误码ID | 错误信息 | 5602| -------- | ------------------------------------------- | 5603| 2300002 | System internal error. | 5604 5605**示例:** 5606 5607>**说明:** 5608> 5609>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5610 5611<!--code_no_check--> 5612```ts 5613import { socket } from '@kit.NetworkKit'; 5614import { common } from '@kit.AbilityKit'; 5615import { BusinessError } from '@kit.BasicServicesKit'; 5616 5617let localserver: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5618let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5619let sandboxPath: string = context.filesDir + '/testSocket'; 5620let addr: socket.LocalAddress = { 5621 address: sandboxPath 5622} 5623localserver.on('connect', (connection: socket.LocalSocketConnection) => { 5624 console.info("connection clientId: " + connection.clientId); 5625 // 逻辑处理 5626 localserver.close(); // 停止监听 5627 connection.close(); // 关闭当前连接 5628}); 5629localserver.listen(addr).then(() => { 5630 console.info('listen success'); 5631}).catch((err: BusinessError) => { 5632 console.error('listen fail: ' + err.code); 5633}); 5634``` 5635 5636## LocalSocketConnection<sup>11+</sup> 5637 5638LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。 5639 5640> **说明:** 5641> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。 5642 5643**系统能力**:SystemCapability.Communication.NetStack 5644 5645### 属性 5646 5647| 名称 | 类型 | 必填 | 说明 | 5648| -------- | ------ | ---- | ---------------------------- | 5649| clientId | number | 是 | 客户端与服务端建立的会话连接的id。 | 5650 5651### send<sup>11+</sup> 5652 5653send(options: LocalSendOptions): Promise\<void\> 5654 5655通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。 5656 5657> **说明:** 5658> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。 5659 5660**系统能力**:SystemCapability.Communication.NetStack 5661 5662**参数:** 5663 5664| 参数名 | 类型 | 必填 | 说明 | 5665| ------- | --------------------------------- | ---- | -------------------------------------- | 5666| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocketConnection发送请求的参数。 | 5667 5668**返回值:** 5669 5670| 类型 | 说明 | 5671| :-------------- | :---------------------------------------------- | 5672| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 5673 5674**错误码:** 5675 5676以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 5677 5678| 错误码ID | 错误信息 | 5679| -------- | ---------------------- | 5680| 401 | Parameter error. | 5681| 2301011 | Operation would block. | 5682 5683**示例:** 5684 5685```ts 5686import { socket } from '@kit.NetworkKit'; 5687 5688let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5689 5690server.on('connect', (connection: socket.LocalSocketConnection) => { 5691 let sendOptions: socket.LocalSendOptions = { 5692 data: 'Hello, client!' 5693 } 5694 connection.send(sendOptions).then(() => { 5695 console.log('send success'); 5696 }).catch((err: Object) => { 5697 console.error('send fail: ' + JSON.stringify(err)); 5698 }); 5699}); 5700``` 5701 5702### close<sup>11+</sup> 5703 5704close(): Promise\<void\> 5705 5706关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。 5707 5708**系统能力**:SystemCapability.Communication.NetStack 5709 5710**返回值:** 5711 5712| 类型 | 说明 | 5713| :-------------- | :------------------------------------------- | 5714| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 5715 5716**错误码:** 5717 5718以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 5719 5720| 错误码ID | 错误信息 | 5721| -------- | -------------------- | 5722| 2301009 | Bad file descriptor. | 5723 5724**示例:** 5725 5726```ts 5727import { socket } from '@kit.NetworkKit'; 5728 5729let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5730server.on('connect', (connection: socket.LocalSocketConnection) => { 5731 connection.close().then(() => { 5732 console.log('close success'); 5733 }).catch((err: Object) => { 5734 console.error('close fail: ' + JSON.stringify(err)); 5735 }); 5736}); 5737``` 5738 5739### getLocalAddress<sup>12+</sup> 5740 5741getLocalAddress(): Promise\<string\> 5742 5743获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。 5744 5745**系统能力**:SystemCapability.Communication.NetStack 5746 5747**返回值:** 5748 5749| 类型 | 说明 | 5750| -------------- | --------------------------------------------------- | 5751| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 5752 5753**错误码:** 5754 5755以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 5756 5757| 错误码ID | 错误信息 | 5758| -------- | ------------------------------------------- | 5759| 2300002 | System internal error. | 5760| 2301009 | Bad file descriptor. | 5761| 2303188 | Socket operation on non-socket. | 5762 5763**示例:** 5764 5765>**说明:** 5766> 5767>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5768 5769<!--code_no_check--> 5770```ts 5771import { common } from '@kit.AbilityKit'; 5772import { socket } from '@kit.NetworkKit'; 5773import { BusinessError } from '@kit.BasicServicesKit'; 5774 5775let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5776let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5777let sandboxPath: string = context.filesDir + '/testSocket'; 5778let localAddr: socket.LocalAddress = { 5779 address: sandboxPath 5780} 5781server.listen(localAddr).then(() => { 5782 console.info('listen success'); 5783 let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 5784 let connectOpt: socket.LocalConnectOptions = { 5785 address: localAddr, 5786 timeout: 6000 5787 } 5788 client.connect(connectOpt).then(() => { 5789 server.getLocalAddress().then((localPath: string) => { 5790 console.info("success, localPath is" + JSON.stringify(localPath)); 5791 }).catch((err: BusinessError) => { 5792 console.error("FAIL " + JSON.stringify(err)); 5793 }) 5794 }).catch((err: Object) => { 5795 console.error('connect fail: ' + JSON.stringify(err)); 5796 }); 5797}); 5798``` 5799 5800### on('message')<sup>11+</sup> 5801 5802on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void 5803 5804订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5805 5806**系统能力**:SystemCapability.Communication.NetStack 5807 5808**参数:** 5809 5810| 参数名 | 类型 | 必填 | 说明 | 5811| -------- | ----------------------------------------------- | ---- | --------------------------------------- | 5812| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5813| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收到的来自客户端的消息。 | 5814 5815**错误码:** 5816 5817以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5818 5819| 错误码ID | 错误信息 | 5820| -------- | ---------------- | 5821| 401 | Parameter error. | 5822 5823**示例:** 5824 5825>**说明:** 5826> 5827>在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。 5828 5829<!--code_no_check--> 5830```ts 5831import { socket } from '@kit.NetworkKit'; 5832import { common } from '@kit.AbilityKit'; 5833 5834let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5835let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5836let sandboxPath: string = context.filesDir + '/testSocket'; 5837let listenAddr: socket.LocalAddress = { 5838 address: sandboxPath 5839} 5840server.listen(listenAddr).then(() => { 5841 console.log("listen success"); 5842}).catch((err: Object) => { 5843 console.error("listen fail: " + JSON.stringify(err)); 5844}); 5845server.on('connect', (connection: socket.LocalSocketConnection) => { 5846 connection.on('message', (value: socket.LocalSocketMessageInfo) => { 5847 const uintArray = new Uint8Array(value.message); 5848 let messageView = ''; 5849 for (let i = 0; i < uintArray.length; i++) { 5850 messageView += String.fromCharCode(uintArray[i]); 5851 } 5852 console.log('total: ' + JSON.stringify(value)); 5853 console.log('message infomation: ' + messageView); 5854 }); 5855}); 5856``` 5857 5858### off('message')<sup>11+</sup> 5859 5860off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 5861 5862取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5863 5864**系统能力**:SystemCapability.Communication.NetStack 5865 5866**参数:** 5867 5868| 参数名 | 类型 | 必填 | 说明 | 5869| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 5870| type | string | 是 | 取消订阅的事件类型。'message':接收消息事件。 | 5871| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 5872 5873**错误码:** 5874 5875以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5876 5877| 错误码ID | 错误信息 | 5878| -------- | ---------------- | 5879| 401 | Parameter error. | 5880 5881**示例:** 5882 5883```ts 5884import { socket } from '@kit.NetworkKit'; 5885 5886let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5887let callback = (value: socket.LocalSocketMessageInfo) => { 5888 const uintArray = new Uint8Array(value.message) 5889 let messageView = ''; 5890 for (let i = 0; i < uintArray.length; i++) { 5891 messageView += String.fromCharCode(uintArray[i]); 5892 } 5893 console.log('total: ' + JSON.stringify(value)); 5894 console.log('message infomation: ' + messageView); 5895} 5896server.on('connect', (connection: socket.LocalSocketConnection) => { 5897 connection.on('message', callback); 5898 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5899 connection.off('message', callback); 5900 connection.off('message'); 5901}); 5902``` 5903 5904### on('close')<sup>11+</sup> 5905 5906on(type: 'close', callback: Callback\<void\>): void 5907 5908订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5909 5910**系统能力**:SystemCapability.Communication.NetStack 5911 5912**参数:** 5913 5914| 参数名 | 类型 | 必填 | 说明 | 5915| -------- | ---------------- | ---- | ----------------------------------- | 5916| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 5917| callback | Callback\<void\> | 是 | 以callback的形式异步返回会话关闭的结果。 | 5918 5919**错误码:** 5920 5921以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5922 5923| 错误码ID | 错误信息 | 5924| -------- | ---------------- | 5925| 401 | Parameter error. | 5926 5927**示例:** 5928 5929```ts 5930import { socket } from '@kit.NetworkKit'; 5931 5932let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5933server.on('connect', (connection: socket.LocalSocketConnection) => { 5934 connection.on('close', () => { 5935 console.log("on close success") 5936 }); 5937}); 5938``` 5939 5940### off('close')<sup>11+</sup> 5941 5942off(type: 'close', callback?: Callback\<void\>): void 5943 5944取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5945 5946**系统能力**:SystemCapability.Communication.NetStack 5947 5948**参数:** 5949 5950| 参数名 | 类型 | 必填 | 说明 | 5951| -------- | ---------------- | ---- | ----------------------------------- | 5952| type | string | 是 | 取消订阅的事件类型。'close':关闭事件。 | 5953| callback | Callback\<void\> | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 5954 5955**错误码:** 5956 5957以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5958 5959| 错误码ID | 错误信息 | 5960| -------- | ---------------- | 5961| 401 | Parameter error. | 5962 5963**示例:** 5964 5965```ts 5966import { socket } from '@kit.NetworkKit'; 5967 5968let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5969let callback = () => { 5970 console.log("on close success"); 5971} 5972server.on('connect', (connection: socket.LocalSocketConnection) => { 5973 connection.on('close', callback); 5974 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5975 connection.off('close', callback); 5976 connection.off('close'); 5977}); 5978``` 5979 5980### on('error')<sup>11+</sup> 5981 5982on(type: 'error', callback: ErrorCallback): void 5983 5984订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 5985 5986**系统能力**:SystemCapability.Communication.NetStack 5987 5988**参数:** 5989 5990| 参数名 | 类型 | 必填 | 说明 | 5991| -------- | ------------- | ---- | ------------------------------------ | 5992| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5993| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 5994 5995**错误码:** 5996 5997以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 5998 5999| 错误码ID | 错误信息 | 6000| -------- | ---------------- | 6001| 401 | Parameter error. | 6002 6003**示例:** 6004 6005```ts 6006import { socket } from '@kit.NetworkKit'; 6007 6008let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 6009server.on('connect', (connection: socket.LocalSocketConnection) => { 6010 connection.on('error', (err: Object) => { 6011 console.error("on error, err:" + JSON.stringify(err)) 6012 }); 6013}); 6014``` 6015 6016### off('error')<sup>11+</sup> 6017 6018off(type: 'error', callback?: ErrorCallback): void 6019 6020取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 6021 6022**系统能力**:SystemCapability.Communication.NetStack 6023 6024**参数:** 6025 6026| 参数名 | 类型 | 必填 | 说明 | 6027| -------- | ------------- | ---- | ------------------------------------ | 6028| type | string | 是 | 取消订阅的事件类型。'error':error事件。 | 6029| callback | ErrorCallback | 否 | 回调函数。可以指定传入on中的callback取消对应的订阅,也可以不指定callback清空所有订阅。 | 6030 6031**错误码:** 6032 6033以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 6034 6035| 错误码ID | 错误信息 | 6036| -------- | ---------------- | 6037| 401 | Parameter error. | 6038 6039**示例:** 6040 6041```ts 6042import { socket } from '@kit.NetworkKit'; 6043 6044let callback = (err: Object) => { 6045 console.error("on error, err: " + JSON.stringify(err)); 6046} 6047let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 6048server.on('connect', (connection: socket.LocalSocketConnection) => { 6049 connection.on('error', callback); 6050 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6051 connection.off('error', callback); 6052 connection.off('error'); 6053}); 6054``` 6055 6056## LocalSocket 错误码说明 6057 6058LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。 6059 6060错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md)。 6061 6062## socket.constructTLSSocketInstance<sup>9+</sup> 6063 6064constructTLSSocketInstance(): TLSSocket 6065 6066创建并返回一个TLSSocket对象。 6067 6068**系统能力**:SystemCapability.Communication.NetStack 6069 6070**返回值:** 6071 6072| 类型 | 说明 | 6073| --------------------------------- | ---------------------- | 6074| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 6075 6076**示例:** 6077 6078```ts 6079import { socket } from '@kit.NetworkKit'; 6080 6081let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6082``` 6083 6084## socket.constructTLSSocketInstance<sup>12+</sup> 6085 6086constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket 6087 6088将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。 6089 6090> **说明:** 6091> 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。 6092 6093**系统能力**:SystemCapability.Communication.NetStack 6094 6095**参数:** 6096 6097| 参数名 | 类型 | 必填 | 说明 | 6098|-----------|----| ---- |------------------------| 6099| tcpSocket | [TCPSocket](#tcpsocket) | 是 | 需要进行升级的TCPSocket对象。 | 6100 6101**返回值:** 6102 6103| 类型 | 说明 | 6104| --------------------------------- | ---------------------- | 6105| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 6106 6107**错误码:** 6108 6109以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 6110 6111| 错误码ID | 错误信息 | 6112|---------|----------------------------------| 6113| 401 | Parameter error. | 6114| 2300002 | System internal error. | 6115| 2303601 | Invalid socket FD. | 6116| 2303602 | Socket is not connected. | 6117 6118**示例:** 6119 6120```ts 6121import { socket } from '@kit.NetworkKit'; 6122import { BusinessError } from '@kit.BasicServicesKit'; 6123 6124let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 6125let netAddress: socket.NetAddress = { 6126 address: '192.168.xx.xxx', 6127 port: 8080 6128} 6129let tcpconnectoptions: socket.TCPConnectOptions = { 6130 address: netAddress, 6131 timeout: 6000 6132} 6133 6134tcp.connect(tcpconnectoptions, (err: BusinessError) => { 6135 if (err) { 6136 console.error('connect fail'); 6137 return; 6138 } 6139 console.log('connect success'); 6140 6141 // 确保TCPSocket已连接后,再升级TLSSocket 6142 let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp); 6143}) 6144``` 6145 6146## TLSSocket<sup>9+</sup> 6147 6148TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。 6149 6150### bind<sup>9+</sup> 6151 6152bind(address: NetAddress, callback: AsyncCallback\<void\>): void 6153 6154绑定IP地址和端口。使用callback方法作为异步方法。 6155 6156> **说明:** 6157> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 6158 6159**需要权限**:ohos.permission.INTERNET 6160 6161**系统能力**:SystemCapability.Communication.NetStack 6162 6163**参数:** 6164 6165| 参数名 | 类型 | 必填 | 说明 | 6166| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 6167| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 6168| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。| 6169 6170**错误码:** 6171 6172以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 6173 6174| 错误码ID | 错误信息 | 6175| ------- | ----------------------- | 6176| 401 | Parameter error. | 6177| 201 | Permission denied. | 6178| 2303198 | Address already in use. | 6179| 2300002 | System internal error. | 6180 6181**示例:** 6182 6183```ts 6184import { socket } from '@kit.NetworkKit'; 6185import { BusinessError } from '@kit.BasicServicesKit'; 6186 6187let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6188let bindAddr: socket.NetAddress = { 6189 address: '192.168.xx.xxx', 6190 port: 8080 6191} 6192tls.bind(bindAddr, (err: BusinessError) => { 6193 if (err) { 6194 console.error('bind fail'); 6195 return; 6196 } 6197 console.log('bind success'); 6198}); 6199``` 6200 6201### bind<sup>9+</sup> 6202 6203bind(address: NetAddress): Promise\<void\> 6204 6205绑定IP地址和端口。使用Promise方法作为异步方法。 6206 6207> **说明:** 6208> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 6209 6210**需要权限**:ohos.permission.INTERNET 6211 6212**系统能力**:SystemCapability.Communication.NetStack 6213 6214**参数:** 6215 6216| 参数名 | 类型 | 必填 | 说明 | 6217| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 6218| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 6219 6220**返回值:** 6221 6222| 类型 | 说明 | 6223| -------------- | ------------------------------------------------------- | 6224| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 | 6225 6226**错误码:** 6227 6228以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 6229 6230| 错误码ID | 错误信息 | 6231| ------- | ----------------------- | 6232| 401 | Parameter error. | 6233| 201 | Permission denied. | 6234| 2303198 | Address already in use. | 6235| 2300002 | System internal error. | 6236 6237**示例:** 6238 6239```ts 6240import { socket } from '@kit.NetworkKit'; 6241import { BusinessError } from '@kit.BasicServicesKit'; 6242 6243let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6244let bindAddr: socket.NetAddress = { 6245 address: '192.168.xx.xxx', 6246 port: 8080 6247} 6248tls.bind(bindAddr).then(() => { 6249 console.log('bind success'); 6250}).catch((err: BusinessError) => { 6251 console.error('bind fail'); 6252}); 6253``` 6254 6255### getState<sup>9+</sup> 6256 6257getState(callback: AsyncCallback\<SocketStateBase\>): void 6258 6259在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。 6260 6261**系统能力**:SystemCapability.Communication.NetStack 6262 6263**参数:** 6264 6265| 参数名 | 类型 | 必填 | 说明 | 6266| -------- | ------------------------------------------------------ | ---- | ---------- | 6267| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 | 6268 6269**错误码:** 6270 6271以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 6272 6273| 错误码ID | 错误信息 | 6274| ------- | ------------------------------ | 6275| 2303188 | Socket operation on non-socket.| 6276| 2300002 | System internal error. | 6277 6278**示例:** 6279 6280```ts 6281import { socket } from '@kit.NetworkKit'; 6282import { BusinessError } from '@kit.BasicServicesKit'; 6283 6284let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6285let bindAddr: socket.NetAddress = { 6286 address: '192.168.xx.xxx', 6287 port: 8080 6288} 6289tls.bind(bindAddr, (err: BusinessError) => { 6290 if (err) { 6291 console.error('bind fail'); 6292 return; 6293 } 6294 console.log('bind success'); 6295}); 6296tls.getState((err: BusinessError, data: socket.SocketStateBase) => { 6297 if (err) { 6298 console.error('getState fail'); 6299 return; 6300 } 6301 console.log('getState success:' + JSON.stringify(data)); 6302}); 6303``` 6304 6305### getState<sup>9+</sup> 6306 6307getState(): Promise\<SocketStateBase\> 6308 6309在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。 6310 6311**系统能力**:SystemCapability.Communication.NetStack 6312 6313**返回值:** 6314 6315| 类型 | 说明 | 6316| ----------------------------------------------- | ----------------------------------------- | 6317| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。| 6318 6319**错误码:** 6320 6321以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)。 6322 6323| 错误码ID | 错误信息 | 6324| ------- | ------------------------------ | 6325| 2303188 | Socket operation on non-socket.| 6326| 2300002 | System internal error. | 6327 6328**示例:** 6329 6330```ts 6331import { socket } from '@kit.NetworkKit'; 6332import { BusinessError } from '@kit.BasicServicesKit'; 6333 6334let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6335let bindAddr: socket.NetAddress = { 6336 address: '192.168.xx.xxx', 6337 port: 8080 6338} 6339tls.bind(bindAddr, (err: BusinessError) => { 6340 if (err) { 6341 console.error('bind fail'); 6342 return; 6343 } 6344 console.log('bind success'); 6345}); 6346tls.getState().then(() => { 6347 console.log('getState success'); 6348}).catch((err: BusinessError) => { 6349 console.error('getState fail'); 6350}); 6351``` 6352 6353### setExtraOptions<sup>9+</sup> 6354 6355setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 6356 6357在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 6358 6359**系统能力**:SystemCapability.Communication.NetStack 6360 6361**参数:** 6362 6363| 参数名 | 类型 | 必填 | 说明 | 6364| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 6365| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 6366| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。| 6367 6368**错误码:** 6369 6370以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 6371 6372| 错误码ID | 错误信息 | 6373| ------- | ----------------------------- | 6374| 401 | Parameter error. | 6375| 2303188 | Socket operation on non-socket.| 6376| 2300002 | System internal error. | 6377 6378**示例:** 6379 6380```ts 6381import { socket } from '@kit.NetworkKit'; 6382import { BusinessError } from '@kit.BasicServicesKit'; 6383 6384let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6385let bindAddr: socket.NetAddress = { 6386 address: '192.168.xx.xxx', 6387 port: 8080 6388} 6389tls.bind(bindAddr, (err: BusinessError) => { 6390 if (err) { 6391 console.error('bind fail'); 6392 return; 6393 } 6394 console.log('bind success'); 6395}); 6396 6397interface SocketLinger { 6398 on: boolean; 6399 linger: number; 6400} 6401 6402let tcpExtraOptions: socket.TCPExtraOptions = { 6403 keepAlive: true, 6404 OOBInline: true, 6405 TCPNoDelay: true, 6406 socketLinger: { on: true, linger: 10 } as SocketLinger, 6407 receiveBufferSize: 8192, 6408 sendBufferSize: 8192, 6409 reuseAddress: true, 6410 socketTimeout: 3000 6411} 6412tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 6413 if (err) { 6414 console.error('setExtraOptions fail'); 6415 return; 6416 } 6417 console.log('setExtraOptions success'); 6418}); 6419``` 6420 6421### setExtraOptions<sup>9+</sup> 6422 6423setExtraOptions(options: TCPExtraOptions): Promise\<void\> 6424 6425在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用Promise方式作为异步方法。 6426 6427**系统能力**:SystemCapability.Communication.NetStack 6428 6429**参数:** 6430 6431| 参数名 | 类型 | 必填 | 说明 | 6432| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 6433| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 6434 6435**返回值:** 6436 6437| 类型 | 说明 | 6438| -------------- | --------------------------------------------------- | 6439| Promise\<void\> | Promise对象。无返回结果的Promise对象。 | 6440 6441**错误码:** 6442 6443以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 6444 6445| 错误码ID | 错误信息 | 6446| ------- | ------------------------------ | 6447| 401 | Parameter error. | 6448| 2303188 | Socket operation on non-socket.| 6449| 2300002 | System internal error. | 6450 6451**示例:** 6452 6453```ts 6454import { socket } from '@kit.NetworkKit'; 6455import { BusinessError } from '@kit.BasicServicesKit'; 6456 6457let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6458let bindAddr: socket.NetAddress = { 6459 address: '192.168.xx.xxx', 6460 port: 8080 6461} 6462tls.bind(bindAddr, (err: BusinessError) => { 6463 if (err) { 6464 console.error('bind fail'); 6465 return; 6466 } 6467 console.log('bind success'); 6468}); 6469 6470interface SocketLinger { 6471 on: boolean; 6472 linger: number; 6473} 6474 6475let tcpExtraOptions: socket.TCPExtraOptions = { 6476 keepAlive: true, 6477 OOBInline: true, 6478 TCPNoDelay: true, 6479 socketLinger: { on: true, linger: 10 } as SocketLinger, 6480 receiveBufferSize: 8192, 6481 sendBufferSize: 8192, 6482 reuseAddress: true, 6483 socketTimeout: 3000 6484} 6485tls.setExtraOptions(tcpExtraOptions).then(() => { 6486 console.log('setExtraOptions success'); 6487}).catch((err: BusinessError) => { 6488 console.error('setExtraOptions fail'); 6489}); 6490``` 6491 6492### on('message')<sup>9+</sup> 6493 6494on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 6495 6496订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 6497 6498> **说明:** 6499> 6500> bind方法调用成功后,才可调用此方法。 6501 6502**系统能力**:SystemCapability.Communication.NetStack 6503 6504**参数:** 6505 6506| 参数名 | 类型 | 必填 | 说明 | 6507| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 6508| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 6509| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 6510 6511**错误码:** 6512 6513以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)。 6514 6515| 错误码ID | 错误信息 | 6516| ------- | ------------------------------ | 6517| 401 | Parameter error. | 6518 6519**示例:** 6520 6521```ts 6522import { socket } from '@kit.NetworkKit'; 6523import { BusinessError } from '@kit.BasicServicesKit'; 6524 6525let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6526let messageView = ''; 6527let bindAddr: socket.NetAddress = { 6528 address: '192.168.xx.xxx', 6529 port: 8080 6530} 6531tls.bind(bindAddr, (err: BusinessError) => { 6532 if (err) { 6533 console.log('bind fail'); 6534 return; 6535 } 6536 console.log('bind success'); 6537 tls.on('message', (value: socket.SocketMessageInfo) => { 6538 for (let i: number = 0; i < value.message.byteLength; i++) { 6539 let uint8Array = new Uint8Array(value.message) 6540 let messages = uint8Array[i] 6541 let message = String.fromCharCode(messages); 6542 messageView += message; 6543 } 6544 console.log('on message message: ' + JSON.stringify(messageView)); 6545 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 6546 }); 6547}); 6548``` 6549 6550### off('message')<sup>9+</sup> 6551 6552off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 6553 6554取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 6555 6556**系统能力**:SystemCapability.Communication.NetStack 6557 6558**参数:** 6559 6560| 参数名 | 类型 | 必填 | 说明 | 6561| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 6562| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 6563| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 6564 6565**错误码:** 6566 6567| 错误码ID | 错误信息 | 6568| ------- | ------------------------------ | 6569| 401 | Parameter error. | 6570 6571**示例:** 6572 6573```ts 6574import { socket } from '@kit.NetworkKit'; 6575import { BusinessError } from '@kit.BasicServicesKit'; 6576 6577let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6578let messageView = ''; 6579let callback = (value: socket.SocketMessageInfo) => { 6580 for (let i: number = 0; i < value.message.byteLength; i++) { 6581 let uint8Array = new Uint8Array(value.message) 6582 let messages = uint8Array[i] 6583 let message = String.fromCharCode(messages); 6584 messageView += message; 6585 } 6586 console.log('on message message: ' + JSON.stringify(messageView)); 6587 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 6588} 6589tls.on('message', callback); 6590// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6591tls.off('message', callback); 6592``` 6593### on('connect' | 'close')<sup>9+</sup> 6594 6595on(type: 'connect' | 'close', callback: Callback\<void\>): void 6596 6597订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 6598 6599> **说明:** 6600> 6601> bind方法调用成功后,才可调用此方法。 6602 6603**系统能力**:SystemCapability.Communication.NetStack 6604 6605**参数:** 6606 6607| 参数名 | 类型 | 必填 | 说明 | 6608| -------- | ---------------- | ---- | ------------------------------------------------------------ | 6609| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 6610| callback | Callback\<void\> | 是 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 6611 6612**错误码:** 6613 6614| 错误码ID | 错误信息 | 6615| ------- | ------------------------------ | 6616| 401 | Parameter error. | 6617 6618**示例:** 6619 6620```ts 6621import { socket } from '@kit.NetworkKit'; 6622import { BusinessError } from '@kit.BasicServicesKit'; 6623 6624let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6625let bindAddr: socket.NetAddress = { 6626 address: '192.168.xx.xxx', 6627 port: 8080 6628} 6629tls.bind(bindAddr, (err: BusinessError) => { 6630 if (err) { 6631 console.log('bind fail'); 6632 return; 6633 } 6634 console.log('bind success'); 6635 tls.on('connect', () => { 6636 console.log("on connect success") 6637 }); 6638 tls.on('close', () => { 6639 console.log("on close success") 6640 }); 6641}); 6642``` 6643 6644### off('connect' | 'close')<sup>9+</sup> 6645 6646off(type: 'connect' | 'close', callback?: Callback\<void\>): void 6647 6648取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 6649 6650**系统能力**:SystemCapability.Communication.NetStack 6651 6652**参数:** 6653 6654| 参数名 | 类型 | 必填 | 说明 | 6655| -------- | ---------------- | ---- | ------------------------------------------------------------ | 6656| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 6657| callback | Callback\<void\> | 否 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 6658 6659**错误码:** 6660 6661| 错误码ID | 错误信息 | 6662| ------- | ------------------------------ | 6663| 401 | Parameter error. | 6664 6665**示例:** 6666 6667```ts 6668import { socket } from '@kit.NetworkKit'; 6669import { BusinessError } from '@kit.BasicServicesKit'; 6670 6671let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6672let callback1 = () => { 6673 console.log("on connect success"); 6674} 6675tls.on('connect', callback1); 6676// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6677tls.off('connect', callback1); 6678tls.off('connect'); 6679let callback2 = () => { 6680 console.log("on close success"); 6681} 6682tls.on('close', callback2); 6683// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6684tls.off('close', callback2); 6685``` 6686 6687### on('error')<sup>9+</sup> 6688 6689on(type: 'error', callback: ErrorCallback): void 6690 6691订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 6692 6693> **说明:** 6694> 6695> bind方法调用成功后,才可调用此方法。 6696 6697**系统能力**:SystemCapability.Communication.NetStack 6698 6699**参数:** 6700 6701| 参数名 | 类型 | 必填 | 说明 | 6702| -------- | ------------- | ---- | ------------------------------------ | 6703| type | string | 是 | 订阅的事件类型。'error':error事件。 | 6704| callback | ErrorCallback | 是 | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。 | 6705 6706**错误码:** 6707 6708| 错误码ID | 错误信息 | 6709| ------- | ------------------------------ | 6710| 401 | Parameter error. | 6711 6712**示例:** 6713 6714```ts 6715import { socket } from '@kit.NetworkKit'; 6716import { BusinessError } from '@kit.BasicServicesKit'; 6717 6718let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6719let bindAddr: socket.NetAddress = { 6720 address: '192.168.xx.xxx', 6721 port: 8080 6722} 6723tls.bind(bindAddr, (err: BusinessError) => { 6724 if (err) { 6725 console.log('bind fail'); 6726 return; 6727 } 6728 console.log('bind success'); 6729 tls.on('error', (err: BusinessError) => { 6730 console.error("on error, err:" + JSON.stringify(err)) 6731 }); 6732}); 6733``` 6734 6735### off('error')<sup>9+</sup> 6736 6737off(type: 'error', callback?: ErrorCallback): void 6738 6739取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 6740 6741**系统能力**:SystemCapability.Communication.NetStack 6742 6743**参数:** 6744 6745| 参数名 | 类型 | 必填 | 说明 | 6746| -------- | ------------- | ---- | ------------------------------------ | 6747| type | string | 是 | 订阅的事件类型。'error':error事件。 | 6748| callback | ErrorCallback | 否 | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。 | 6749 6750**错误码:** 6751 6752| 错误码ID | 错误信息 | 6753| ------- | ------------------------------ | 6754| 401 | Parameter error. | 6755 6756**示例:** 6757 6758```ts 6759import { socket } from '@kit.NetworkKit'; 6760import { BusinessError } from '@kit.BasicServicesKit'; 6761 6762let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6763let callback = (err: BusinessError) => { 6764 console.error("on error, err:" + JSON.stringify(err)); 6765} 6766tls.on('error', callback); 6767// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6768tls.off('error', callback); 6769``` 6770 6771### connect<sup>9+</sup> 6772 6773connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 6774 6775在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。 6776 6777**系统能力**:SystemCapability.Communication.NetStack 6778 6779**参数:** 6780 6781| 参数名 | 类型 | 必填 | 说明 | 6782| -------- | ---------------------------------------| ----| --------------- | 6783| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocket连接所需要的参数。| 6784| callback | AsyncCallback\<void\> | 是 | 回调函数,成功无返回,失败返回错误码、错误信息。| 6785 6786**错误码:** 6787 6788| 错误码ID | 错误信息 | 6789| ------- | -------------------------------------------- | 6790| 401 | Parameter error. | 6791| 2303104 | Interrupted system call. | 6792| 2303109 | Bad file number. | 6793| 2303111 | Resource temporarily unavailable. Try again. | 6794| 2303188 | Socket operation on non-socket. | 6795| 2303191 | Incorrect socket protocol type. | 6796| 2303198 | Address already in use. | 6797| 2303199 | Cannot assign requested address. | 6798| 2303210 | Connection timed out. | 6799| 2303501 | SSL is null. | 6800| 2303502 | An error occurred when reading data on the TLS socket.| 6801| 2303503 | An error occurred when writing data on the TLS socket.| 6802| 2303505 | An error occurred in the TLS system call. | 6803| 2303506 | Failed to close the TLS connection. | 6804| 2300002 | System internal error. | 6805| 2301206 | Socks5 failed to connect to the proxy server. | 6806| 2301207 | Socks5 username or password is invalid. | 6807| 2301208 | Socks5 failed to connect to the remote server. | 6808| 2301209 | Socks5 failed to negotiate the authentication method. | 6809| 2301210 | Socks5 failed to send the message. | 6810| 2301211 | Socks5 failed to receive the message. | 6811| 2301212 | Socks5 serialization error. | 6812| 2301213 | Socks5 deserialization error. | 6813 6814**示例:** 6815 6816```ts 6817import { socket } from '@kit.NetworkKit'; 6818import { BusinessError } from '@kit.BasicServicesKit'; 6819 6820let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 6821let bindAddr: socket.NetAddress = { 6822 address: '0.0.0.0', 6823} 6824tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6825 if (err) { 6826 console.error('bind fail'); 6827 return; 6828 } 6829 console.log('bind success'); 6830}); 6831let twoWayNetAddr: socket.NetAddress = { 6832 address: '192.168.xx.xxx', 6833 port: 8080 6834} 6835let twoWaySecureOptions: socket.TLSSecureOptions = { 6836 key: "xxxx", 6837 cert: "xxxx", 6838 ca: ["xxxx"], 6839 password: "xxxx", 6840 protocols: socket.Protocol.TLSv12, 6841 useRemoteCipherPrefer: true, 6842 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6843 cipherSuite: "AES256-SHA256" 6844} 6845let tlsConnectOptions: socket.TLSConnectOptions = { 6846 address: twoWayNetAddr, 6847 secureOptions: twoWaySecureOptions, 6848 ALPNProtocols: ["spdy/1", "http/1.1"] 6849} 6850 6851tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => { 6852 console.error("connect callback error" + err); 6853}); 6854 6855let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 6856tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6857 if (err) { 6858 console.error('bind fail'); 6859 return; 6860 } 6861 console.log('bind success'); 6862}); 6863let oneWayNetAddr: socket.NetAddress = { 6864 address: '192.168.xx.xxx', 6865 port: 8080 6866} 6867let oneWaySecureOptions: socket.TLSSecureOptions = { 6868 ca: ["xxxx", "xxxx"], 6869 cipherSuite: "AES256-SHA256" 6870} 6871let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6872 address: oneWayNetAddr, 6873 secureOptions: oneWaySecureOptions 6874} 6875tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => { 6876 console.error("connect callback error" + err); 6877}); 6878``` 6879 6880**示例(设置socket代理):** 6881 6882```ts 6883import { socket } from '@kit.NetworkKit'; 6884import { BusinessError } from '@kit.BasicServicesKit'; 6885 6886let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 双向认证 6887let bindAddr: socket.NetAddress = { 6888 address: '0.0.0.0', 6889} 6890tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6891 if (err) { 6892 console.error('bind fail'); 6893 return; 6894 } 6895 console.log('bind success'); 6896}); 6897let twoWayNetAddr: socket.NetAddress = { 6898 address: '192.168.xx.xxx', 6899 port: 8080 6900} 6901let socks5Server: socket.NetAddress = { 6902 address: '192.168.xx.xxx', 6903 port: 8080 6904} 6905let twoWaySecureOptions: socket.TLSSecureOptions = { 6906 key: "xxxx", 6907 cert: "xxxx", 6908 ca: ["xxxx"], 6909 password: "xxxx", 6910 protocols: socket.Protocol.TLSv12, 6911 useRemoteCipherPrefer: true, 6912 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6913 cipherSuite: "AES256-SHA256" 6914} 6915let proxyOptions: socket.ProxyOptions = { 6916 type : 1, 6917 address: socks5Server, 6918 username: "xxx", 6919 password: "xxx" 6920} 6921let tlsConnectOptions: socket.TLSConnectOptions = { 6922 address: twoWayNetAddr, 6923 secureOptions: twoWaySecureOptions, 6924 ALPNProtocols: ["spdy/1", "http/1.1"], 6925 proxy: proxyOptions, 6926} 6927 6928tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => { 6929 console.error("connect callback error" + err); 6930}); 6931 6932let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证 6933tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6934 if (err) { 6935 console.error('bind fail'); 6936 return; 6937 } 6938 console.log('bind success'); 6939}); 6940let oneWayNetAddr: socket.NetAddress = { 6941 address: '192.168.xx.xxx', 6942 port: 8080 6943} 6944let oneWaySecureOptions: socket.TLSSecureOptions = { 6945 ca: ["xxxx", "xxxx"], 6946 cipherSuite: "AES256-SHA256" 6947} 6948let proxyOptions: socket.ProxyOptions = { 6949 type : 1, 6950 address: socks5Server, 6951 username: "xxx", 6952 password: "xxx" 6953} 6954let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6955 address: oneWayNetAddr, 6956 secureOptions: oneWaySecureOptions, 6957 proxy: proxyOptions, 6958} 6959tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => { 6960 console.error("connect callback error" + err); 6961}); 6962``` 6963 6964### connect<sup>9+</sup> 6965 6966connect(options: TLSConnectOptions): Promise\<void\> 6967 6968在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。 6969 6970**系统能力**:SystemCapability.Communication.NetStack 6971 6972**参数:** 6973 6974| 参数名 | 类型 | 必填 | 说明 | 6975| -------- | --------------------------------------| ----| --------------- | 6976| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。| 6977 6978**返回值:** 6979 6980| 类型 | 说明 | 6981| ------------------------------------------- | ----------------------------- | 6982| Promise\<void\> | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。| 6983 6984**错误码:** 6985 6986| 错误码ID | 错误信息 | 6987| ------- | -------------------------------------------- | 6988| 401 | Parameter error. | 6989| 2303104 | Interrupted system call. | 6990| 2303109 | Bad file number. | 6991| 2303111 | Resource temporarily unavailable. Try again. | 6992| 2303188 | Socket operation on non-socket. | 6993| 2303191 | Incorrect socket protocol type. | 6994| 2303198 | Address already in use. | 6995| 2303199 | Cannot assign requested address. | 6996| 2303210 | Connection timed out. | 6997| 2303501 | SSL is null. | 6998| 2303502 | An error occurred when reading data on the TLS socket.| 6999| 2303503 | An error occurred when writing data on the TLS socket.| 7000| 2303505 | An error occurred in the TLS system call. | 7001| 2303506 | Failed to close the TLS connection. | 7002| 2300002 | System internal error. | 7003| 2301206 | Socks5 failed to connect to the proxy server. | 7004| 2301207 | Socks5 username or password is invalid. | 7005| 2301208 | Socks5 failed to connect to the remote server. | 7006| 2301209 | Socks5 failed to negotiate the authentication method. | 7007| 2301210 | Socks5 failed to send the message. | 7008| 2301211 | Socks5 failed to receive the message. | 7009| 2301212 | Socks5 serialization error. | 7010| 2301213 | Socks5 deserialization error. | 7011 7012**示例:** 7013 7014```ts 7015import { socket } from '@kit.NetworkKit'; 7016import { BusinessError } from '@kit.BasicServicesKit'; 7017 7018let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 7019let bindAddr: socket.NetAddress = { 7020 address: '0.0.0.0', 7021} 7022tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 7023 if (err) { 7024 console.error('bind fail'); 7025 return; 7026 } 7027 console.log('bind success'); 7028}); 7029let twoWayNetAddr: socket.NetAddress = { 7030 address: '192.168.xx.xxx', 7031 port: 8080 7032} 7033let twoWaySecureOptions: socket.TLSSecureOptions = { 7034 key: "xxxx", 7035 cert: "xxxx", 7036 ca: ["xxxx"], 7037 password: "xxxx", 7038 protocols: socket.Protocol.TLSv12, 7039 useRemoteCipherPrefer: true, 7040 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7041 cipherSuite: "AES256-SHA256" 7042} 7043let tlsConnectOptions: socket.TLSConnectOptions = { 7044 address: twoWayNetAddr, 7045 secureOptions: twoWaySecureOptions, 7046 ALPNProtocols: ["spdy/1", "http/1.1"] 7047} 7048 7049tlsTwoWay.connect(tlsConnectOptions).then(() => { 7050 console.log("connect successfully"); 7051}).catch((err: BusinessError) => { 7052 console.error("connect failed " + JSON.stringify(err)); 7053}); 7054 7055let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 7056tlsOneWay.bind(bindAddr, (err: BusinessError) => { 7057 if (err) { 7058 console.error('bind fail'); 7059 return; 7060 } 7061 console.log('bind success'); 7062}); 7063let oneWayNetAddr: socket.NetAddress = { 7064 address: '192.168.xx.xxx', 7065 port: 8080 7066} 7067let oneWaySecureOptions: socket.TLSSecureOptions = { 7068 ca: ["xxxx", "xxxx"], 7069 cipherSuite: "AES256-SHA256" 7070} 7071let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 7072 address: oneWayNetAddr, 7073 secureOptions: oneWaySecureOptions 7074} 7075tlsOneWay.connect(tlsOneWayConnectOptions).then(() => { 7076 console.log("connect successfully"); 7077}).catch((err: BusinessError) => { 7078 console.error("connect failed " + JSON.stringify(err)); 7079}); 7080``` 7081 7082**示例(设置socket代理):** 7083 7084```ts 7085import { socket } from '@kit.NetworkKit'; 7086import { BusinessError } from '@kit.BasicServicesKit'; 7087 7088let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 双向认证 7089let bindAddr: socket.NetAddress = { 7090 address: '0.0.0.0', 7091} 7092tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 7093 if (err) { 7094 console.error('bind fail'); 7095 return; 7096 } 7097 console.log('bind success'); 7098}); 7099let twoWayNetAddr: socket.NetAddress = { 7100 address: '192.168.xx.xxx', 7101 port: 8080 7102} 7103let socks5Server: socket.NetAddress = { 7104 address: '192.168.xx.xxx', 7105 port: 8080 7106} 7107let twoWaySecureOptions: socket.TLSSecureOptions = { 7108 key: "xxxx", 7109 cert: "xxxx", 7110 ca: ["xxxx"], 7111 password: "xxxx", 7112 protocols: socket.Protocol.TLSv12, 7113 useRemoteCipherPrefer: true, 7114 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7115 cipherSuite: "AES256-SHA256" 7116} 7117let proxyOptions: socket.ProxyOptions = { 7118 type : 1, 7119 address: socks5Server, 7120 username: "xxx", 7121 password: "xxx" 7122} 7123let tlsConnectOptions: socket.TLSConnectOptions = { 7124 address: twoWayNetAddr, 7125 secureOptions: twoWaySecureOptions, 7126 ALPNProtocols: ["spdy/1", "http/1.1"], 7127 proxy: proxyOptions, 7128} 7129 7130tlsTwoWay.connect(tlsConnectOptions).then(() => { 7131 console.log("connect successfully"); 7132}).catch((err: BusinessError) => { 7133 console.error("connect failed " + JSON.stringify(err)); 7134}); 7135 7136let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证 7137tlsOneWay.bind(bindAddr, (err: BusinessError) => { 7138 if (err) { 7139 console.error('bind fail'); 7140 return; 7141 } 7142 console.log('bind success'); 7143}); 7144let oneWayNetAddr: socket.NetAddress = { 7145 address: '192.168.xx.xxx', 7146 port: 8080 7147} 7148let oneWaySecureOptions: socket.TLSSecureOptions = { 7149 ca: ["xxxx", "xxxx"], 7150 cipherSuite: "AES256-SHA256" 7151} 7152let proxyOptions: socket.ProxyOptions = { 7153 type : 1, 7154 address: socks5Server, 7155 username: "xxx", 7156 password: "xxx" 7157} 7158let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 7159 address: oneWayNetAddr, 7160 secureOptions: oneWaySecureOptions, 7161 proxy: proxyOptions, 7162} 7163tlsOneWay.connect(tlsOneWayConnectOptions).then(() => { 7164 console.log("connect successfully"); 7165}).catch((err: BusinessError) => { 7166 console.error("connect failed " + JSON.stringify(err)); 7167}); 7168``` 7169 7170### getRemoteAddress<sup>9+</sup> 7171 7172getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 7173 7174在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 7175 7176**系统能力**:SystemCapability.Communication.NetStack 7177 7178**参数:** 7179 7180| 参数名 | 类型 | 必填 | 说明 | 7181| -------- | ------------------------------------------------- | ---- | ---------- | 7182| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 7183 7184**错误码:** 7185 7186| 错误码ID | 错误信息 | 7187| ------- | ----------------------------- | 7188| 2303188 | Socket operation on non-socket.| 7189| 2300002 | System internal error. | 7190 7191**示例:** 7192 7193```ts 7194import { socket } from '@kit.NetworkKit'; 7195import { BusinessError } from '@kit.BasicServicesKit'; 7196 7197let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7198tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 7199 if (err) { 7200 console.error('getRemoteAddress fail'); 7201 return; 7202 } 7203 console.log('getRemoteAddress success:' + JSON.stringify(data)); 7204}); 7205``` 7206 7207### getRemoteAddress<sup>9+</sup> 7208 7209getRemoteAddress(): Promise\<NetAddress\> 7210 7211在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 7212 7213**系统能力**:SystemCapability.Communication.NetStack 7214 7215**返回值:** 7216 7217| 类型 | 说明 | 7218| ------------------------------------------ | ------------------------------------------ | 7219| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 7220 7221**错误码:** 7222 7223| 错误码ID | 错误信息 | 7224| ------- | ------------------------------ | 7225| 2303188 | Socket operation on non-socket.| 7226| 2300002 | System internal error. | 7227 7228**示例:** 7229 7230```ts 7231import { socket } from '@kit.NetworkKit'; 7232import { BusinessError } from '@kit.BasicServicesKit'; 7233 7234let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7235tls.getRemoteAddress().then(() => { 7236 console.log('getRemoteAddress success'); 7237}).catch((err: BusinessError) => { 7238 console.error('getRemoteAddress fail'); 7239}); 7240``` 7241 7242### getCertificate<sup>9+</sup> 7243 7244getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 7245 7246在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。 7247 7248**系统能力**:SystemCapability.Communication.NetStack 7249 7250**参数:** 7251 7252| 参数名 | 类型 | 必填 | 说明 | 7253| -------- | ----------------------------------------| ---- | ---------------| 7254| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。| 7255 7256**错误码:** 7257 7258| 错误码ID | 错误信息 | 7259| ------- | ------------------------------ | 7260| 2303501 | SSL is null. | 7261| 2303504 | An error occurred when verifying the X.509 certificate.| 7262| 2300002 | System internal error. | 7263 7264**示例:** 7265 7266```ts 7267import { socket } from '@kit.NetworkKit'; 7268import { BusinessError } from '@kit.BasicServicesKit'; 7269 7270let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7271tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 7272 if (err) { 7273 console.error("getCertificate callback error = " + err); 7274 } else { 7275 console.log("getCertificate callback = " + data); 7276 } 7277}); 7278``` 7279 7280### getCertificate<sup>9+</sup> 7281 7282getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 7283 7284在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。 7285 7286**系统能力**:SystemCapability.Communication.NetStack 7287 7288**返回值:** 7289 7290| 类型 | 说明 | 7291| -------------- | -------------------- | 7292| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 7293 7294**错误码:** 7295 7296| 错误码ID | 错误信息 | 7297| ------- | ------------------------------ | 7298| 2303501 | SSL is null. | 7299| 2303504 | An error occurred when verifying the X.509 certificate.| 7300| 2300002 | System internal error. | 7301 7302**示例:** 7303 7304```ts 7305import { socket } from '@kit.NetworkKit'; 7306import { BusinessError } from '@kit.BasicServicesKit'; 7307import { util } from '@kit.ArkTS'; 7308 7309let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7310tls.getCertificate().then((data: socket.X509CertRawData) => { 7311 const decoder = util.TextDecoder.create(); 7312 const str = decoder.decodeToString(data.data); 7313 console.log("getCertificate: " + str); 7314}).catch((err: BusinessError) => { 7315 console.error("failed" + err); 7316}); 7317``` 7318 7319### getRemoteCertificate<sup>9+</sup> 7320 7321getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 7322 7323在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。 7324 7325**系统能力**:SystemCapability.Communication.NetStack 7326 7327**参数:** 7328 7329| 参数名 | 类型 | 必填 | 说明 | 7330| -------- | ----------------------------------------| ---- | ---------------| 7331| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 | 7332 7333**错误码:** 7334 7335| 错误码ID | 错误信息 | 7336| ------- | ------------------------------ | 7337| 2303501 | SSL is null. | 7338| 2300002 | System internal error. | 7339 7340**示例:** 7341 7342```ts 7343import { socket } from '@kit.NetworkKit'; 7344import { BusinessError } from '@kit.BasicServicesKit'; 7345import { util } from '@kit.ArkTS'; 7346 7347let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7348tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 7349 if (err) { 7350 console.error("getRemoteCertificate callback error = " + err); 7351 } else { 7352 const decoder = util.TextDecoder.create(); 7353 const str = decoder.decodeToString(data.data); 7354 console.log("getRemoteCertificate callback = " + str); 7355 } 7356}); 7357``` 7358 7359### getRemoteCertificate<sup>9+</sup> 7360 7361getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 7362 7363在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。 7364 7365**系统能力**:SystemCapability.Communication.NetStack 7366 7367**返回值:** 7368 7369| 类型 | 说明 | 7370| -------------- | -------------------- | 7371| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 | 7372 7373**错误码:** 7374 7375| 错误码ID | 错误信息 | 7376| ------- | ------------------------------ | 7377| 2303501 | SSL is null. | 7378| 2300002 | System internal error. | 7379 7380**示例:** 7381 7382```ts 7383import { socket } from '@kit.NetworkKit'; 7384import { BusinessError } from '@kit.BasicServicesKit'; 7385import { util } from '@kit.ArkTS'; 7386 7387let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7388tls.getRemoteCertificate().then((data: socket.X509CertRawData) => { 7389 const decoder = util.TextDecoder.create(); 7390 const str = decoder.decodeToString(data.data); 7391 console.log("getRemoteCertificate:" + str); 7392}).catch((err: BusinessError) => { 7393 console.error("failed" + err); 7394}); 7395``` 7396 7397### getProtocol<sup>9+</sup> 7398 7399getProtocol(callback: AsyncCallback\<string\>): void 7400 7401在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 7402 7403**系统能力**:SystemCapability.Communication.NetStack 7404 7405**参数:** 7406 7407| 参数名 | 类型 | 必填 | 说明 | 7408| -------- | ----------------------------------------| ---- | ---------------| 7409| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。| 7410 7411**错误码:** 7412 7413| 错误码ID | 错误信息 | 7414| ------- | ----------------------------- | 7415| 2303501 | SSL is null. | 7416| 2303505 | An error occurred in the TLS system call. | 7417| 2300002 | System internal error. | 7418 7419**示例:** 7420 7421```ts 7422import { socket } from '@kit.NetworkKit'; 7423import { BusinessError } from '@kit.BasicServicesKit'; 7424 7425let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7426tls.getProtocol((err: BusinessError, data: string) => { 7427 if (err) { 7428 console.error("getProtocol callback error = " + err); 7429 } else { 7430 console.log("getProtocol callback = " + data); 7431 } 7432}); 7433``` 7434 7435### getProtocol<sup>9+</sup> 7436 7437getProtocol():Promise\<string\> 7438 7439在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 7440 7441**系统能力**:SystemCapability.Communication.NetStack 7442 7443**返回值:** 7444 7445| 类型 | 说明 | 7446| -------------- | -------------------- | 7447| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 7448 7449**错误码:** 7450 7451| 错误码ID | 错误信息 | 7452| ------- | ------------------------------ | 7453| 2303501 | SSL is null. | 7454| 2303505 | An error occurred in the TLS system call. | 7455| 2300002 | System internal error. | 7456 7457**示例:** 7458 7459```ts 7460import { socket } from '@kit.NetworkKit'; 7461import { BusinessError } from '@kit.BasicServicesKit'; 7462 7463let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7464tls.getProtocol().then((data: string) => { 7465 console.log(data); 7466}).catch((err: BusinessError) => { 7467 console.error("failed" + err); 7468}); 7469``` 7470 7471### getCipherSuite<sup>9+</sup> 7472 7473getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 7474 7475在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 7476 7477**系统能力**:SystemCapability.Communication.NetStack 7478 7479**参数:** 7480 7481| 参数名 | 类型 | 必填 | 说明 | 7482| -------- | ----------------------------------------| ---- | ---------------| 7483| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 7484 7485**错误码:** 7486 7487| 错误码ID | 错误信息 | 7488| ------- | ------------------------------ | 7489| 2303501 | SSL is null. | 7490| 2303502 | An error occurred when reading data on the TLS socket.| 7491| 2303505 | An error occurred in the TLS system call. | 7492| 2300002 | System internal error. | 7493 7494**示例:** 7495 7496```ts 7497import { socket } from '@kit.NetworkKit'; 7498import { BusinessError } from '@kit.BasicServicesKit'; 7499 7500let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7501tls.getCipherSuite((err: BusinessError, data: Array<string>) => { 7502 if (err) { 7503 console.error("getCipherSuite callback error = " + err); 7504 } else { 7505 console.log("getCipherSuite callback = " + data); 7506 } 7507}); 7508``` 7509 7510### getCipherSuite<sup>9+</sup> 7511 7512getCipherSuite(): Promise\<Array\<string\>\> 7513 7514在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 7515 7516**系统能力**:SystemCapability.Communication.NetStack 7517 7518**返回值:** 7519 7520| 类型 | 说明 | 7521| ---------------------- | --------------------- | 7522| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 7523 7524**错误码:** 7525 7526| 错误码ID | 错误信息 | 7527| ------- | ------------------------------ | 7528| 2303501 | SSL is null. | 7529| 2303502 | An error occurred when reading data on the TLS socket.| 7530| 2303505 | An error occurred in the TLS system call. | 7531| 2300002 | System internal error. | 7532 7533**示例:** 7534 7535```ts 7536import { socket } from '@kit.NetworkKit'; 7537import { BusinessError } from '@kit.BasicServicesKit'; 7538 7539let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7540tls.getCipherSuite().then((data: Array<string>) => { 7541 console.log('getCipherSuite success:' + JSON.stringify(data)); 7542}).catch((err: BusinessError) => { 7543 console.error("failed" + err); 7544}); 7545``` 7546 7547### getSignatureAlgorithms<sup>9+</sup> 7548 7549getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 7550 7551在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。 7552 7553**系统能力**:SystemCapability.Communication.NetStack 7554 7555**参数:** 7556 7557| 参数名 | 类型 | 必填 | 说明 | 7558| -------- | -------------------------------------| ---- | ---------------| 7559| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 7560 7561**错误码:** 7562 7563| 错误码ID | 错误信息 | 7564| ------- | ------------------------------ | 7565| 2303501 | SSL is null. | 7566| 2300002 | System internal error. | 7567 7568**示例:** 7569 7570```ts 7571import { socket } from '@kit.NetworkKit'; 7572import { BusinessError } from '@kit.BasicServicesKit'; 7573 7574let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7575tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 7576 if (err) { 7577 console.error("getSignatureAlgorithms callback error = " + err); 7578 } else { 7579 console.log("getSignatureAlgorithms callback = " + data); 7580 } 7581}); 7582``` 7583 7584### getSignatureAlgorithms<sup>9+</sup> 7585 7586getSignatureAlgorithms(): Promise\<Array\<string\>\> 7587 7588在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。 7589 7590**系统能力**:SystemCapability.Communication.NetStack 7591 7592**返回值:** 7593 7594| 类型 | 说明 | 7595| ---------------------- | -------------------- | 7596| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 7597 7598**错误码:** 7599 7600| 错误码ID | 错误信息 | 7601| ------- | ------------------------------ | 7602| 2303501 | SSL is null. | 7603| 2300002 | System internal error. | 7604 7605**示例:** 7606 7607```ts 7608import { socket } from '@kit.NetworkKit'; 7609import { BusinessError } from '@kit.BasicServicesKit'; 7610 7611let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7612tls.getSignatureAlgorithms().then((data: Array<string>) => { 7613 console.log("getSignatureAlgorithms success" + data); 7614}).catch((err: BusinessError) => { 7615 console.error("failed" + err); 7616}); 7617``` 7618 7619### getLocalAddress<sup>12+</sup> 7620 7621getLocalAddress(): Promise\<NetAddress\> 7622 7623获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。 7624 7625> **说明:** 7626> 在TLSSocketServer通信连接成功之后,才可调用此方法。 7627 7628**系统能力**:SystemCapability.Communication.NetStack 7629 7630**返回值:** 7631 7632| 类型 | 说明 | 7633| -------------- | --------------------------------------------------- | 7634| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 7635 7636**错误码:** 7637 7638| 错误码ID | 错误信息 | 7639| -------- | ------------------------------------------- | 7640| 2300002 | System internal error. | 7641| 2301009 | Bad file descriptor. | 7642| 2303188 | Socket operation on non-socket. | 7643 7644**示例:** 7645 7646```ts 7647import { socket } from '@kit.NetworkKit'; 7648import { BusinessError } from '@kit.BasicServicesKit'; 7649 7650let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7651tls.getLocalAddress().then((localAddress: socket.NetAddress) => { 7652 console.info("Get success: " + JSON.stringify(localAddress)); 7653}).catch((err: BusinessError) => { 7654 console.error("Get failed, error: " + JSON.stringify(err)); 7655}) 7656``` 7657 7658### getSocketFd<sup>16+</sup> 7659 7660getSocketFd(): Promise\<number\> 7661 7662获取TLSSocket的文件描述符。使用Promise异步回调。 7663 7664> **说明:** 7665> 7666> bind方法调用成功后,才可调用此方法。 7667 7668**系统能力**:SystemCapability.Communication.NetStack 7669 7670**返回值:** 7671 7672| 类型 | 说明 | 7673| ----------------------------------------------- | ----------------------------------------- | 7674| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 7675 7676**示例:** 7677 7678```ts 7679import { socket } from '@kit.NetworkKit'; 7680import { BusinessError } from '@kit.BasicServicesKit'; 7681let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7682let bindAddr: socket.NetAddress = { 7683 address: '192.168.xx.xxx', 7684 port: 8080 7685} 7686tls.bind(bindAddr, (err: BusinessError) => { 7687 if (err) { 7688 console.error('bind fail'); 7689 return; 7690 } 7691 console.log('bind success'); 7692}); 7693tls.getSocketFd().then((data: number) => { 7694 console.info("tls socket fd: " + data); 7695}) 7696``` 7697 7698### send<sup>9+</sup> 7699 7700send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 7701 7702在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。 7703 7704**系统能力**:SystemCapability.Communication.NetStack 7705 7706**参数:** 7707 7708| 参数名 | 类型 | 必填 | 说明 | 7709| -------- | -----------------------------| ---- | ---------------| 7710| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 7711| callback | AsyncCallback\<void\> | 是 | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 | 7712 7713**错误码:** 7714 7715| 错误码ID | 错误信息 | 7716| ------- | -------------------------------------------- | 7717| 401 | Parameter error. | 7718| 2303501 | SSL is null. | 7719| 2303503 | An error occurred when writing data on the TLS socket.| 7720| 2303505 | An error occurred in the TLS system call. | 7721| 2303506 | Failed to close the TLS connection. | 7722| 2300002 | System internal error. | 7723 7724**示例:** 7725 7726```ts 7727import { socket } from '@kit.NetworkKit'; 7728import { BusinessError } from '@kit.BasicServicesKit'; 7729 7730let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7731tls.send("xxxx", (err: BusinessError) => { 7732 if (err) { 7733 console.error("send callback error = " + err); 7734 } else { 7735 console.log("send success"); 7736 } 7737}); 7738``` 7739 7740### send<sup>9+</sup> 7741 7742send(data: string \| ArrayBuffer): Promise\<void\> 7743 7744在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 7745 7746**系统能力**:SystemCapability.Communication.NetStack 7747 7748**参数:** 7749 7750| 参数名 | 类型 | 必填 | 说明 | 7751| -------- | -----------------------------| ---- | ---------------| 7752| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 7753 7754**错误码:** 7755 7756| 错误码ID | 错误信息 | 7757| ------- | -------------------------------------------- | 7758| 401 | Parameter error. | 7759| 2303501 | SSL is null. | 7760| 2303503 | An error occurred when writing data on the TLS socket.| 7761| 2303505 | An error occurred in the TLS system call. | 7762| 2303506 | Failed to close the TLS connection. | 7763| 2300002 | System internal error. | 7764 7765**返回值:** 7766 7767| 类型 | 说明 | 7768| -------------- | -------------------- | 7769| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 | 7770 7771**示例:** 7772 7773```ts 7774import { socket } from '@kit.NetworkKit'; 7775import { BusinessError } from '@kit.BasicServicesKit'; 7776 7777let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7778tls.send("xxxx").then(() => { 7779 console.log("send success"); 7780}).catch((err: BusinessError) => { 7781 console.error("failed" + err); 7782}); 7783``` 7784 7785### close<sup>9+</sup> 7786 7787close(callback: AsyncCallback\<void\>): void 7788 7789在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。 7790 7791**系统能力**:SystemCapability.Communication.NetStack 7792 7793**参数:** 7794 7795| 参数名 | 类型 | 必填 | 说明 | 7796| -------- | -----------------------------| ---- | ---------------| 7797| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 | 7798 7799**错误码:** 7800 7801| 错误码ID | 错误信息 | 7802| ------- | -------------------------------------------- | 7803| 401 | Parameter error. | 7804| 2303501 | SSL is null. | 7805| 2303505 | An error occurred in the TLS system call. | 7806| 2303506 | Failed to close the TLS connection. | 7807| 2300002 | System internal error. | 7808 7809**示例:** 7810 7811```ts 7812import { socket } from '@kit.NetworkKit'; 7813import { BusinessError } from '@kit.BasicServicesKit'; 7814 7815let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7816tls.close((err: BusinessError) => { 7817 if (err) { 7818 console.error("close callback error = " + err); 7819 } else { 7820 console.log("close success"); 7821 } 7822}); 7823``` 7824 7825### close<sup>9+</sup> 7826 7827close(): Promise\<void\> 7828 7829在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。 7830 7831**系统能力**:SystemCapability.Communication.NetStack 7832 7833**返回值:** 7834 7835| 类型 | 说明 | 7836| -------------- | -------------------- | 7837| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 | 7838 7839**错误码:** 7840 7841| 错误码ID | 错误信息 | 7842| ------- | -------------------------------------------- | 7843| 401 | Parameter error. | 7844| 2303501 | SSL is null. | 7845| 2303505 | An error occurred in the TLS system call. | 7846| 2303506 | Failed to close the TLS connection. | 7847| 2300002 | System internal error. | 7848 7849**示例:** 7850 7851```ts 7852import { socket } from '@kit.NetworkKit'; 7853import { BusinessError } from '@kit.BasicServicesKit'; 7854 7855let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7856tls.close().then(() => { 7857 console.log("close success"); 7858}).catch((err: BusinessError) => { 7859 console.error("failed" + err); 7860}); 7861``` 7862 7863## TLSConnectOptions<sup>9+</sup> 7864 7865TLS连接的操作。 7866 7867**系统能力**:SystemCapability.Communication.NetStack 7868 7869| 名称 | 类型 | 必填 | 说明 | 7870| -------------- | ------------------------------------- | --- |-------------- | 7871| address | [NetAddress](#netaddress) | 是 | 网关地址。 | 7872| secureOptions | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。| 7873| ALPNProtocols | Array\<string\> | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。 | 7874| skipRemoteValidation<sup>12+</sup> | boolean | 否 | 是否跳过对服务端进行证书认证,默认为false。true:跳过对服务端进行证书认证;false:不跳过对服务端进行证书认证。 | 7875| proxy<sup>18+</sup> | [ProxyOptions](#proxyoptions18) | 否 | 使用的代理信息,默认不使用代理。 | 7876 7877## TLSSecureOptions<sup>9+</sup> 7878 7879TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。 7880 7881**系统能力**:SystemCapability.Communication.NetStack 7882 7883| 名称 | 类型 | 必填 | 说明 | 7884| --------------------- | ------------------------------------------------------ | --- |----------------------------------- | 7885| ca | string \| Array\<string\> | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书<sup>12+</sup>。 | 7886| cert | string | 否 | 本地客户端的数字证书。 | 7887| key | string | 否 | 本地数字证书的私钥。 | 7888| password | string | 否 | 读取私钥的密码。 | 7889| protocols | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。 | 7890| useRemoteCipherPrefer | boolean | 否 | 优先使用对等方的密码套件。true:优先使用对等方的密码套件;false:不优先使用对等方的密码套件。 | 7891| signatureAlgorithms | string | 否 | 通信过程中的签名算法,默认为"" 。 | 7892| cipherSuite | string | 否 | 通信过程中的加密套件,默认为"" 。 | 7893| isBidirectionalAuthentication<sup>12+</sup> | boolean | 否 | 用于设置双向认证,默认为false。true:设置双向认证;false:不设置双向认证。 | 7894 7895## Protocol<sup>9+</sup> 7896 7897TLS通信的协议版本。 7898 7899**系统能力**:SystemCapability.Communication.NetStack 7900 7901| 名称 | 值 | 说明 | 7902| --------- | --------- |------------------ | 7903| TLSv12 | "TLSv1.2" | 使用TLSv1.2协议通信。 | 7904| TLSv13 | "TLSv1.3" | 使用TLSv1.3协议通信。 | 7905 7906## X509CertRawData<sup>9+</sup> 7907 7908type X509CertRawData = cert.EncodingBlob 7909 7910存储证书的数据。 7911 7912**系统能力**:SystemCapability.Communication.NetStack 7913 7914| 类型 | 说明 | 7915| ---------------- | --------------------------- | 7916| cert.EncodingBlob | 提供证书编码blob类型。 | 7917 7918## socket.constructTLSSocketServerInstance<sup>10+</sup> 7919 7920constructTLSSocketServerInstance(): TLSSocketServer 7921 7922创建并返回一个TLSSocketServer对象。 7923 7924**系统能力**:SystemCapability.Communication.NetStack 7925 7926**返回值:** 7927 7928| 类型 | 说明 | 7929| ------------------------------------ | ---------------------------- | 7930| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 | 7931 7932**示例:** 7933 7934```ts 7935import { socket } from '@kit.NetworkKit'; 7936import { BusinessError } from '@kit.BasicServicesKit'; 7937 7938let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7939``` 7940 7941## TLSSocketServer<sup>10+</sup> 7942 7943TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。 7944 7945### listen<sup>10+</sup> 7946 7947listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 7948 7949绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。 7950 7951**注意:**IP地址设置为0.0.0.0时,可以监听本机所有地址。 7952 7953**需要权限**:ohos.permission.INTERNET 7954 7955**系统能力**:SystemCapability.Communication.NetStack 7956 7957**参数:** 7958 7959| 参数名 | 类型 | 必填 | 说明 | 7960| -------- | ---------------------------------------- | ---- | ------------------------------------------------ | 7961| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocketServer连接所需要的参数。 | 7962| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 7963 7964**错误码:** 7965 7966| 错误码ID | 错误信息 | 7967| -------- | ------------------------------------------- | 7968| 401 | Parameter error. | 7969| 201 | Permission denied. | 7970| 2300002 | System internal error. | 7971| 2303109 | Bad file number. | 7972| 2303111 | Resource temporarily unavailable. Try again.| 7973| 2303198 | Address already in use. | 7974| 2303199 | Cannot assign requested address. | 7975| 2303501 | SSL is null. | 7976| 2303502 | An error occurred when reading data on the TLS socket.| 7977| 2303503 | An error occurred when writing data on the TLS socket.| 7978| 2303505 | An error occurred in the TLS system call. | 7979| 2303506 | Failed to close the TLS connection. | 7980 7981**示例:** 7982 7983```ts 7984import { socket } from '@kit.NetworkKit'; 7985import { BusinessError } from '@kit.BasicServicesKit'; 7986 7987let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7988let netAddress: socket.NetAddress = { 7989 address: '192.168.xx.xxx', 7990 port: 8080 7991} 7992let tlsSecureOptions: socket.TLSSecureOptions = { 7993 key: "xxxx", 7994 cert: "xxxx", 7995 ca: ["xxxx"], 7996 password: "xxxx", 7997 protocols: socket.Protocol.TLSv12, 7998 useRemoteCipherPrefer: true, 7999 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8000 cipherSuite: "AES256-SHA256" 8001} 8002let tlsConnectOptions: socket.TLSConnectOptions = { 8003 address: netAddress, 8004 secureOptions: tlsSecureOptions, 8005 ALPNProtocols: ["spdy/1", "http/1.1"], 8006 skipRemoteValidation: false 8007} 8008tlsServer.listen(tlsConnectOptions, (err: BusinessError) => { 8009 console.error("listen callback error" + err); 8010}); 8011``` 8012 8013### listen<sup>10+</sup> 8014 8015listen(options: TLSConnectOptions): Promise\<void\> 8016 8017绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。 8018 8019**需要权限**:ohos.permission.INTERNET 8020 8021**系统能力**:SystemCapability.Communication.NetStack 8022 8023**参数:** 8024 8025| 参数名 | 类型 | 必填 | 说明 | 8026| ------- | ---------------------------------------- | ---- | ------------------ | 8027| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。 | 8028 8029**返回值:** 8030 8031| 类型 | 说明 | 8032| --------------- | --------------------------------------------------------- | 8033| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 8034 8035**错误码:** 8036 8037| 错误码ID | 错误信息 | 8038| -------- | ------------------------------------------- | 8039| 401 | Parameter error. | 8040| 201 | Permission denied. | 8041| 2300002 | System internal error. | 8042| 2303109 | Bad file number. | 8043| 2303111 | Resource temporarily unavailable. Try again.| 8044| 2303198 | Address already in use. | 8045| 2303199 | Cannot assign requested address. | 8046| 2303501 | SSL is null. | 8047| 2303502 | An error occurred when reading data on the TLS socket.| 8048| 2303503 | An error occurred when writing data on the TLS socket.| 8049| 2303505 | An error occurred in the TLS system call. | 8050| 2303506 | Failed to close the TLS connection. | 8051 8052**示例:** 8053 8054```ts 8055import { socket } from '@kit.NetworkKit'; 8056import { BusinessError } from '@kit.BasicServicesKit'; 8057 8058let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8059let netAddress: socket.NetAddress = { 8060 address: '192.168.xx.xxx', 8061 port: 8080 8062} 8063let tlsSecureOptions: socket.TLSSecureOptions = { 8064 key: "xxxx", 8065 cert: "xxxx", 8066 ca: ["xxxx"], 8067 password: "xxxx", 8068 protocols: socket.Protocol.TLSv12, 8069 useRemoteCipherPrefer: true, 8070 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8071 cipherSuite: "AES256-SHA256" 8072} 8073let tlsConnectOptions: socket.TLSConnectOptions = { 8074 address: netAddress, 8075 secureOptions: tlsSecureOptions, 8076 ALPNProtocols: ["spdy/1", "http/1.1"], 8077 skipRemoteValidation: false 8078} 8079tlsServer.listen(tlsConnectOptions).then(() => { 8080 console.log("listen callback success"); 8081}).catch((err: BusinessError) => { 8082 console.error("failed: " + JSON.stringify(err)); 8083}); 8084``` 8085 8086### getState<sup>10+</sup> 8087 8088getState(callback: AsyncCallback\<SocketStateBase\>): void 8089 8090在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。 8091 8092> **说明:** 8093> listen方法调用成功后,才可调用此方法。 8094 8095**系统能力**:SystemCapability.Communication.NetStack 8096 8097**参数:** 8098 8099| 参数名 | 类型 | 必填 | 说明 | 8100| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 8101| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 | 8102 8103**错误码:** 8104 8105| 错误码ID | 错误信息 | 8106| -------- | ------------------------------- | 8107| 401 | Parameter error. | 8108| 2303188 | Socket operation on non-socket. | 8109| 2300002 | System internal error. | 8110 8111**示例:** 8112 8113```ts 8114import { socket } from '@kit.NetworkKit'; 8115import { BusinessError } from '@kit.BasicServicesKit'; 8116 8117let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8118let netAddress: socket.NetAddress = { 8119 address: '192.168.xx.xxx', 8120 port: 8080 8121} 8122let tlsSecureOptions: socket.TLSSecureOptions = { 8123 key: "xxxx", 8124 cert: "xxxx", 8125 ca: ["xxxx"], 8126 password: "xxxx", 8127 protocols: socket.Protocol.TLSv12, 8128 useRemoteCipherPrefer: true, 8129 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8130 cipherSuite: "AES256-SHA256" 8131} 8132let tlsConnectOptions: socket.TLSConnectOptions = { 8133 address: netAddress, 8134 secureOptions: tlsSecureOptions, 8135 ALPNProtocols: ["spdy/1", "http/1.1"] 8136} 8137tlsServer.listen(tlsConnectOptions).then(() => { 8138 console.log("listen callback success"); 8139}).catch((err: BusinessError) => { 8140 console.error("failed: " + JSON.stringify(err)); 8141}); 8142tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 8143 if (err) { 8144 console.error('getState fail'); 8145 return; 8146 } 8147 console.log('getState success:' + JSON.stringify(data)); 8148}); 8149``` 8150 8151### getState<sup>10+</sup> 8152 8153getState(): Promise\<SocketStateBase\> 8154 8155在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。 8156 8157> **说明:** 8158> listen方法调用成功后,才可调用此方法。 8159 8160**系统能力**:SystemCapability.Communication.NetStack 8161 8162**返回值:** 8163 8164| 类型 | 说明 | 8165| --------------------------------------------- | ----------------------------------------------------------- | 8166| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 | 8167 8168**错误码:** 8169 8170| 错误码ID | 错误信息 | 8171| -------- | ------------------------------- | 8172| 2303188 | Socket operation on non-socket. | 8173| 2300002 | System internal error. | 8174 8175**示例:** 8176 8177```ts 8178import { socket } from '@kit.NetworkKit'; 8179import { BusinessError } from '@kit.BasicServicesKit'; 8180 8181let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8182let netAddress: socket.NetAddress = { 8183 address: '192.168.xx.xxx', 8184 port: 8080 8185} 8186let tlsSecureOptions: socket.TLSSecureOptions = { 8187 key: "xxxx", 8188 cert: "xxxx", 8189 ca: ["xxxx"], 8190 password: "xxxx", 8191 protocols: socket.Protocol.TLSv12, 8192 useRemoteCipherPrefer: true, 8193 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8194 cipherSuite: "AES256-SHA256" 8195} 8196let tlsConnectOptions: socket.TLSConnectOptions = { 8197 address: netAddress, 8198 secureOptions: tlsSecureOptions, 8199 ALPNProtocols: ["spdy/1", "http/1.1"] 8200} 8201tlsServer.listen(tlsConnectOptions).then(() => { 8202 console.log("listen callback success"); 8203}).catch((err: BusinessError) => { 8204 console.error("failed: " + JSON.stringify(err)); 8205}); 8206tlsServer.getState().then(() => { 8207 console.log('getState success'); 8208}).catch((err: BusinessError) => { 8209 console.error('getState fail'); 8210}); 8211``` 8212 8213### setExtraOptions<sup>10+</sup> 8214 8215setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 8216 8217在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。 8218 8219> **说明:** 8220> listen方法调用成功后,才可调用此方法。 8221 8222**系统能力**:SystemCapability.Communication.NetStack 8223 8224**参数:** 8225 8226| 参数名 | 类型 | 必填 | 说明 | 8227| -------- | ------------------------------------ | ---- | ------------------------------------------------ | 8228| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 8229| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 8230 8231**错误码:** 8232 8233| 错误码ID | 错误信息 | 8234| -------- | ------------------------------- | 8235| 401 | Parameter error. | 8236| 2303188 | Socket operation on non-socket. | 8237| 2300002 | System internal error. | 8238 8239**示例:** 8240 8241```ts 8242import { socket } from '@kit.NetworkKit'; 8243import { BusinessError } from '@kit.BasicServicesKit'; 8244 8245let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8246let netAddress: socket.NetAddress = { 8247 address: '192.168.xx.xxx', 8248 port: 8080 8249} 8250let tlsSecureOptions: socket.TLSSecureOptions = { 8251 key: "xxxx", 8252 cert: "xxxx", 8253 ca: ["xxxx"], 8254 password: "xxxx", 8255 protocols: socket.Protocol.TLSv12, 8256 useRemoteCipherPrefer: true, 8257 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8258 cipherSuite: "AES256-SHA256" 8259} 8260let tlsConnectOptions: socket.TLSConnectOptions = { 8261 address: netAddress, 8262 secureOptions: tlsSecureOptions, 8263 ALPNProtocols: ["spdy/1", "http/1.1"] 8264} 8265tlsServer.listen(tlsConnectOptions).then(() => { 8266 console.log("listen callback success"); 8267}).catch((err: BusinessError) => { 8268 console.error("failed: " + JSON.stringify(err)); 8269}); 8270 8271interface SocketLinger { 8272 on: boolean; 8273 linger: number; 8274} 8275 8276let tcpExtraOptions: socket.TCPExtraOptions = { 8277 keepAlive: true, 8278 OOBInline: true, 8279 TCPNoDelay: true, 8280 socketLinger: { on: true, linger: 10 } as SocketLinger, 8281 receiveBufferSize: 8192, 8282 sendBufferSize: 8192, 8283 reuseAddress: true, 8284 socketTimeout: 3000 8285} 8286tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 8287 if (err) { 8288 console.error('setExtraOptions fail'); 8289 return; 8290 } 8291 console.log('setExtraOptions success'); 8292}); 8293``` 8294 8295### setExtraOptions<sup>10+</sup> 8296 8297setExtraOptions(options: TCPExtraOptions): Promise\<void\> 8298 8299在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。 8300 8301> **说明:** 8302> listen方法调用成功后,才可调用此方法。 8303 8304**系统能力**:SystemCapability.Communication.NetStack 8305 8306**参数:** 8307 8308| 参数名 | 类型 | 必填 | 说明 | 8309| ------- | ------------------------------------ | ---- | ------------------------------- | 8310| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 8311 8312**返回值:** 8313 8314| 类型 | 说明 | 8315| -------------- | -------------------------------------------------------- | 8316| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 8317 8318**错误码:** 8319 8320| 错误码ID | 错误信息 | 8321| -------- | ------------------------------- | 8322| 401 | Parameter error. | 8323| 2303188 | Socket operation on non-socket. | 8324| 2300002 | System internal error. | 8325 8326**示例:** 8327 8328```ts 8329import { socket } from '@kit.NetworkKit'; 8330import { BusinessError } from '@kit.BasicServicesKit'; 8331 8332let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8333let netAddress: socket.NetAddress = { 8334 address: '192.168.xx.xxx', 8335 port: 8080 8336} 8337let tlsSecureOptions: socket.TLSSecureOptions = { 8338 key: "xxxx", 8339 cert: "xxxx", 8340 ca: ["xxxx"], 8341 password: "xxxx", 8342 protocols: socket.Protocol.TLSv12, 8343 useRemoteCipherPrefer: true, 8344 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8345 cipherSuite: "AES256-SHA256" 8346} 8347let tlsConnectOptions: socket.TLSConnectOptions = { 8348 address: netAddress, 8349 secureOptions: tlsSecureOptions, 8350 ALPNProtocols: ["spdy/1", "http/1.1"] 8351} 8352tlsServer.listen(tlsConnectOptions).then(() => { 8353 console.log("listen callback success"); 8354}).catch((err: BusinessError) => { 8355 console.error("failed: " + JSON.stringify(err)); 8356}); 8357 8358interface SocketLinger { 8359 on: boolean; 8360 linger: number; 8361} 8362 8363let tcpExtraOptions: socket.TCPExtraOptions = { 8364 keepAlive: true, 8365 OOBInline: true, 8366 TCPNoDelay: true, 8367 socketLinger: { on: true, linger: 10 } as SocketLinger, 8368 receiveBufferSize: 8192, 8369 sendBufferSize: 8192, 8370 reuseAddress: true, 8371 socketTimeout: 3000 8372} 8373tlsServer.setExtraOptions(tcpExtraOptions).then(() => { 8374 console.log('setExtraOptions success'); 8375}).catch((err: BusinessError) => { 8376 console.error('setExtraOptions fail'); 8377}); 8378``` 8379 8380### getCertificate<sup>10+</sup> 8381 8382getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 8383 8384在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。 8385 8386> **说明:** 8387> listen方法调用成功后,才可调用此方法。 8388 8389**系统能力**:SystemCapability.Communication.NetStack 8390 8391**参数:** 8392 8393| 参数名 | 类型 | 必填 | 说明 | 8394| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- | 8395| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 | 8396 8397**错误码:** 8398 8399| 错误码ID | 错误信息 | 8400| -------- | ---------------------- | 8401| 401 | Parameter error. | 8402| 2303501 | SSL is null. | 8403| 2303504 | An error occurred when verifying the X.509 certificate. | 8404| 2300002 | System internal error. | 8405 8406**示例:** 8407 8408```ts 8409import { socket } from '@kit.NetworkKit'; 8410import { BusinessError } from '@kit.BasicServicesKit'; 8411import { util } from '@kit.ArkTS'; 8412 8413let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8414let netAddress: socket.NetAddress = { 8415 address: '192.168.xx.xxx', 8416 port: 8080 8417} 8418let tlsSecureOptions: socket.TLSSecureOptions = { 8419 key: "xxxx", 8420 cert: "xxxx", 8421 ca: ["xxxx"], 8422 password: "xxxx", 8423 protocols: socket.Protocol.TLSv12, 8424 useRemoteCipherPrefer: true, 8425 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8426 cipherSuite: "AES256-SHA256" 8427} 8428let tlsConnectOptions: socket.TLSConnectOptions = { 8429 address: netAddress, 8430 secureOptions: tlsSecureOptions, 8431 ALPNProtocols: ["spdy/1", "http/1.1"] 8432} 8433tlsServer.listen(tlsConnectOptions).then(() => { 8434 console.log("listen callback success"); 8435}).catch((err: BusinessError) => { 8436 console.error("failed: " + JSON.stringify(err)); 8437}); 8438tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 8439 if (err) { 8440 console.error("getCertificate callback error = " + err); 8441 } else { 8442 const decoder = util.TextDecoder.create(); 8443 const str = decoder.decodeToString(data.data); 8444 console.log("getCertificate callback: " + str); 8445 } 8446}); 8447``` 8448 8449### getCertificate<sup>10+</sup> 8450 8451getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 8452 8453在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。 8454 8455> **说明:** 8456> listen方法调用成功后,才可调用此方法。 8457 8458**系统能力**:SystemCapability.Communication.NetStack 8459 8460**返回值:** 8461 8462| 类型 | 说明 | 8463| ----------------------------------------------- | ------------------------------------------------------------ | 8464| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 8465 8466**错误码:** 8467 8468| 错误码ID | 错误信息 | 8469| -------- | ---------------------- | 8470| 2303501 | SSL is null. | 8471| 2303504 | An error occurred when verifying the X.509 certificate. | 8472| 2300002 | System internal error. | 8473 8474**示例:** 8475 8476```ts 8477import { socket } from '@kit.NetworkKit'; 8478import { BusinessError } from '@kit.BasicServicesKit'; 8479import { util } from '@kit.ArkTS'; 8480 8481let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8482let netAddress: socket.NetAddress = { 8483 address: '192.168.xx.xxx', 8484 port: 8080 8485} 8486let tlsSecureOptions: socket.TLSSecureOptions = { 8487 key: "xxxx", 8488 cert: "xxxx", 8489 ca: ["xxxx"], 8490 password: "xxxx", 8491 protocols: socket.Protocol.TLSv12, 8492 useRemoteCipherPrefer: true, 8493 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8494 cipherSuite: "AES256-SHA256" 8495} 8496let tlsConnectOptions: socket.TLSConnectOptions = { 8497 address: netAddress, 8498 secureOptions: tlsSecureOptions, 8499 ALPNProtocols: ["spdy/1", "http/1.1"] 8500} 8501tlsServer.listen(tlsConnectOptions).then(() => { 8502 console.log("listen callback success"); 8503}).catch((err: BusinessError) => { 8504 console.error("failed: " + JSON.stringify(err)); 8505}); 8506tlsServer.getCertificate().then((data: socket.X509CertRawData) => { 8507 const decoder = util.TextDecoder.create(); 8508 const str = decoder.decodeToString(data.data); 8509 console.log("getCertificate: " + str); 8510}).catch((err: BusinessError) => { 8511 console.error("failed" + err); 8512}); 8513``` 8514 8515### getProtocol<sup>10+</sup> 8516 8517getProtocol(callback: AsyncCallback\<string\>): void 8518 8519在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 8520 8521> **说明:** 8522> listen方法调用成功后,才可调用此方法。 8523 8524**系统能力**:SystemCapability.Communication.NetStack 8525 8526**参数:** 8527 8528| 参数名 | 类型 | 必填 | 说明 | 8529| -------- | ----------------------- | ---- | ---------------------------------------------------- | 8530| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。 | 8531 8532**错误码:** 8533 8534| 错误码ID | 错误信息 | 8535| -------- | -------------------------------------- | 8536| 401 | Parameter error. | 8537| 2303501 | SSL is null. | 8538| 2303505 | An error occurred in the TLS system call. | 8539| 2300002 | System internal error. | 8540 8541**示例:** 8542 8543```ts 8544import { socket } from '@kit.NetworkKit'; 8545import { BusinessError } from '@kit.BasicServicesKit'; 8546 8547let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8548let netAddress: socket.NetAddress = { 8549 address: '192.168.xx.xxx', 8550 port: 8080 8551} 8552let tlsSecureOptions: socket.TLSSecureOptions = { 8553 key: "xxxx", 8554 cert: "xxxx", 8555 ca: ["xxxx"], 8556 password: "xxxx", 8557 protocols: socket.Protocol.TLSv12, 8558 useRemoteCipherPrefer: true, 8559 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8560 cipherSuite: "AES256-SHA256" 8561} 8562let tlsConnectOptions: socket.TLSConnectOptions = { 8563 address: netAddress, 8564 secureOptions: tlsSecureOptions, 8565 ALPNProtocols: ["spdy/1", "http/1.1"] 8566} 8567tlsServer.listen(tlsConnectOptions).then(() => { 8568 console.log("listen callback success"); 8569}).catch((err: BusinessError) => { 8570 console.error("failed: " + JSON.stringify(err)); 8571}); 8572tlsServer.getProtocol((err: BusinessError, data: string) => { 8573 if (err) { 8574 console.error("getProtocol callback error = " + err); 8575 } else { 8576 console.log("getProtocol callback = " + data); 8577 } 8578}); 8579``` 8580 8581### getProtocol<sup>10+</sup> 8582 8583getProtocol():Promise\<string\> 8584 8585在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 8586 8587> **说明:** 8588> listen方法调用成功后,才可调用此方法。 8589 8590**系统能力**:SystemCapability.Communication.NetStack 8591 8592**返回值:** 8593 8594| 类型 | 说明 | 8595| ----------------- | ------------------------------------------------------- | 8596| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 8597 8598**错误码:** 8599 8600| 错误码ID | 错误信息 | 8601| -------- | -------------------------------------- | 8602| 2303501 | SSL is null. | 8603| 2303505 | An error occurred in the TLS system call. | 8604| 2300002 | System internal error. | 8605 8606**示例:** 8607 8608```ts 8609import { socket } from '@kit.NetworkKit'; 8610import { BusinessError } from '@kit.BasicServicesKit'; 8611 8612let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8613let netAddress: socket.NetAddress = { 8614 address: '192.168.xx.xxx', 8615 port: 8080 8616} 8617let tlsSecureOptions: socket.TLSSecureOptions = { 8618 key: "xxxx", 8619 cert: "xxxx", 8620 ca: ["xxxx"], 8621 password: "xxxx", 8622 protocols: socket.Protocol.TLSv12, 8623 useRemoteCipherPrefer: true, 8624 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8625 cipherSuite: "AES256-SHA256" 8626} 8627let tlsConnectOptions: socket.TLSConnectOptions = { 8628 address: netAddress, 8629 secureOptions: tlsSecureOptions, 8630 ALPNProtocols: ["spdy/1", "http/1.1"] 8631} 8632tlsServer.listen(tlsConnectOptions).then(() => { 8633 console.log("listen callback success"); 8634}).catch((err: BusinessError) => { 8635 console.error("failed: " + JSON.stringify(err)); 8636}); 8637tlsServer.getProtocol().then((data: string) => { 8638 console.log(data); 8639}).catch((err: BusinessError) => { 8640 console.error("failed" + err); 8641}); 8642``` 8643 8644### getLocalAddress<sup>12+</sup> 8645 8646getLocalAddress(): Promise\<NetAddress\> 8647 8648获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。 8649 8650> **说明:** 8651> 在TLSSocketServer通信连接成功之后,才可调用此方法。 8652 8653**系统能力**:SystemCapability.Communication.NetStack 8654 8655**返回值:** 8656 8657| 类型 | 说明 | 8658| -------------- | --------------------------------------------------- | 8659| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 8660 8661**错误码:** 8662 8663| 错误码ID | 错误信息 | 8664| -------- | ------------------------------------------- | 8665| 2300002 | System internal error. | 8666| 2301009 | Bad file descriptor. | 8667| 2303188 | Socket operation on non-socket. | 8668 8669**示例:** 8670 8671```ts 8672import { socket } from '@kit.NetworkKit'; 8673import { BusinessError } from '@kit.BasicServicesKit'; 8674 8675let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8676tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 8677 console.info("Get success: " + JSON.stringify(localAddress)); 8678}).catch((err: BusinessError) => { 8679 console.error("Get failed, error: " + JSON.stringify(err)); 8680}) 8681``` 8682 8683### on('connect')<sup>10+</sup> 8684 8685on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void 8686 8687订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 8688 8689> **说明:** 8690> listen方法调用成功后,才可调用此方法。 8691 8692**系统能力**:SystemCapability.Communication.NetStack 8693 8694**参数:** 8695 8696| 参数名 | 类型 | 必填 | 说明 | 8697| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 8698| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 8699| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 8700 8701**错误码:** 8702 8703| 错误码ID | 错误信息 | 8704| -------- | ---------------- | 8705| 401 | Parameter error. | 8706 8707**示例:** 8708 8709```ts 8710import { socket } from '@kit.NetworkKit'; 8711import { BusinessError } from '@kit.BasicServicesKit'; 8712 8713let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8714let netAddress: socket.NetAddress = { 8715 address: '192.168.xx.xxx', 8716 port: 8080 8717} 8718let tlsSecureOptions: socket.TLSSecureOptions = { 8719 key: "xxxx", 8720 cert: "xxxx", 8721 ca: ["xxxx"], 8722 password: "xxxx", 8723 protocols: socket.Protocol.TLSv12, 8724 useRemoteCipherPrefer: true, 8725 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8726 cipherSuite: "AES256-SHA256" 8727} 8728let tlsConnectOptions: socket.TLSConnectOptions = { 8729 address: netAddress, 8730 secureOptions: tlsSecureOptions, 8731 ALPNProtocols: ["spdy/1", "http/1.1"] 8732} 8733tlsServer.listen(tlsConnectOptions).then(() => { 8734 console.log("listen callback success"); 8735}).catch((err: BusinessError) => { 8736 console.error("failed: " + JSON.stringify(err)); 8737}); 8738tlsServer.on('connect', (data: socket.TLSSocketConnection) => { 8739 console.log(JSON.stringify(data)) 8740}); 8741``` 8742 8743### off('connect')<sup>10+</sup> 8744 8745off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void 8746 8747取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 8748 8749> **说明:** 8750> listen方法调用成功后,才可调用此方法。 8751> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8752 8753**系统能力**:SystemCapability.Communication.NetStack 8754 8755**参数:** 8756 8757| 参数名 | 类型 | 必填 | 说明 | 8758| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 8759| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 8760| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 8761 8762**错误码:** 8763 8764| 错误码ID | 错误信息 | 8765| -------- | ---------------- | 8766| 401 | Parameter error. | 8767 8768**示例:** 8769 8770```ts 8771import { socket } from '@kit.NetworkKit'; 8772import { BusinessError } from '@kit.BasicServicesKit'; 8773 8774let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8775let netAddress: socket.NetAddress = { 8776 address: '192.168.xx.xxx', 8777 port: 8080 8778} 8779let tlsSecureOptions: socket.TLSSecureOptions = { 8780 key: "xxxx", 8781 cert: "xxxx", 8782 ca: ["xxxx"], 8783 password: "xxxx", 8784 protocols: socket.Protocol.TLSv12, 8785 useRemoteCipherPrefer: true, 8786 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8787 cipherSuite: "AES256-SHA256" 8788} 8789let tlsConnectOptions: socket.TLSConnectOptions = { 8790 address: netAddress, 8791 secureOptions: tlsSecureOptions, 8792 ALPNProtocols: ["spdy/1", "http/1.1"] 8793} 8794tlsServer.listen(tlsConnectOptions).then(() => { 8795 console.log("listen callback success"); 8796}).catch((err: BusinessError) => { 8797 console.error("failed: " + JSON.stringify(err)); 8798}); 8799 8800let callback = (data: socket.TLSSocketConnection) => { 8801 console.log('on connect message: ' + JSON.stringify(data)); 8802} 8803tlsServer.on('connect', callback); 8804// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8805tlsServer.off('connect', callback); 8806tlsServer.off('connect'); 8807``` 8808 8809### on('error')<sup>10+</sup> 8810 8811on(type: 'error', callback: ErrorCallback): void 8812 8813订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 8814 8815> **说明:** 8816> listen方法调用成功后,才可调用此方法。 8817 8818**系统能力**:SystemCapability.Communication.NetStack 8819 8820**参数:** 8821 8822| 参数名 | 类型 | 必填 | 说明 | 8823| -------- | ------------- | ---- | ------------------------------------ | 8824| type | string | 是 | 订阅的事件类型。'error':error事件。 | 8825| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 8826 8827**错误码:** 8828 8829| 错误码ID | 错误信息 | 8830| -------- | ---------------- | 8831| 401 | Parameter error. | 8832 8833**示例:** 8834 8835```ts 8836import { socket } from '@kit.NetworkKit'; 8837import { BusinessError } from '@kit.BasicServicesKit'; 8838 8839let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8840let netAddress: socket.NetAddress = { 8841 address: '192.168.xx.xxx', 8842 port: 8080 8843} 8844let tlsSecureOptions: socket.TLSSecureOptions = { 8845 key: "xxxx", 8846 cert: "xxxx", 8847 ca: ["xxxx"], 8848 password: "xxxx", 8849 protocols: socket.Protocol.TLSv12, 8850 useRemoteCipherPrefer: true, 8851 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8852 cipherSuite: "AES256-SHA256" 8853} 8854let tlsConnectOptions: socket.TLSConnectOptions = { 8855 address: netAddress, 8856 secureOptions: tlsSecureOptions, 8857 ALPNProtocols: ["spdy/1", "http/1.1"] 8858} 8859tlsServer.listen(tlsConnectOptions).then(() => { 8860 console.log("listen callback success"); 8861}).catch((err: BusinessError) => { 8862 console.error("failed: " + JSON.stringify(err)); 8863}); 8864tlsServer.on('error', (err: BusinessError) => { 8865 console.error("on error, err:" + JSON.stringify(err)) 8866}); 8867``` 8868 8869### off('error')<sup>10+</sup> 8870 8871off(type: 'error', callback?: ErrorCallback): void 8872 8873取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 8874 8875> **说明:** 8876> listen方法调用成功后,才可调用此方法。 8877> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8878 8879**系统能力**:SystemCapability.Communication.NetStack 8880 8881**参数:** 8882 8883| 参数名 | 类型 | 必填 | 说明 | 8884| -------- | ------------- | ---- | ------------------------------------ | 8885| type | string | 是 | 订阅的事件类型。'error':error事件。 | 8886| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 8887 8888**错误码:** 8889 8890| 错误码ID | 错误信息 | 8891| -------- | ---------------- | 8892| 401 | Parameter error. | 8893 8894**示例:** 8895 8896```ts 8897import { socket } from '@kit.NetworkKit'; 8898import { BusinessError } from '@kit.BasicServicesKit'; 8899 8900let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8901let netAddress: socket.NetAddress = { 8902 address: '192.168.xx.xxx', 8903 port: 8080 8904} 8905let tlsSecureOptions: socket.TLSSecureOptions = { 8906 key: "xxxx", 8907 cert: "xxxx", 8908 ca: ["xxxx"], 8909 password: "xxxx", 8910 protocols: socket.Protocol.TLSv12, 8911 useRemoteCipherPrefer: true, 8912 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8913 cipherSuite: "AES256-SHA256" 8914} 8915let tlsConnectOptions: socket.TLSConnectOptions = { 8916 address: netAddress, 8917 secureOptions: tlsSecureOptions, 8918 ALPNProtocols: ["spdy/1", "http/1.1"] 8919} 8920tlsServer.listen(tlsConnectOptions).then(() => { 8921 console.log("listen callback success"); 8922}).catch((err: BusinessError) => { 8923 console.error("failed: " + JSON.stringify(err)); 8924}); 8925 8926let callback = (err: BusinessError) => { 8927 console.error("on error, err:" + JSON.stringify(err)); 8928} 8929tlsServer.on('error', callback); 8930// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8931tlsServer.off('error', callback); 8932tlsServer.off('error'); 8933``` 8934 8935### close<sup>20+</sup> 8936 8937close(): Promise\<void\> 8938 8939TLSSocketServer停止监听并释放通过[listen](#listen10-2)方法绑定的端口。使用Promise异步回调。 8940 8941> **说明:** 8942> 该方法不会关闭已有连接。如需关闭,请调用[TLSSocketConnection](#tlssocketconnection10)的[close](#close10-2)方法。 8943 8944**需要权限**:ohos.permission.INTERNET 8945 8946**系统能力**:SystemCapability.Communication.NetStack 8947 8948**返回值:** 8949 8950| 类型 | 说明 | 8951| -------------- | --------------------------------------------------------- | 8952| Promise\<void\> | Promise对象,无返回结果。 | 8953 8954**错误码:** 8955 8956以下错误码的详细介绍请参见[Socket错误码](errorcode-net-socket.md)和[通用错误码](../errorcode-universal.md)。 8957 8958| 错误码ID | 错误信息 | 8959| -------- | ------------------------------------------- | 8960| 201 | Permission denied. | 8961| 2300002 | System internal error. | 8962 8963**示例:** 8964 8965```ts 8966import { socket } from '@kit.NetworkKit'; 8967import { BusinessError } from '@kit.BasicServicesKit'; 8968 8969let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8970let netAddress: socket.NetAddress = { 8971 address: '192.168.xx.xxx', 8972 port: 8080 8973} 8974let tlsSecureOptions: socket.TLSSecureOptions = { 8975 key: "xxxx", 8976 cert: "xxxx", 8977 ca: ["xxxx"], 8978 password: "xxxx", 8979 protocols: socket.Protocol.TLSv12, 8980 useRemoteCipherPrefer: true, 8981 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8982 cipherSuite: "AES256-SHA256" 8983} 8984let tlsConnectOptions: socket.TLSConnectOptions = { 8985 address: netAddress, 8986 secureOptions: tlsSecureOptions, 8987 ALPNProtocols: ["spdy/1", "http/1.1"] 8988} 8989tlsServer.on('connect', (connection: socket.TLSSocketConnection) => { 8990 console.info("connection clientId: " + connection.clientId); 8991 // 逻辑处理 8992 tlsServer.close(); // 停止监听 8993 connection.close(); // 关闭当前连接 8994}); 8995tlsServer.listen(tlsConnectOptions).then(() => { 8996 console.info("listen callback success"); 8997}).catch((err: BusinessError) => { 8998 console.error("listen failed: " + err.code); 8999}); 9000``` 9001 9002## TLSSocketConnection<sup>10+</sup> 9003 9004TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。 9005 9006> **说明:** 9007> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。 9008 9009**系统能力**:SystemCapability.Communication.NetStack 9010 9011### 属性 9012 9013| 名称 | 类型 | 必填 | 说明 | 9014| -------- | ------ | ---- | ------------------------------------- | 9015| clientId | number | 是 | 客户端与TLSSocketServer建立连接的id。 | 9016 9017### send<sup>10+</sup> 9018 9019send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 9020 9021在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。 9022 9023**系统能力**:SystemCapability.Communication.NetStack 9024 9025**参数:** 9026 9027| 参数名 | 类型 | 必填 | 说明 | 9028| -------- | --------------------- | ---- | ------------------------------------------------ | 9029| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 9030| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 9031 9032**错误码:** 9033 9034| 错误码ID | 错误信息 | 9035| -------- | -------------------------------------- | 9036| 401 | Parameter error. | 9037| 2303501 | SSL is null. | 9038| 2303503 | An error occurred when writing data on the TLS socket.| 9039| 2303505 | An error occurred in the TLS system call.| 9040| 2303506 | Failed to close the TLS connection. | 9041| 2300002 | System internal error. | 9042 9043**示例:** 9044 9045```ts 9046import { socket } from '@kit.NetworkKit'; 9047import { BusinessError } from '@kit.BasicServicesKit'; 9048 9049let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9050let netAddress: socket.NetAddress = { 9051 address: '192.168.xx.xxx', 9052 port: 8080 9053} 9054let tlsSecureOptions: socket.TLSSecureOptions = { 9055 key: "xxxx", 9056 cert: "xxxx", 9057 ca: ["xxxx"], 9058 password: "xxxx", 9059 protocols: socket.Protocol.TLSv12, 9060 useRemoteCipherPrefer: true, 9061 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9062 cipherSuite: "AES256-SHA256" 9063} 9064let tlsConnectOptions: socket.TLSConnectOptions = { 9065 address: netAddress, 9066 secureOptions: tlsSecureOptions, 9067 ALPNProtocols: ["spdy/1", "http/1.1"] 9068} 9069tlsServer.listen(tlsConnectOptions).then(() => { 9070 console.log("listen callback success"); 9071}).catch((err: BusinessError) => { 9072 console.error("failed" + err); 9073}); 9074 9075tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9076 client.send('Hello, client!', (err: BusinessError) => { 9077 if (err) { 9078 console.error('send fail'); 9079 return; 9080 } 9081 console.log('send success'); 9082 }); 9083}); 9084``` 9085 9086### send<sup>10+</sup> 9087 9088send(data: string \| ArrayBuffer): Promise\<void\> 9089 9090在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 9091 9092**系统能力**:SystemCapability.Communication.NetStack 9093 9094**参数:** 9095 9096| 参数名 | 类型 | 必填 | 说明 | 9097| ------ | ------ | ---- | ------------------------------------- | 9098| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 9099 9100**返回值:** 9101 9102| 类型 | 说明 | 9103| --------------- | --------------------------------------------------------- | 9104| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 9105 9106**错误码:** 9107 9108| 错误码ID | 错误信息 | 9109| -------- | -------------------------------------- | 9110| 401 | Parameter error. | 9111| 2303501 | SSL is null. | 9112| 2303503 | An error occurred when writing data on the TLS socket.| 9113| 2303505 | An error occurred in the TLS system call.| 9114| 2303506 | Failed to close the TLS connection. | 9115| 2300002 | System internal error. | 9116 9117**示例:** 9118 9119```ts 9120import { socket } from '@kit.NetworkKit'; 9121import { BusinessError } from '@kit.BasicServicesKit'; 9122 9123let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9124let netAddress: socket.NetAddress = { 9125 address: '192.168.xx.xxx', 9126 port: 8080 9127} 9128let tlsSecureOptions: socket.TLSSecureOptions = { 9129 key: "xxxx", 9130 cert: "xxxx", 9131 ca: ["xxxx"], 9132 password: "xxxx", 9133 protocols: socket.Protocol.TLSv12, 9134 useRemoteCipherPrefer: true, 9135 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9136 cipherSuite: "AES256-SHA256" 9137} 9138let tlsConnectOptions: socket.TLSConnectOptions = { 9139 address: netAddress, 9140 secureOptions: tlsSecureOptions, 9141 ALPNProtocols: ["spdy/1", "http/1.1"] 9142} 9143tlsServer.listen(tlsConnectOptions).then(() => { 9144 console.log("listen callback success"); 9145}).catch((err: BusinessError) => { 9146 console.error("failed" + err); 9147}); 9148 9149tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9150 client.send('Hello, client!').then(() => { 9151 console.log('send success'); 9152 }).catch((err: BusinessError) => { 9153 console.error('send fail'); 9154 }); 9155}); 9156``` 9157 9158### close<sup>10+</sup> 9159 9160close(callback: AsyncCallback\<void\>): void 9161 9162在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。 9163 9164**系统能力**:SystemCapability.Communication.NetStack 9165 9166**参数:** 9167 9168| 参数名 | 类型 | 必填 | 说明 | 9169| -------- | --------------------- | ---- | ------------------------------------------------ | 9170| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 9171 9172**错误码:** 9173 9174| 错误码ID | 错误信息 | 9175| -------- | -------------------------------------- | 9176| 401 | Parameter error. | 9177| 2303501 | SSL is null. | 9178| 2303505 | An error occurred in the TLS system call. | 9179| 2303506 | Failed to close the TLS connection. | 9180| 2300002 | System internal error. | 9181 9182**示例:** 9183 9184```ts 9185import { socket } from '@kit.NetworkKit'; 9186import { BusinessError } from '@kit.BasicServicesKit'; 9187 9188let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9189let netAddress: socket.NetAddress = { 9190 address: '192.168.xx.xxx', 9191 port: 8080 9192} 9193let tlsSecureOptions: socket.TLSSecureOptions = { 9194 key: "xxxx", 9195 cert: "xxxx", 9196 ca: ["xxxx"], 9197 password: "xxxx", 9198 protocols: socket.Protocol.TLSv12, 9199 useRemoteCipherPrefer: true, 9200 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9201 cipherSuite: "AES256-SHA256" 9202} 9203let tlsConnectOptions: socket.TLSConnectOptions = { 9204 address: netAddress, 9205 secureOptions: tlsSecureOptions, 9206 ALPNProtocols: ["spdy/1", "http/1.1"] 9207} 9208tlsServer.listen(tlsConnectOptions).then(() => { 9209 console.log("listen callback success"); 9210}).catch((err: BusinessError) => { 9211 console.error("failed" + err); 9212}); 9213 9214tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9215 client.close((err: BusinessError) => { 9216 if (err) { 9217 console.error('close fail'); 9218 return; 9219 } 9220 console.log('close success'); 9221 }); 9222}); 9223``` 9224 9225### close<sup>10+</sup> 9226 9227close(): Promise\<void\> 9228 9229在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。 9230 9231**系统能力**:SystemCapability.Communication.NetStack 9232 9233**返回值:** 9234 9235| 类型 | 说明 | 9236| --------------- | --------------------------------------------------------- | 9237| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 | 9238 9239**错误码:** 9240 9241| 错误码ID | 错误信息 | 9242| -------- | -------------------------------------- | 9243| 2303501 | SSL is null. | 9244| 2303505 | An error occurred in the TLS system call. | 9245| 2303506 | Failed to close the TLS connection. | 9246| 2300002 | System internal error. | 9247 9248**示例:** 9249 9250```ts 9251import { socket } from '@kit.NetworkKit'; 9252import { BusinessError } from '@kit.BasicServicesKit'; 9253 9254let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9255let netAddress: socket.NetAddress = { 9256 address: '192.168.xx.xxx', 9257 port: 8080 9258} 9259let tlsSecureOptions: socket.TLSSecureOptions = { 9260 key: "xxxx", 9261 cert: "xxxx", 9262 ca: ["xxxx"], 9263 password: "xxxx", 9264 protocols: socket.Protocol.TLSv12, 9265 useRemoteCipherPrefer: true, 9266 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9267 cipherSuite: "AES256-SHA256" 9268} 9269let tlsConnectOptions: socket.TLSConnectOptions = { 9270 address: netAddress, 9271 secureOptions: tlsSecureOptions, 9272 ALPNProtocols: ["spdy/1", "http/1.1"] 9273} 9274tlsServer.listen(tlsConnectOptions).then(() => { 9275 console.log("listen callback success"); 9276}).catch((err: BusinessError) => { 9277 console.error("failed" + err); 9278}); 9279tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9280 client.close().then(() => { 9281 console.log('close success'); 9282 }).catch((err: BusinessError) => { 9283 console.error('close fail'); 9284 }); 9285}); 9286``` 9287 9288### getRemoteAddress<sup>10+</sup> 9289 9290getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 9291 9292在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 9293 9294**系统能力**:SystemCapability.Communication.NetStack 9295 9296**参数:** 9297 9298| 参数名 | 类型 | 必填 | 说明 | 9299| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ | 9300| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 9301 9302**错误码:** 9303 9304| 错误码ID | 错误信息 | 9305| -------- | ------------------------------- | 9306| 401 | Parameter error. | 9307| 2303188 | Socket operation on non-socket. | 9308| 2300002 | System internal error. | 9309 9310**示例:** 9311 9312```ts 9313import { socket } from '@kit.NetworkKit'; 9314import { BusinessError } from '@kit.BasicServicesKit'; 9315 9316let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9317let netAddress: socket.NetAddress = { 9318 address: '192.168.xx.xxx', 9319 port: 8080 9320} 9321let tlsSecureOptions: socket.TLSSecureOptions = { 9322 key: "xxxx", 9323 cert: "xxxx", 9324 ca: ["xxxx"], 9325 password: "xxxx", 9326 protocols: socket.Protocol.TLSv12, 9327 useRemoteCipherPrefer: true, 9328 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9329 cipherSuite: "AES256-SHA256" 9330} 9331let tlsConnectOptions: socket.TLSConnectOptions = { 9332 address: netAddress, 9333 secureOptions: tlsSecureOptions, 9334 ALPNProtocols: ["spdy/1", "http/1.1"] 9335} 9336tlsServer.listen(tlsConnectOptions).then(() => { 9337 console.log("listen callback success"); 9338}).catch((err: BusinessError) => { 9339 console.error("failed" + err); 9340}); 9341tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9342 client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 9343 if (err) { 9344 console.error('getRemoteAddress fail'); 9345 return; 9346 } 9347 console.log('getRemoteAddress success:' + JSON.stringify(data)); 9348 }); 9349}); 9350``` 9351 9352### getRemoteAddress<sup>10+</sup> 9353 9354getRemoteAddress(): Promise\<NetAddress\> 9355 9356在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 9357 9358**系统能力**:SystemCapability.Communication.NetStack 9359 9360**返回值:** 9361 9362| 类型 | 说明 | 9363| ----------------------------------- | ----------------------------------------------------------- | 9364| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 9365 9366**错误码:** 9367 9368| 错误码ID | 错误信息 | 9369| -------- | ------------------------------- | 9370| 2303188 | Socket operation on non-socket. | 9371| 2300002 | System internal error. | 9372 9373**示例:** 9374 9375```ts 9376import { socket } from '@kit.NetworkKit'; 9377import { BusinessError } from '@kit.BasicServicesKit'; 9378 9379let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9380let netAddress: socket.NetAddress = { 9381 address: '192.168.xx.xxx', 9382 port: 8080 9383} 9384let tlsSecureOptions: socket.TLSSecureOptions = { 9385 key: "xxxx", 9386 cert: "xxxx", 9387 ca: ["xxxx"], 9388 password: "xxxx", 9389 protocols: socket.Protocol.TLSv12, 9390 useRemoteCipherPrefer: true, 9391 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9392 cipherSuite: "AES256-SHA256" 9393} 9394let tlsConnectOptions: socket.TLSConnectOptions = { 9395 address: netAddress, 9396 secureOptions: tlsSecureOptions, 9397 ALPNProtocols: ["spdy/1", "http/1.1"] 9398} 9399tlsServer.listen(tlsConnectOptions).then(() => { 9400 console.log("listen callback success"); 9401}).catch((err: BusinessError) => { 9402 console.error("failed" + err); 9403}); 9404tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9405 client.getRemoteAddress().then((data: socket.NetAddress) => { 9406 console.log('getRemoteAddress success:' + JSON.stringify(data)); 9407 }).catch((err: BusinessError) => { 9408 console.error("failed" + err); 9409 }); 9410}); 9411``` 9412 9413### getRemoteCertificate<sup>10+</sup> 9414 9415getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 9416 9417在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。 9418 9419**系统能力**:SystemCapability.Communication.NetStack 9420 9421**参数:** 9422 9423| 参数名 | 类型 | 必填 | 说明 | 9424| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- | 9425| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回对端的证书。失败返回错误码、错误信息。 | 9426 9427**错误码:** 9428 9429| 错误码ID | 错误信息 | 9430| -------- | ---------------------- | 9431| 401 | Parameter error. | 9432| 2303501 | SSL is null. | 9433| 2300002 | System internal error. | 9434 9435**示例:** 9436 9437```ts 9438import { socket } from '@kit.NetworkKit'; 9439import { BusinessError } from '@kit.BasicServicesKit'; 9440import { util } from '@kit.ArkTS'; 9441 9442let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9443let netAddress: socket.NetAddress = { 9444 address: '192.168.xx.xxx', 9445 port: 8080 9446} 9447let tlsSecureOptions: socket.TLSSecureOptions = { 9448 key: "xxxx", 9449 cert: "xxxx", 9450 ca: ["xxxx"], 9451 password: "xxxx", 9452 protocols: socket.Protocol.TLSv12, 9453 useRemoteCipherPrefer: true, 9454 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9455 cipherSuite: "AES256-SHA256" 9456} 9457let tlsConnectOptions: socket.TLSConnectOptions = { 9458 address: netAddress, 9459 secureOptions: tlsSecureOptions, 9460 ALPNProtocols: ["spdy/1", "http/1.1"] 9461} 9462tlsServer.listen(tlsConnectOptions).then(() => { 9463 console.log("listen callback success"); 9464}).catch((err: BusinessError) => { 9465 console.error("failed" + err); 9466}); 9467tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9468 client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 9469 if (err) { 9470 console.error("getRemoteCertificate callback error: " + err); 9471 } else { 9472 const decoder = util.TextDecoder.create(); 9473 const str = decoder.decodeToString(data.data); 9474 console.log("getRemoteCertificate callback: " + str); 9475 } 9476 }); 9477}); 9478``` 9479 9480### getRemoteCertificate<sup>10+</sup> 9481 9482getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 9483 9484在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。 9485 9486**系统能力**:SystemCapability.Communication.NetStack 9487 9488**返回值:** 9489 9490| 类型 | 说明 | 9491| ----------------------------------------------- | ------------------------------------------------------------ | 9492| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 | 9493 9494**错误码:** 9495 9496| 错误码ID | 错误信息 | 9497| -------- | ---------------------- | 9498| 2303501 | SSL is null. | 9499| 2300002 | System internal error. | 9500 9501**示例:** 9502 9503```ts 9504import { socket } from '@kit.NetworkKit'; 9505import { BusinessError } from '@kit.BasicServicesKit'; 9506import { util } from '@kit.ArkTS'; 9507 9508let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9509let netAddress: socket.NetAddress = { 9510 address: '192.168.xx.xxx', 9511 port: 8080 9512} 9513let tlsSecureOptions: socket.TLSSecureOptions = { 9514 key: "xxxx", 9515 cert: "xxxx", 9516 ca: ["xxxx"], 9517 password: "xxxx", 9518 protocols: socket.Protocol.TLSv12, 9519 useRemoteCipherPrefer: true, 9520 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9521 cipherSuite: "AES256-SHA256" 9522} 9523let tlsConnectOptions: socket.TLSConnectOptions = { 9524 address: netAddress, 9525 secureOptions: tlsSecureOptions, 9526 ALPNProtocols: ["spdy/1", "http/1.1"] 9527} 9528tlsServer.listen(tlsConnectOptions).then(() => { 9529 console.log("listen callback success"); 9530}).catch((err: BusinessError) => { 9531 console.error("failed" + err); 9532}); 9533tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9534 client.getRemoteCertificate().then((data: socket.X509CertRawData) => { 9535 const decoder = util.TextDecoder.create(); 9536 const str = decoder.decodeToString(data.data); 9537 console.log("getRemoteCertificate success: " + str); 9538 }).catch((err: BusinessError) => { 9539 console.error("failed" + err); 9540 }); 9541}); 9542``` 9543 9544### getCipherSuite<sup>10+</sup> 9545 9546getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 9547 9548在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 9549 9550**系统能力**:SystemCapability.Communication.NetStack 9551 9552**参数:** 9553 9554| 参数名 | 类型 | 必填 | 说明 | 9555| -------- | -------------------------------- | ---- | ------------------------------------------------------------ | 9556| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 9557 9558**错误码:** 9559 9560| 错误码ID | 错误信息 | 9561| -------- | -------------------------------------- | 9562| 401 | Parameter error. | 9563| 2303501 | SSL is null. | 9564| 2303502 | An error occurred when reading data on the TLS socket.| 9565| 2303505 | An error occurred in the TLS system call.| 9566| 2300002 | System internal error. | 9567 9568**示例:** 9569 9570```ts 9571import { socket } from '@kit.NetworkKit'; 9572import { BusinessError } from '@kit.BasicServicesKit'; 9573 9574let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9575let netAddress: socket.NetAddress = { 9576 address: '192.168.xx.xxx', 9577 port: 8080 9578} 9579let tlsSecureOptions: socket.TLSSecureOptions = { 9580 key: "xxxx", 9581 cert: "xxxx", 9582 ca: ["xxxx"], 9583 password: "xxxx", 9584 protocols: socket.Protocol.TLSv12, 9585 useRemoteCipherPrefer: true, 9586 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9587 cipherSuite: "AES256-SHA256" 9588} 9589let tlsConnectOptions: socket.TLSConnectOptions = { 9590 address: netAddress, 9591 secureOptions: tlsSecureOptions, 9592 ALPNProtocols: ["spdy/1", "http/1.1"] 9593} 9594tlsServer.listen(tlsConnectOptions).then(() => { 9595 console.log("listen callback success"); 9596}).catch((err: BusinessError) => { 9597 console.error("failed" + err); 9598}); 9599tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9600 client.getCipherSuite((err: BusinessError, data: Array<string>) => { 9601 if (err) { 9602 console.error("getCipherSuite callback error = " + err); 9603 } else { 9604 console.log("getCipherSuite callback = " + data); 9605 } 9606 }); 9607}); 9608``` 9609 9610### getCipherSuite<sup>10+</sup> 9611 9612getCipherSuite(): Promise\<Array\<string\>\> 9613 9614在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 9615 9616**系统能力**:SystemCapability.Communication.NetStack 9617 9618**返回值:** 9619 9620| 类型 | 说明 | 9621| -------------------------- | ------------------------------------------------------------ | 9622| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 9623 9624**错误码:** 9625 9626| 错误码ID | 错误信息 | 9627| -------- | -------------------------------------- | 9628| 2303501 | SSL is null. | 9629| 2303502 | An error occurred when reading data on the TLS socket.| 9630| 2303505 | An error occurred in the TLS system call. | 9631| 2300002 | System internal error. | 9632 9633**示例:** 9634 9635```ts 9636import { socket } from '@kit.NetworkKit'; 9637import { BusinessError } from '@kit.BasicServicesKit'; 9638 9639let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9640let netAddress: socket.NetAddress = { 9641 address: '192.168.xx.xxx', 9642 port: 8080 9643} 9644let tlsSecureOptions: socket.TLSSecureOptions = { 9645 key: "xxxx", 9646 cert: "xxxx", 9647 ca: ["xxxx"], 9648 password: "xxxx", 9649 protocols: socket.Protocol.TLSv12, 9650 useRemoteCipherPrefer: true, 9651 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9652 cipherSuite: "AES256-SHA256" 9653} 9654let tlsConnectOptions: socket.TLSConnectOptions = { 9655 address: netAddress, 9656 secureOptions: tlsSecureOptions, 9657 ALPNProtocols: ["spdy/1", "http/1.1"] 9658} 9659tlsServer.listen(tlsConnectOptions).then(() => { 9660 console.log("listen callback success"); 9661}).catch((err: BusinessError) => { 9662 console.error("failed" + err); 9663}); 9664tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9665 client.getCipherSuite().then((data: Array<string>) => { 9666 console.log('getCipherSuite success:' + JSON.stringify(data)); 9667 }).catch((err: BusinessError) => { 9668 console.error("failed" + err); 9669 }); 9670}); 9671``` 9672 9673### getSignatureAlgorithms<sup>10+</sup> 9674 9675getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 9676 9677在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。 9678 9679**系统能力**:SystemCapability.Communication.NetStack 9680 9681**参数:** 9682 9683| 参数名 | 类型 | 必填 | 说明 | 9684| -------- | -------------------------------- | ---- | ---------------------------------- | 9685| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 9686 9687**错误码:** 9688 9689| 错误码ID | 错误信息 | 9690| -------- | ---------------------- | 9691| 401 | Parameter error. | 9692| 2303501 | SSL is null. | 9693| 2300002 | System internal error. | 9694 9695**示例:** 9696 9697```ts 9698import { socket } from '@kit.NetworkKit'; 9699import { BusinessError } from '@kit.BasicServicesKit'; 9700 9701let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9702let netAddress: socket.NetAddress = { 9703 address: '192.168.xx.xxx', 9704 port: 8080 9705} 9706let tlsSecureOptions: socket.TLSSecureOptions = { 9707 key: "xxxx", 9708 cert: "xxxx", 9709 ca: ["xxxx"], 9710 password: "xxxx", 9711 protocols: socket.Protocol.TLSv12, 9712 useRemoteCipherPrefer: true, 9713 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9714 cipherSuite: "AES256-SHA256" 9715} 9716let tlsConnectOptions: socket.TLSConnectOptions = { 9717 address: netAddress, 9718 secureOptions: tlsSecureOptions, 9719 ALPNProtocols: ["spdy/1", "http/1.1"] 9720} 9721tlsServer.listen(tlsConnectOptions).then(() => { 9722 console.log("listen callback success"); 9723}).catch((err: BusinessError) => { 9724 console.error("failed" + err); 9725}); 9726tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9727 client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 9728 if (err) { 9729 console.error("getSignatureAlgorithms callback error = " + err); 9730 } else { 9731 console.log("getSignatureAlgorithms callback = " + data); 9732 } 9733 }); 9734}); 9735``` 9736 9737### getSignatureAlgorithms<sup>10+</sup> 9738 9739getSignatureAlgorithms(): Promise\<Array\<string\>\> 9740 9741在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。 9742 9743**系统能力**:SystemCapability.Communication.NetStack 9744 9745**返回值:** 9746 9747| 类型 | 说明 | 9748| -------------------------- | --------------------------------------------- | 9749| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 9750 9751**错误码:** 9752 9753| 错误码ID | 错误信息 | 9754| -------- | ---------------------- | 9755| 2303501 | SSL is null. | 9756| 2300002 | System internal error. | 9757 9758**示例:** 9759 9760```ts 9761import { socket } from '@kit.NetworkKit'; 9762import { BusinessError } from '@kit.BasicServicesKit'; 9763 9764let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9765let netAddress: socket.NetAddress = { 9766 address: '192.168.xx.xxx', 9767 port: 8080 9768} 9769let tlsSecureOptions: socket.TLSSecureOptions = { 9770 key: "xxxx", 9771 cert: "xxxx", 9772 ca: ["xxxx"], 9773 password: "xxxx", 9774 protocols: socket.Protocol.TLSv12, 9775 useRemoteCipherPrefer: true, 9776 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9777 cipherSuite: "AES256-SHA256" 9778} 9779let tlsConnectOptions: socket.TLSConnectOptions = { 9780 address: netAddress, 9781 secureOptions: tlsSecureOptions, 9782 ALPNProtocols: ["spdy/1", "http/1.1"] 9783} 9784tlsServer.listen(tlsConnectOptions).then(() => { 9785 console.log("listen callback success"); 9786}).catch((err: BusinessError) => { 9787 console.error("failed" + err); 9788}); 9789tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9790 client.getSignatureAlgorithms().then((data: Array<string>) => { 9791 console.log("getSignatureAlgorithms success" + data); 9792 }).catch((err: BusinessError) => { 9793 console.error("failed" + err); 9794 }); 9795}); 9796``` 9797 9798### getLocalAddress<sup>12+</sup> 9799 9800getLocalAddress(): Promise\<NetAddress\> 9801 9802获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 9803 9804> **说明:** 9805> 在TLSSocketServer通信连接成功之后,才可调用此方法。 9806 9807**系统能力**:SystemCapability.Communication.NetStack 9808 9809**返回值:** 9810 9811| 类型 | 说明 | 9812| -------------- | --------------------------------------------------- | 9813| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 9814 9815**错误码:** 9816 9817| 错误码ID | 错误信息 | 9818| -------- | ------------------------------------------- | 9819| 2300002 | System internal error. | 9820| 2301009 | Bad file descriptor. | 9821| 2303188 | Socket operation on non-socket. | 9822 9823**示例:** 9824 9825```ts 9826import { socket } from '@kit.NetworkKit'; 9827import { BusinessError } from '@kit.BasicServicesKit'; 9828 9829let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9830let netAddress: socket.NetAddress = { 9831 address: '192.168.xx.xxx', 9832 port: 8080 9833} 9834let tlsSecureOptions: socket.TLSSecureOptions = { 9835 key: "xxxx", 9836 cert: "xxxx", 9837 ca: ["xxxx"], 9838 password: "xxxx", 9839 protocols: socket.Protocol.TLSv12, 9840 useRemoteCipherPrefer: true, 9841 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9842 cipherSuite: "AES256-SHA256" 9843} 9844let tlsConnectOptions: socket.TLSConnectOptions = { 9845 address: netAddress, 9846 secureOptions: tlsSecureOptions, 9847 ALPNProtocols: ["spdy/1", "http/1.1"] 9848} 9849tlsServer.listen(tlsConnectOptions).then(() => { 9850 console.info("listen callback success"); 9851}).catch((err: BusinessError) => { 9852 console.error("failed" + err); 9853}); 9854 9855tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9856 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 9857 console.info("Family IP Port: " + JSON.stringify(localAddress)); 9858 }).catch((err: BusinessError) => { 9859 console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err)); 9860 }) 9861}); 9862``` 9863 9864### on('message')<sup>10+</sup> 9865 9866on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 9867 9868订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 9869 9870**系统能力**:SystemCapability.Communication.NetStack 9871 9872**参数:** 9873 9874| 参数名 | 类型 | 必填 | 说明 | 9875| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 9876| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 9877| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 9878 9879**错误码:** 9880 9881| 错误码ID | 错误信息 | 9882| -------- | ---------------- | 9883| 401 | Parameter error. | 9884 9885**示例:** 9886 9887```ts 9888import { socket } from '@kit.NetworkKit'; 9889import { BusinessError } from '@kit.BasicServicesKit'; 9890 9891let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9892let netAddress: socket.NetAddress = { 9893 address: '192.168.xx.xxx', 9894 port: 8080 9895} 9896let tlsSecureOptions: socket.TLSSecureOptions = { 9897 key: "xxxx", 9898 cert: "xxxx", 9899 ca: ["xxxx"], 9900 password: "xxxx", 9901 protocols: socket.Protocol.TLSv12, 9902 useRemoteCipherPrefer: true, 9903 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9904 cipherSuite: "AES256-SHA256" 9905} 9906let tlsConnectOptions: socket.TLSConnectOptions = { 9907 address: netAddress, 9908 secureOptions: tlsSecureOptions, 9909 ALPNProtocols: ["spdy/1", "http/1.1"] 9910} 9911tlsServer.listen(tlsConnectOptions).then(() => { 9912 console.log("listen callback success"); 9913}).catch((err: BusinessError) => { 9914 console.error("failed" + err); 9915}); 9916 9917tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9918 client.on('message', (value: socket.SocketMessageInfo) => { 9919 let messageView = ''; 9920 for (let i: number = 0; i < value.message.byteLength; i++) { 9921 let uint8Array = new Uint8Array(value.message) 9922 let messages = uint8Array[i] 9923 let message = String.fromCharCode(messages); 9924 messageView += message; 9925 } 9926 console.log('on message message: ' + JSON.stringify(messageView)); 9927 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 9928 }); 9929}); 9930``` 9931 9932### off('message')<sup>10+</sup> 9933 9934off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 9935 9936取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 9937 9938**系统能力**:SystemCapability.Communication.NetStack 9939 9940**参数:** 9941 9942| 参数名 | 类型 | 必填 | 说明 | 9943| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 9944| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 9945| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 9946 9947**错误码:** 9948 9949| 错误码ID | 错误信息 | 9950| -------- | ---------------- | 9951| 401 | Parameter error. | 9952 9953**示例:** 9954 9955```ts 9956import { socket } from '@kit.NetworkKit'; 9957import { BusinessError } from '@kit.BasicServicesKit'; 9958 9959let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9960let netAddress: socket.NetAddress = { 9961 address: '192.168.xx.xxx', 9962 port: 8080 9963} 9964let tlsSecureOptions: socket.TLSSecureOptions = { 9965 key: "xxxx", 9966 cert: "xxxx", 9967 ca: ["xxxx"], 9968 password: "xxxx", 9969 protocols: socket.Protocol.TLSv12, 9970 useRemoteCipherPrefer: true, 9971 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9972 cipherSuite: "AES256-SHA256" 9973} 9974let tlsConnectOptions: socket.TLSConnectOptions = { 9975 address: netAddress, 9976 secureOptions: tlsSecureOptions, 9977 ALPNProtocols: ["spdy/1", "http/1.1"] 9978} 9979tlsServer.listen(tlsConnectOptions).then(() => { 9980 console.log("listen callback success"); 9981}).catch((err: BusinessError) => { 9982 console.error("failed" + err); 9983}); 9984 9985let callback = (value: socket.SocketMessageInfo) => { 9986 let messageView = ''; 9987 for (let i: number = 0; i < value.message.byteLength; i++) { 9988 let uint8Array = new Uint8Array(value.message) 9989 let messages = uint8Array[i] 9990 let message = String.fromCharCode(messages); 9991 messageView += message; 9992 } 9993 console.log('on message message: ' + JSON.stringify(messageView)); 9994 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 9995} 9996tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9997 client.on('message', callback); 9998 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9999 client.off('message', callback); 10000 client.off('message'); 10001}); 10002``` 10003 10004### on('close')<sup>10+</sup> 10005 10006on(type: 'close', callback: Callback\<void\>): void 10007 10008订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 10009 10010**系统能力**:SystemCapability.Communication.NetStack 10011 10012**参数:** 10013 10014| 参数名 | 类型 | 必填 | 说明 | 10015| -------- | ---------------- | ---- | ----------------------------------- | 10016| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 10017| callback | Callback\<void\> | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 10018 10019**错误码:** 10020 10021| 错误码ID | 错误信息 | 10022| -------- | ---------------- | 10023| 401 | Parameter error. | 10024 10025**示例:** 10026 10027```ts 10028import { socket } from '@kit.NetworkKit'; 10029import { BusinessError } from '@kit.BasicServicesKit'; 10030 10031let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 10032let netAddress: socket.NetAddress = { 10033 address: '192.168.xx.xxx', 10034 port: 8080 10035} 10036let tlsSecureOptions: socket.TLSSecureOptions = { 10037 key: "xxxx", 10038 cert: "xxxx", 10039 ca: ["xxxx"], 10040 password: "xxxx", 10041 protocols: socket.Protocol.TLSv12, 10042 useRemoteCipherPrefer: true, 10043 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 10044 cipherSuite: "AES256-SHA256" 10045} 10046let tlsConnectOptions: socket.TLSConnectOptions = { 10047 address: netAddress, 10048 secureOptions: tlsSecureOptions, 10049 ALPNProtocols: ["spdy/1", "http/1.1"] 10050} 10051tlsServer.listen(tlsConnectOptions).then(() => { 10052 console.log("listen callback success"); 10053}).catch((err: BusinessError) => { 10054 console.error("failed" + err); 10055}); 10056tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 10057 client.on('close', () => { 10058 console.log("on close success") 10059 }); 10060}); 10061``` 10062 10063### off('close')<sup>10+</sup> 10064 10065off(type: 'close', callback?: Callback\<void\>): void 10066 10067取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 10068 10069**系统能力**:SystemCapability.Communication.NetStack 10070 10071**参数:** 10072 10073| 参数名 | 类型 | 必填 | 说明 | 10074| -------- | ---------------- | ---- | ----------------------------------- | 10075| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 10076| callback | Callback\<void\> | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 10077 10078**错误码:** 10079 10080| 错误码ID | 错误信息 | 10081| -------- | ---------------- | 10082| 401 | Parameter error. | 10083 10084**示例:** 10085 10086```ts 10087import { socket } from '@kit.NetworkKit'; 10088import { BusinessError } from '@kit.BasicServicesKit'; 10089 10090let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 10091let netAddress: socket.NetAddress = { 10092 address: '192.168.xx.xxx', 10093 port: 8080 10094} 10095let tlsSecureOptions: socket.TLSSecureOptions = { 10096 key: "xxxx", 10097 cert: "xxxx", 10098 ca: ["xxxx"], 10099 password: "xxxx", 10100 protocols: socket.Protocol.TLSv12, 10101 useRemoteCipherPrefer: true, 10102 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 10103 cipherSuite: "AES256-SHA256" 10104} 10105let tlsConnectOptions: socket.TLSConnectOptions = { 10106 address: netAddress, 10107 secureOptions: tlsSecureOptions, 10108 ALPNProtocols: ["spdy/1", "http/1.1"] 10109} 10110tlsServer.listen(tlsConnectOptions).then(() => { 10111 console.log("listen callback success"); 10112}).catch((err: BusinessError) => { 10113 console.error("failed" + err); 10114}); 10115 10116let callback = () => { 10117 console.log("on close success"); 10118} 10119tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 10120 client.on('close', callback); 10121 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 10122 client.off('close', callback); 10123 client.off('close'); 10124}); 10125``` 10126 10127### on('error')<sup>10+</sup> 10128 10129on(type: 'error', callback: ErrorCallback): void 10130 10131订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 10132 10133**系统能力**:SystemCapability.Communication.NetStack 10134 10135**参数:** 10136 10137| 参数名 | 类型 | 必填 | 说明 | 10138| -------- | ------------- | ---- | ------------------------------------ | 10139| type | string | 是 | 订阅的事件类型。'error':error事件。 | 10140| callback | ErrorCallback | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 10141 10142**错误码:** 10143 10144| 错误码ID | 错误信息 | 10145| -------- | ---------------- | 10146| 401 | Parameter error. | 10147 10148**示例:** 10149 10150```ts 10151import { socket } from '@kit.NetworkKit'; 10152import { BusinessError } from '@kit.BasicServicesKit'; 10153 10154let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 10155let netAddress: socket.NetAddress = { 10156 address: '192.168.xx.xxx', 10157 port: 8080 10158} 10159let tlsSecureOptions: socket.TLSSecureOptions = { 10160 key: "xxxx", 10161 cert: "xxxx", 10162 ca: ["xxxx"], 10163 password: "xxxx", 10164 protocols: socket.Protocol.TLSv12, 10165 useRemoteCipherPrefer: true, 10166 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 10167 cipherSuite: "AES256-SHA256" 10168} 10169let tlsConnectOptions: socket.TLSConnectOptions = { 10170 address: netAddress, 10171 secureOptions: tlsSecureOptions, 10172 ALPNProtocols: ["spdy/1", "http/1.1"] 10173} 10174tlsServer.listen(tlsConnectOptions).then(() => { 10175 console.log("listen callback success"); 10176}).catch((err: BusinessError) => { 10177 console.error("failed" + err); 10178}); 10179 10180tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 10181 client.on('error', (err: BusinessError) => { 10182 console.error("on error, err:" + JSON.stringify(err)) 10183 }); 10184}); 10185``` 10186 10187### off('error')<sup>10+</sup> 10188 10189off(type: 'error', callback?: ErrorCallback): void 10190 10191取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 10192 10193**系统能力**:SystemCapability.Communication.NetStack 10194 10195**参数:** 10196 10197| 参数名 | 类型 | 必填 | 说明 | 10198| -------- | ------------- | ---- | ------------------------------------ | 10199| type | string | 是 | 订阅的事件类型。'error':error事件。 | 10200| callback | ErrorCallback | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 10201 10202**错误码:** 10203 10204| 错误码ID | 错误信息 | 10205| -------- | ---------------- | 10206| 401 | Parameter error. | 10207 10208**示例:** 10209 10210```ts 10211import { socket } from '@kit.NetworkKit'; 10212import { BusinessError } from '@kit.BasicServicesKit'; 10213 10214let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 10215let netAddress: socket.NetAddress = { 10216 address: '192.168.xx.xxx', 10217 port: 8080 10218} 10219let tlsSecureOptions: socket.TLSSecureOptions = { 10220 key: "xxxx", 10221 cert: "xxxx", 10222 ca: ["xxxx"], 10223 password: "xxxx", 10224 protocols: socket.Protocol.TLSv12, 10225 useRemoteCipherPrefer: true, 10226 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 10227 cipherSuite: "AES256-SHA256" 10228} 10229let tlsConnectOptions: socket.TLSConnectOptions = { 10230 address: netAddress, 10231 secureOptions: tlsSecureOptions, 10232 ALPNProtocols: ["spdy/1", "http/1.1"] 10233} 10234tlsServer.listen(tlsConnectOptions).then(() => { 10235 console.log("listen callback success"); 10236}).catch((err: BusinessError) => { 10237 console.error("failed" + err); 10238}); 10239 10240let callback = (err: BusinessError) => { 10241 console.error("on error, err:" + JSON.stringify(err)); 10242} 10243tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 10244 client.on('error', callback); 10245 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 10246 client.off('error', callback); 10247 client.off('error'); 10248}); 10249``` 10250