1# @ohos.net.socket (Socket连接) 2 3本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。 4 5> **说明:** 6> 7> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8 9## 导入模块 10 11```ts 12import { socket } from '@kit.NetworkKit'; 13``` 14 15## socket.constructUDPSocketInstance 16 17constructUDPSocketInstance(): UDPSocket 18 19创建一个UDPSocket对象。 20 21**系统能力**:SystemCapability.Communication.NetStack 22 23**返回值:** 24 25| 类型 | 说明 | 26| --------------------------------- | ---------------------- | 27| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 | 28 29**示例:** 30 31```ts 32import { socket } from '@kit.NetworkKit'; 33let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 34``` 35 36## UDPSocket 37 38UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。 39 40### bind 41 42bind(address: NetAddress, callback: AsyncCallback\<void\>): void 43 44绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。 45 46**需要权限**:ohos.permission.INTERNET 47 48**系统能力**:SystemCapability.Communication.NetStack 49 50**参数:** 51 52| 参数名 | 类型 | 必填 | 说明 | 53| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 54| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 55| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 56 57**错误码:** 58 59| 错误码ID | 错误信息 | 60| ------- | ----------------------- | 61| 401 | Parameter error. | 62| 201 | Permission denied. | 63 64**示例:** 65 66```ts 67import { socket } from '@kit.NetworkKit'; 68import { BusinessError } from '@kit.BasicServicesKit'; 69 70let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 71let bindAddr: socket.NetAddress = { 72 address: '192.168.xx.xxx', 73 port: 1234 74} 75udp.bind(bindAddr, (err: BusinessError) => { 76 if (err) { 77 console.log('bind fail'); 78 return; 79 } 80 console.log('bind success'); 81}); 82``` 83 84### bind 85 86bind(address: NetAddress): Promise\<void\> 87 88绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。 89 90**需要权限**:ohos.permission.INTERNET 91 92**系统能力**:SystemCapability.Communication.NetStack 93 94**参数:** 95 96| 参数名 | 类型 | 必填 | 说明 | 97| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 98| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 99 100**错误码:** 101 102| 错误码ID | 错误信息 | 103| ------- | ----------------------- | 104| 401 | Parameter error. | 105| 201 | Permission denied. | 106 107**返回值:** 108 109| 类型 | 说明 | 110| -------------- | ----------------------------------------- | 111| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 | 112 113**示例:** 114 115```ts 116import { socket } from '@kit.NetworkKit'; 117import { BusinessError } from '@kit.BasicServicesKit'; 118 119let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 120let bindAddr: socket.NetAddress = { 121 address: '192.168.xx.xxx', 122 port: 8080 123} 124udp.bind(bindAddr).then(() => { 125 console.log('bind success'); 126}).catch((err: BusinessError) => { 127 console.log('bind fail'); 128}); 129``` 130 131### send 132 133send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void 134 135通过UDPSocket连接发送数据。使用callback方式作为异步方法。 136 137发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 138 139**需要权限**:ohos.permission.INTERNET 140 141**系统能力**:SystemCapability.Communication.NetStack 142 143**参数:** 144 145| 参数名 | 类型 | 必填 | 说明 | 146| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 147| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 148| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 149 150**错误码:** 151 152| 错误码ID | 错误信息 | 153| ------- | ----------------------- | 154| 401 | Parameter error. | 155| 201 | Permission denied. | 156 157**示例:** 158 159```ts 160import { socket } from '@kit.NetworkKit'; 161import { BusinessError } from '@kit.BasicServicesKit'; 162 163let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 164let netAddress: socket.NetAddress = { 165 address: '192.168.xx.xxx', 166 port: 8080 167} 168let sendOptions: socket.UDPSendOptions = { 169 data: 'Hello, server!', 170 address: netAddress 171} 172udp.send(sendOptions, (err: BusinessError) => { 173 if (err) { 174 console.log('send fail'); 175 return; 176 } 177 console.log('send success'); 178}); 179``` 180 181### send 182 183send(options: UDPSendOptions): Promise\<void\> 184 185通过UDPSocket连接发送数据。使用Promise方式作为异步方法。 186 187发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 188 189**需要权限**:ohos.permission.INTERNET 190 191**系统能力**:SystemCapability.Communication.NetStack 192 193**参数:** 194 195| 参数名 | 类型 | 必填 | 说明 | 196| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 197| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 198 199**错误码:** 200 201| 错误码ID | 错误信息 | 202| ------- | ----------------------- | 203| 401 | Parameter error. | 204| 201 | Permission denied. | 205 206**返回值:** 207 208| 类型 | 说明 | 209| -------------- | --------------------------------------------- | 210| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 | 211 212**示例:** 213 214```ts 215import { socket } from '@kit.NetworkKit'; 216import { BusinessError } from '@kit.BasicServicesKit'; 217 218let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 219let netAddress: socket.NetAddress = { 220 address: '192.168.xx.xxx', 221 port: 8080 222} 223let sendOptions: socket.UDPSendOptions = { 224 data: 'Hello, server!', 225 address: netAddress 226} 227udp.send(sendOptions).then(() => { 228 console.log('send success'); 229}).catch((err: BusinessError) => { 230 console.log('send fail'); 231}); 232``` 233 234### close 235 236close(callback: AsyncCallback\<void\>): void 237 238关闭UDPSocket连接。使用callback方式作为异步方法。 239 240**需要权限**:ohos.permission.INTERNET 241 242**系统能力**:SystemCapability.Communication.NetStack 243 244**参数:** 245 246| 参数名 | 类型 | 必填 | 说明 | 247| -------- | --------------------- | ---- | ---------- | 248| callback | AsyncCallback\<void\> | 是 | 回调函数。关闭UDPSocket连接后触发回调函数。 | 249 250**错误码:** 251 252| 错误码ID | 错误信息 | 253| ------- | ----------------------- | 254| 201 | Permission denied. | 255 256**示例:** 257 258```ts 259import { socket } from '@kit.NetworkKit'; 260import { BusinessError } from '@kit.BasicServicesKit'; 261 262let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 263udp.close((err: BusinessError) => { 264 if (err) { 265 console.log('close fail'); 266 return; 267 } 268 console.log('close success'); 269}) 270``` 271 272### close 273 274close(): Promise\<void\> 275 276关闭UDPSocket连接。使用Promise方式作为异步方法。 277 278**需要权限**:ohos.permission.INTERNET 279 280**系统能力**:SystemCapability.Communication.NetStack 281 282**错误码:** 283 284| 错误码ID | 错误信息 | 285| ------- | ----------------------- | 286| 201 | Permission denied. | 287 288**返回值:** 289 290| 类型 | 说明 | 291| -------------- | ----------------------------------------- | 292| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 | 293 294**示例:** 295 296```ts 297import { socket } from '@kit.NetworkKit'; 298import { BusinessError } from '@kit.BasicServicesKit'; 299 300let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 301udp.close().then(() => { 302 console.log('close success'); 303}).catch((err: BusinessError) => { 304 console.log('close fail'); 305}); 306``` 307 308### getState 309 310getState(callback: AsyncCallback\<SocketStateBase\>): void 311 312获取UDPSocket状态。使用callback方式作为异步方法。 313 314> **说明:** 315> bind方法调用成功后,才可调用此方法。 316 317**需要权限**:ohos.permission.INTERNET 318 319**系统能力**:SystemCapability.Communication.NetStack 320 321**参数:** 322 323| 参数名 | 类型 | 必填 | 说明 | 324| -------- | ------------------------------------------------------ | ---- | ---------- | 325| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 | 326 327**错误码:** 328 329| 错误码ID | 错误信息 | 330| ------- | ----------------------- | 331| 201 | Permission denied. | 332 333**示例:** 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, (err: BusinessError) => { 345 if (err) { 346 console.log('bind fail'); 347 return; 348 } 349 console.log('bind success'); 350 udp.getState((err: BusinessError, data: socket.SocketStateBase) => { 351 if (err) { 352 console.log('getState fail'); 353 return; 354 } 355 console.log('getState success:' + JSON.stringify(data)); 356 }) 357}) 358``` 359 360### getState 361 362getState(): Promise\<SocketStateBase\> 363 364获取UDPSocket状态。使用Promise方式作为异步方法。 365 366> **说明:** 367> bind方法调用成功后,才可调用此方法。 368 369**需要权限**:ohos.permission.INTERNET 370 371**系统能力**:SystemCapability.Communication.NetStack 372 373**错误码:** 374 375| 错误码ID | 错误信息 | 376| ------- | ----------------------- | 377| 201 | Permission denied. | 378 379**返回值:** 380 381| 类型 | 说明 | 382| ----------------------------------------------- | ----------------------------------------- | 383| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 | 384 385**示例:** 386 387```ts 388import { socket } from '@kit.NetworkKit'; 389import { BusinessError } from '@kit.BasicServicesKit'; 390 391let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 392let bindAddr: socket.NetAddress = { 393 address: '192.168.xx.xxx', 394 port: 8080 395} 396udp.bind(bindAddr, (err: BusinessError) => { 397 if (err) { 398 console.log('bind fail'); 399 return; 400 } 401 console.log('bind success'); 402 udp.getState().then((data: socket.SocketStateBase) => { 403 console.log('getState success:' + JSON.stringify(data)); 404 }).catch((err: BusinessError) => { 405 console.log('getState fail' + JSON.stringify(err)); 406 }); 407}); 408``` 409 410### setExtraOptions 411 412setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void 413 414设置UDPSocket连接的其他属性。使用callback方式作为异步方法。 415 416> **说明:** 417> bind方法调用成功后,才可调用此方法。 418 419**需要权限**:ohos.permission.INTERNET 420 421**系统能力**:SystemCapability.Communication.NetStack 422 423**参数:** 424 425| 参数名 | 类型 | 必填 | 说明 | 426| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 427| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 428| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 429 430**错误码:** 431 432| 错误码ID | 错误信息 | 433| ------- | ----------------------- | 434| 401 | Parameter error. | 435| 201 | Permission denied. | 436 437**示例:** 438 439```ts 440import { socket } from '@kit.NetworkKit'; 441import { BusinessError } from '@kit.BasicServicesKit'; 442 443let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 444 445let bindAddr: socket.NetAddress = { 446 address: '192.168.xx.xxx', 447 port: 8080 448} 449udp.bind(bindAddr, (err: BusinessError) => { 450 if (err) { 451 console.log('bind fail'); 452 return; 453 } 454 console.log('bind success'); 455 let udpextraoptions: socket.UDPExtraOptions = { 456 receiveBufferSize: 1000, 457 sendBufferSize: 1000, 458 reuseAddress: false, 459 socketTimeout: 6000, 460 broadcast: true 461 } 462 udp.setExtraOptions(udpextraoptions, (err: BusinessError) => { 463 if (err) { 464 console.log('setExtraOptions fail'); 465 return; 466 } 467 console.log('setExtraOptions success'); 468 }) 469}) 470``` 471 472### setExtraOptions 473 474setExtraOptions(options: UDPExtraOptions): Promise\<void\> 475 476设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。 477 478> **说明:** 479> bind方法调用成功后,才可调用此方法。 480 481**需要权限**:ohos.permission.INTERNET 482 483**系统能力**:SystemCapability.Communication.NetStack 484 485**参数:** 486 487| 参数名 | 类型 | 必填 | 说明 | 488| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 489| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 490 491**返回值:** 492 493| 类型 | 说明 | 494| -------------- | --------------------------------------------------- | 495| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 | 496 497**错误码:** 498 499| 错误码ID | 错误信息 | 500| ------- | ----------------------- | 501| 401 | Parameter error. | 502| 201 | Permission denied. | 503 504**示例:** 505 506```ts 507import { socket } from '@kit.NetworkKit'; 508import { BusinessError } from '@kit.BasicServicesKit'; 509 510let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 511 512let bindAddr: socket.NetAddress = { 513 address: '192.168.xx.xxx', 514 port: 8080 515} 516udp.bind(bindAddr, (err: BusinessError) => { 517 if (err) { 518 console.log('bind fail'); 519 return; 520 } 521 console.log('bind success'); 522 let udpextraoptions: socket.UDPExtraOptions = { 523 receiveBufferSize: 1000, 524 sendBufferSize: 1000, 525 reuseAddress: false, 526 socketTimeout: 6000, 527 broadcast: true 528 } 529 udp.setExtraOptions(udpextraoptions).then(() => { 530 console.log('setExtraOptions success'); 531 }).catch((err: BusinessError) => { 532 console.log('setExtraOptions fail'); 533 }); 534}) 535``` 536 537### getLocalAddress<sup>12+</sup> 538 539getLocalAddress(): Promise\<NetAddress\> 540 541获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。 542 543> **说明:** 544> bind方法调用成功后,才可调用此方法。 545 546**系统能力**:SystemCapability.Communication.NetStack 547 548**返回值:** 549 550| 类型 | 说明 | 551| -------------- | --------------------------------------------------- | 552| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 553 554**错误码:** 555 556| 错误码ID | 错误信息 | 557| -------- | ------------------------------------------- | 558| 2300002 | System internal error. | 559| 2301009 | Bad file descriptor. | 560| 2303188 | Socket operation on non-socket. | 561 562**示例:** 563 564```ts 565import { socket } from '@kit.NetworkKit'; 566import { BusinessError } from '@kit.BasicServicesKit'; 567 568let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 569 570let bindAddr: socket.NetAddress = { 571 address: '192.168.xx.xxx', 572 port: 8080 573} 574udp.bind(bindAddr).then(() => { 575 console.info('bind success'); 576 udp.getLocalAddress().then((localAddress: socket.NetAddress) => { 577 console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress)); 578 }).catch((err: BusinessError) => { 579 console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err)); 580 }) 581}).catch((err: BusinessError) => { 582 console.error('bind fail'); 583}); 584``` 585 586### on('message') 587 588on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 589 590订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 591 592**系统能力**:SystemCapability.Communication.NetStack 593 594**参数:** 595 596| 参数名 | 类型 | 必填 | 说明 | 597| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 598| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 599| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。 | 600 601**示例:** 602 603```ts 604import { socket } from '@kit.NetworkKit'; 605import { BusinessError } from '@kit.BasicServicesKit'; 606 607let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 608 609let messageView = ''; 610udp.on('message', (value: socket.SocketMessageInfo) => { 611 for (let i: number = 0; i < value.message.byteLength; i++) { 612 let uint8Array = new Uint8Array(value.message) 613 let messages = uint8Array[i] 614 let message = String.fromCharCode(messages); 615 messageView += message; 616 } 617 console.log('on message message: ' + JSON.stringify(messageView)); 618 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 619}); 620``` 621 622### off('message') 623 624off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 625 626取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 627 628**系统能力**:SystemCapability.Communication.NetStack 629 630**参数:** 631 632| 参数名 | 类型 | 必填 | 说明 | 633| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 634| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 635| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。返回取消订阅某类事件后UDPSocket连接的状态信息。 | 636 637**示例:** 638 639```ts 640import { socket } from '@kit.NetworkKit'; 641import { BusinessError } from '@kit.BasicServicesKit'; 642 643let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 644let messageView = ''; 645let callback = (value: socket.SocketMessageInfo) => { 646 for (let i: number = 0; i < value.message.byteLength; i++) { 647 let uint8Array = new Uint8Array(value.message) 648 let messages = uint8Array[i] 649 let message = String.fromCharCode(messages); 650 messageView += message; 651 } 652 console.log('on message message: ' + JSON.stringify(messageView)); 653 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 654} 655udp.on('message', callback); 656// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 657udp.off('message', callback); 658udp.off('message'); 659``` 660 661### on('listening' | 'close') 662 663on(type: 'listening' | 'close', callback: Callback\<void\>): void 664 665订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 666 667**系统能力**:SystemCapability.Communication.NetStack 668 669**参数:** 670 671| 参数名 | 类型 | 必填 | 说明 | 672| -------- | ---------------- | ---- | ------------------------------------------------------------ | 673| type | string | 是 | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 674| callback | Callback\<void\> | 是 | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。 | 675 676**示例:** 677 678```ts 679import { socket } from '@kit.NetworkKit'; 680import { BusinessError } from '@kit.BasicServicesKit'; 681 682let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 683udp.on('listening', () => { 684 console.log("on listening success"); 685}); 686udp.on('close', () => { 687 console.log("on close success"); 688}); 689``` 690 691### off('listening' | 'close') 692 693off(type: 'listening' | 'close', callback?: Callback\<void\>): void 694 695取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 696 697**系统能力**:SystemCapability.Communication.NetStack 698 699**参数:** 700 701| 参数名 | 类型 | 必填 | 说明 | 702| -------- | ---------------- | ---- | ------------------------------------------------------------ | 703| type | string | 是 | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 704| callback | Callback\<void\> | 否 | 回调函数。取消订阅UDPSocket连接的数据包消息事件或关闭事件后触发回调函数。 | 705 706**示例:** 707 708```ts 709import { socket } from '@kit.NetworkKit'; 710import { BusinessError } from '@kit.BasicServicesKit'; 711 712let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 713let callback1 = () => { 714 console.log("on listening, success"); 715} 716udp.on('listening', callback1); 717// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 718udp.off('listening', callback1); 719udp.off('listening'); 720let callback2 = () => { 721 console.log("on close, success"); 722} 723udp.on('close', callback2); 724// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 725udp.off('close', callback2); 726udp.off('close'); 727``` 728 729### on('error') 730 731on(type: 'error', callback: ErrorCallback): void 732 733订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 734 735**系统能力**:SystemCapability.Communication.NetStack 736 737**参数:** 738 739| 参数名 | 类型 | 必填 | 说明 | 740| -------- | ------------- | ---- | ------------------------------------ | 741| type | string | 是 | 订阅的事件类型。'error':error事件。 | 742| callback | ErrorCallback | 是 | 回调函数。UDPSocket连接发生error事件后触发回调函数。 | 743 744**示例:** 745 746```ts 747import { socket } from '@kit.NetworkKit'; 748import { BusinessError } from '@kit.BasicServicesKit'; 749 750let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 751udp.on('error', (err: BusinessError) => { 752 console.log("on error, err:" + JSON.stringify(err)) 753}); 754``` 755 756### off('error') 757 758off(type: 'error', callback?: ErrorCallback): void 759 760取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 761 762**系统能力**:SystemCapability.Communication.NetStack 763 764**参数:** 765 766| 参数名 | 类型 | 必填 | 说明 | 767| -------- | ------------- | ---- | ------------------------------------ | 768| type | string | 是 | 订阅的事件类型。'error':error事件。 | 769| callback | ErrorCallback | 否 | 回调函数。UDPSocket连接发生error事件后。 | 770 771**示例:** 772 773```ts 774import { socket } from '@kit.NetworkKit'; 775import { BusinessError } from '@kit.BasicServicesKit'; 776 777let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 778let callback = (err: BusinessError) => { 779 console.log("on error, err:" + JSON.stringify(err)); 780} 781udp.on('error', callback); 782// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 783udp.off('error', callback); 784udp.off('error'); 785``` 786 787## NetAddress 788 789目标地址信息。 790 791**系统能力**:SystemCapability.Communication.NetStack 792 793| 名称 | 类型 | 必填 | 说明 | 794| ------- | ------ | ---- | ------------------------------------------------------------ | 795| address<sup>11+</sup> | string | 是 | 本地绑定的ip地址。 | 796| port | number | 否 | 端口号 ,范围0~65535。如果不指定系统随机分配端口。 | 797| family | number | 否 | 网络协议类型,可选类型:<br />- 1:IPv4<br />- 2:IPv6<br />默认为1。如果地址为IPV6类型,该字段必须被显式指定为2。 | 798## UDPSendOptions 799 800UDPSocket发送参数。 801 802**系统能力**:SystemCapability.Communication.NetStack 803 804| 名称 | 类型 | 必填 | 说明 | 805| ------- | ---------------------------------- | ---- | -------------- | 806| data | string \| ArrayBuffer | 是 | 发送的数据。 | 807| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 808 809## UDPExtraOptions 810 811UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 812 813**系统能力**:SystemCapability.Communication.NetStack 814 815| 名称 | 类型 | 必填 | 说明 | 816| ----------------- | ------- | ---- | -------------------------------- | 817| broadcast | boolean | 否 | 是否可以发送广播。默认为false。 | 818 819## SocketMessageInfo<sup>11+</sup> 820 821socket连接信息 822 823**系统能力**:SystemCapability.Communication.NetStack 824 825| 名称 | 类型 | 必填 | 说明 | 826| ---------- | ------ | ---- | ------------------------------------- | 827| message | ArrayBuffer | 是 | 接收的事件消息。 | 828| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是 | socket连接信息。 | 829 830## SocketStateBase 831 832Socket的状态信息。 833 834**系统能力**:SystemCapability.Communication.NetStack 835 836| 名称 | 类型 | 必填 | 说明 | 837| ----------- | ------- | ---- | ---------- | 838| isBound | boolean | 是 | 是否绑定。 | 839| isClose | boolean | 是 | 是否关闭。 | 840| isConnected | boolean | 是 | 是否连接。 | 841 842## SocketRemoteInfo 843 844Socket的连接信息。 845 846**系统能力**:SystemCapability.Communication.NetStack 847 848| 名称 | 类型 | 必填 | 说明 | 849| ------- | ------ | ---- | ------------------------------------------------------------ | 850| address | string | 是 | 本地绑定的ip地址。 | 851| family | 'IPv4' \| 'IPv6' | 是 | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 | 852| port | number | 是 | 端口号,范围0~65535。 | 853| size | number | 是 | 服务器响应信息的字节长度。 | 854 855## UDP 错误码说明 856 857UDP 其余错误码映射形式为:2301000 + Linux内核错误码。 858 859错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 860 861## socket.constructMulticastSocketInstance<sup>11+</sup> 862 863constructMulticastSocketInstance(): MulticastSocket 864 865创建一个MulticastSocket对象。 866 867**系统能力**:SystemCapability.Communication.NetStack 868 869**返回值:** 870 871| 类型 | 说明 | 872| ----------------------------------- | ----------------------------- | 873| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 | 874 875**示例:** 876 877```ts 878import { socket } from '@kit.NetworkKit'; 879let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 880``` 881## MulticastSocket<sup>11+</sup> 882 883MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。 884 885### addMembership<sup>11+</sup> 886 887addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void; 888 889加入多播组。使用callback方法作为异步方法。 890 891> **说明:** 892> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 893> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 894 895**需要权限**:ohos.permission.INTERNET 896 897**系统能力**:SystemCapability.Communication.NetStack 898 899**参数:** 900 901| 参数名 | 类型 | 必填 | 说明 | 902| ----------------- | ----------------------------- | ---- | ----------------------------------------- | 903| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 904| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 905 906**错误码:** 907 908| 错误码ID | 错误信息 | 909| ------- | ----------------------- | 910| 401 | Parameter error. | 911| 201 | Permission denied. | 912| 2301022 | Invalid argument. | 913| 2301088 | Not a socket. | 914| 2301098 | Address in use. | 915 916**示例:** 917 918```ts 919import { socket } from '@kit.NetworkKit'; 920 921let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 922let addr: socket.NetAddress = { 923 address: '239.255.0.1', 924 port: 8080 925} 926multicast.addMembership(addr, (err: Object) => { 927 if (err) { 928 console.log('add membership fail, err: ' + JSON.stringify(err)); 929 return; 930 } 931 console.log('add membership success'); 932}) 933``` 934 935### addMembership<sup>11+</sup> 936 937addMembership(multicastAddress: NetAddress): Promise\<void\>; 938 939加入多播组。使用Promise方法作为异步方法。。 940 941> **说明:** 942> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 943> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 944 945**需要权限**:ohos.permission.INTERNET 946 947**系统能力**:SystemCapability.Communication.NetStack 948 949**参数:** 950 951| 参数名 | 类型 | 必填 | 说明 | 952| ----------------- | ----------------------------- | ---- | -------------------------------------------- | 953| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 954 955**返回值:** 956 957| 类型 | 说明 | 958| -------------- | ----------------------------------------------- | 959| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 | 960 961**错误码:** 962 963| 错误码ID | 错误信息 | 964| ------- | ----------------------- | 965| 401 | Parameter error. | 966| 201 | Permission denied. | 967| 2301088 | Not a socket. | 968| 2301098 | Address in use. | 969 970**示例:** 971 972```ts 973import { socket } from '@kit.NetworkKit'; 974 975let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 976let addr: socket.NetAddress = { 977 address: '239.255.0.1', 978 port: 8080 979} 980multicast.addMembership(addr).then(() => { 981 console.log('addMembership success'); 982}).catch((err: Object) => { 983 console.log('addMembership fail'); 984}); 985``` 986 987### dropMembership<sup>11+</sup> 988 989dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void; 990 991退出多播组。使用callback方法作为异步方法。 992 993> **说明:** 994> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 995> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 996 997**需要权限**:ohos.permission.INTERNET 998 999**系统能力**:SystemCapability.Communication.NetStack 1000 1001**参数:** 1002 1003| 参数名 | 类型 | 必填 | 说明 | 1004| ----------------- | ----------------------------- | ---- | ------------------------------------------- | 1005| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1006| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。| 1007 1008**错误码:** 1009 1010| 错误码ID | 错误信息 | 1011| ------- | ----------------------- | 1012| 401 | Parameter error. | 1013| 201 | Permission denied. | 1014| 2301088 | Not a socket. | 1015| 2301098 | Address in use. | 1016 1017**示例:** 1018 1019```ts 1020import { socket } from '@kit.NetworkKit'; 1021 1022let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1023let addr: socket.NetAddress = { 1024 address: '239.255.0.1', 1025 port: 8080 1026} 1027multicast.dropMembership(addr, (err: Object) => { 1028 if (err) { 1029 console.log('drop membership fail, err: ' + JSON.stringify(err)); 1030 return; 1031 } 1032 console.log('drop membership success'); 1033}) 1034``` 1035 1036### dropMembership<sup>11+</sup> 1037 1038dropMembership(multicastAddress: NetAddress): Promise\<void\>; 1039 1040退出多播组。使用Promise方法作为异步方法。。 1041 1042> **说明:** 1043> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1044> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 1045 1046**需要权限**:ohos.permission.INTERNET 1047 1048**系统能力**:SystemCapability.Communication.NetStack 1049 1050**参数:** 1051 1052| 参数名 | 类型 | 必填 | 说明 | 1053| ----------------- | ------------------------------------- | ---- | -------------------------------------------- | 1054| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1055 1056**返回值:** 1057 1058| 类型 | 说明 | 1059| -------------- | ----------------------------------------------- | 1060| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 | 1061 1062**错误码:** 1063 1064| 错误码ID | 错误信息 | 1065| ------- | ----------------------- | 1066| 401 | Parameter error. | 1067| 201 | Permission denied. | 1068| 2301088 | Not a socket. | 1069| 2301098 | Address in use. | 1070 1071**示例:** 1072 1073```ts 1074import { socket } from '@kit.NetworkKit'; 1075 1076let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1077let addr: socket.NetAddress = { 1078 address: '239.255.0.1', 1079 port: 8080 1080} 1081multicast.dropMembership(addr).then(() => { 1082 console.log('drop membership success'); 1083}).catch((err: Object) => { 1084 console.log('drop membership fail'); 1085}); 1086``` 1087 1088### setMulticastTTL<sup>11+</sup> 1089 1090setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void; 1091 1092设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。 1093 1094> **说明:** 1095> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1096> 范围为 0~255,默认值为 1 。 1097> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1098> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1099 1100**系统能力**:SystemCapability.Communication.NetStack 1101 1102**参数:** 1103 1104| 参数名 | 类型 | 必填 | 说明 | 1105| ------------- | --------------------- | ---- | ----------------------------- | 1106| ttl | number | 是 | ttl设置数值,类型为数字number。 | 1107| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1108 1109**错误码:** 1110 1111| 错误码ID | 错误信息 | 1112| ------- | ----------------------- | 1113| 401 | Parameter error. | 1114| 2301022 | Invalid argument. | 1115| 2301088 | Not a socket. | 1116 1117**示例:** 1118 1119```ts 1120import { socket } from '@kit.NetworkKit'; 1121 1122let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1123let ttl = 8 1124multicast.setMulticastTTL(ttl, (err: Object) => { 1125 if (err) { 1126 console.log('set ttl fail, err: ' + JSON.stringify(err)); 1127 return; 1128 } 1129 console.log('set ttl success'); 1130}) 1131``` 1132 1133### setMulticastTTL<sup>11+</sup> 1134 1135setMulticastTTL(ttl: number): Promise\<void\>; 1136 1137设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。。 1138 1139> **说明:** 1140> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1141> 范围为 0~255,默认值为 1 。 1142> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1143> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1144 1145**系统能力**:SystemCapability.Communication.NetStack 1146 1147**参数:** 1148 1149| 参数名 | 类型 | 必填 | 说明 | 1150| ------------- | ---------------------- | ---- | ------------------------------ | 1151| ttl | number | 是 | ttl设置数值,类型为数字Number。 | 1152 1153**返回值:** 1154 1155| 类型 | 说明 | 1156| -------------- | ---------------------------------------------- | 1157| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 | 1158 1159**错误码:** 1160 1161| 错误码ID | 错误信息 | 1162| ------- | ----------------------- | 1163| 401 | Parameter error. | 1164| 2301022 | Invalid argument. | 1165| 2301088 | Not a socket. | 1166 1167**示例:** 1168 1169```ts 1170import { socket } from '@kit.NetworkKit'; 1171 1172let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1173multicast.setMulticastTTL(8).then(() => { 1174 console.log('set ttl success'); 1175}).catch((err: Object) => { 1176 console.log('set ttl failed'); 1177}); 1178``` 1179 1180### getMulticastTTL<sup>11+</sup> 1181 1182getMulticastTTL(callback: AsyncCallback\<number\>): void; 1183 1184获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。 1185 1186> **说明:** 1187> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1188> 范围为 0~255,默认值为 1 。 1189> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1190> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1191 1192**系统能力**:SystemCapability.Communication.NetStack 1193 1194**参数:** 1195 1196| 参数名 | 类型 | 必填 | 说明 | 1197| ------------- | ----------------------- | ---- | --------------------------- | 1198| callback | AsyncCallback\<number\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1199 1200**错误码:** 1201 1202| 错误码ID | 错误信息 | 1203| ------- | ----------------------- | 1204| 401 | Parameter error. | 1205| 2301088 | Not a socket. | 1206 1207**示例:** 1208 1209```ts 1210import { socket } from '@kit.NetworkKit'; 1211 1212let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1213multicast.getMulticastTTL((err: Object, value: Number) => { 1214 if (err) { 1215 console.log('set ttl fail, err: ' + JSON.stringify(err)); 1216 return; 1217 } 1218 console.log('set ttl success, value: ' + JSON.stringify(value)); 1219}) 1220``` 1221 1222### getMulticastTTL<sup>11+</sup> 1223 1224getMulticastTTL(): Promise\<number\>; 1225 1226获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。 1227 1228> **说明:** 1229> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1230> 范围为 0~255,默认值为 1 。 1231> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1232> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1233 1234**系统能力**:SystemCapability.Communication.NetStack 1235 1236**返回值:** 1237 1238| 类型 | 说明 | 1239| ---------------- | --------------------------- | 1240| Promise\<number\> | 以Promise形式返回当前TTL数值。 | 1241 1242**错误码:** 1243 1244| 错误码ID | 错误信息 | 1245| ------- | ----------------------- | 1246| 401 | Parameter error. | 1247| 2301088 | Not a socket. | 1248 1249**示例:** 1250 1251```ts 1252import { socket } from '@kit.NetworkKit'; 1253 1254let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1255multicast.getMulticastTTL().then((value: Number) => { 1256 console.log('ttl: ', JSON.stringify(value)); 1257}).catch((err: Object) => { 1258 console.log('set ttl failed'); 1259}); 1260``` 1261 1262### setLoopbackMode<sup>11+</sup> 1263 1264setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void; 1265 1266设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1267 1268> **说明:** 1269> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1270> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1271> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1272 1273**系统能力**:SystemCapability.Communication.NetStack 1274 1275**参数:** 1276 1277| 参数名 | 类型 | 必填 | 说明 | 1278| ------------- | --------------------- | ---- | ---------------------------- | 1279| flag | boolean | 是 | ttl设置数值,类型为boolen 。 | 1280| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1281 1282**错误码:** 1283 1284| 错误码ID | 错误信息 | 1285| ------- | ----------------------- | 1286| 401 | Parameter error. | 1287| 2301088 | Not a socket. | 1288 1289**示例:** 1290 1291```ts 1292import { socket } from '@kit.NetworkKit'; 1293 1294let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1295multicast.setLoopbackMode(false, (err: Object) => { 1296 if (err) { 1297 console.log('set loopback mode fail, err: ' + JSON.stringify(err)); 1298 return; 1299 } 1300 console.log('set loopback mode success'); 1301}) 1302``` 1303 1304### setLoopbackMode<sup>11+</sup> 1305 1306setLoopbackMode(flag: boolean): Promise\<void\>; 1307 1308设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1309 1310> **说明:** 1311> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1312> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1313> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1314 1315**系统能力**:SystemCapability.Communication.NetStack 1316 1317**参数:** 1318 1319| 参数名 | 类型 | 必填 | 说明 | 1320| ------------- | ---------------------- | ---- | -------------------------------- | 1321| flag | boolean | 是 | 环回模式标志位,类型为数字boolean。| 1322 1323**返回值:** 1324 1325| 类型 | 说明 | 1326| -------------- | ---------------------------------------------- | 1327| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 | 1328 1329**错误码:** 1330 1331| 错误码ID | 错误信息 | 1332| ------- | ----------------------- | 1333| 401 | Parameter error. | 1334| 2301088 | Not a socket. | 1335 1336**示例:** 1337 1338```ts 1339import { socket } from '@kit.NetworkKit'; 1340 1341let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1342multicast.setLoopbackMode(false).then(() => { 1343 console.log('set loopback mode success'); 1344}).catch((err: Object) => { 1345 console.log('set loopback mode failed'); 1346}); 1347``` 1348 1349### getLoopbackMode<sup>11+</sup> 1350 1351getLoopbackMode(callback: AsyncCallback\<boolean\>): void; 1352 1353获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1354 1355> **说明:** 1356> 用于获取当前环回模式开启或关闭的状态。 1357> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1358> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1359 1360**系统能力**:SystemCapability.Communication.NetStack 1361 1362**参数:** 1363 1364| 参数名 | 类型 | 必填 | 说明 | 1365| ------------- | ----------------------- | ---- | --------------------------- | 1366| callback | AsyncCallback\<number\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1367 1368**错误码:** 1369 1370| 错误码ID | 错误信息 | 1371| ------- | ----------------------- | 1372| 401 | Parameter error. | 1373| 2301088 | Not a socket. | 1374 1375**示例:** 1376 1377```ts 1378import { socket } from '@kit.NetworkKit'; 1379 1380let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1381multicast.getLoopbackMode((err: Object, value: Boolean) => { 1382 if (err) { 1383 console.log('get loopback mode fail, err: ' + JSON.stringify(err)); 1384 return; 1385 } 1386 console.log('get loopback mode success, value: ' + JSON.stringify(value)); 1387}) 1388``` 1389 1390### getLoopbackMode<sup>11+</sup> 1391 1392getLoopbackMode(): Promise\<boolean\>; 1393 1394获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1395 1396> **说明:** 1397> 用于获取当前环回模式开启或关闭的状态。 1398> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1399> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1400 1401**系统能力**:SystemCapability.Communication.NetStack 1402 1403**返回值:** 1404 1405| 类型 | 说明 | 1406| ---------------- | --------------------------- | 1407| Promise\<boolean\> | 以Promise形式返回当前TTL数值。 | 1408 1409**错误码:** 1410 1411| 错误码ID | 错误信息 | 1412| ------- | ----------------------- | 1413| 401 | Parameter error. | 1414| 2301088 | Not a socket. | 1415 1416**示例:** 1417 1418```ts 1419import { socket } from '@kit.NetworkKit'; 1420 1421let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1422multicast.getLoopbackMode().then((value: Boolean) => { 1423 console.log('loopback mode: ', JSON.stringify(value)); 1424}).catch((err: Object) => { 1425 console.log('get loopback mode failed'); 1426}); 1427``` 1428 1429## socket.constructTCPSocketInstance<sup>7+</sup> 1430 1431constructTCPSocketInstance(): TCPSocket 1432 1433创建一个TCPSocket对象。 1434 1435**系统能力**:SystemCapability.Communication.NetStack 1436 1437**返回值:** 1438 1439| 类型 | 说明 | 1440| --------------------------------- | ---------------------- | 1441| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 | 1442 1443**示例:** 1444 1445```ts 1446import { socket } from '@kit.NetworkKit'; 1447let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1448``` 1449 1450## TCPSocket 1451 1452TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。 1453 1454### bind 1455 1456bind(address: NetAddress, callback: AsyncCallback\<void\>): void 1457 1458绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用callback方法作为异步方法。 1459 1460> **说明:** 1461> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1462> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1463> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1464 1465**需要权限**:ohos.permission.INTERNET 1466 1467**系统能力**:SystemCapability.Communication.NetStack 1468 1469**参数:** 1470 1471| 参数名 | 类型 | 必填 | 说明 | 1472| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1473| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1474| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误、错误信息。 | 1475 1476**错误码:** 1477 1478| 错误码ID | 错误信息 | 1479| ------- | ----------------------- | 1480| 401 | Parameter error. | 1481| 201 | Permission denied. | 1482 1483**示例:** 1484 1485```ts 1486import { socket } from '@kit.NetworkKit'; 1487import { BusinessError } from '@kit.BasicServicesKit'; 1488 1489let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1490let bindAddr: socket.NetAddress = { 1491 address: '192.168.xx.xxx', 1492 port: 8080 1493} 1494tcp.bind(bindAddr, (err: BusinessError) => { 1495 if (err) { 1496 console.log('bind fail'); 1497 return; 1498 } 1499 console.log('bind success'); 1500}) 1501``` 1502 1503### bind 1504 1505bind(address: NetAddress): Promise\<void\> 1506 1507绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用Promise方法作为异步方法。 1508 1509> **说明:** 1510> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1511> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1512> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1513 1514**需要权限**:ohos.permission.INTERNET 1515 1516**系统能力**:SystemCapability.Communication.NetStack 1517 1518**参数:** 1519 1520| 参数名 | 类型 | 必填 | 说明 | 1521| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1522| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1523 1524**返回值:** 1525 1526| 类型 | 说明 | 1527| --------------- | ------------------------------------------------------- | 1528| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 | 1529 1530**错误码:** 1531 1532| 错误码ID | 错误信息 | 1533| ------- | ----------------------- | 1534| 401 | Parameter error. | 1535| 201 | Permission denied. | 1536 1537**示例:** 1538 1539```ts 1540import { socket } from '@kit.NetworkKit'; 1541import { BusinessError } from '@kit.BasicServicesKit'; 1542 1543let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1544let bindAddr: socket.NetAddress = { 1545 address: '192.168.xx.xxx', 1546 port: 8080 1547} 1548tcp.bind(bindAddr).then(() => { 1549 console.log('bind success'); 1550}).catch((err: BusinessError) => { 1551 console.log('bind fail'); 1552}); 1553``` 1554 1555### connect 1556 1557connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void 1558 1559连接到指定的IP地址和端口。使用callback方法作为异步方法。 1560 1561> **说明:** 1562> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接 1563 1564**需要权限**:ohos.permission.INTERNET 1565 1566**系统能力**:SystemCapability.Communication.NetStack 1567 1568**参数:** 1569 1570| 参数名 | 类型 | 必填 | 说明 | 1571| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1572| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1573| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1574 1575**错误码:** 1576 1577| 错误码ID | 错误信息 | 1578| ------- | ----------------------- | 1579| 401 | Parameter error. | 1580| 201 | Permission denied. | 1581 1582**示例:** 1583 1584```ts 1585import { socket } from '@kit.NetworkKit'; 1586import { BusinessError } from '@kit.BasicServicesKit'; 1587 1588let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1589let netAddress: socket.NetAddress = { 1590 address: '192.168.xx.xxx', 1591 port: 8080 1592} 1593let tcpconnectoptions: socket.TCPConnectOptions = { 1594 address: netAddress, 1595 timeout: 6000 1596} 1597tcp.connect(tcpconnectoptions, (err: BusinessError) => { 1598 if (err) { 1599 console.log('connect fail'); 1600 return; 1601 } 1602 console.log('connect success'); 1603}) 1604``` 1605 1606### connect 1607 1608connect(options: TCPConnectOptions): Promise\<void\> 1609 1610连接到指定的IP地址和端口。使用promise方法作为异步方法。 1611 1612> **说明:** 1613> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。 1614 1615**需要权限**:ohos.permission.INTERNET 1616 1617**系统能力**:SystemCapability.Communication.NetStack 1618 1619**参数:** 1620 1621| 参数名 | 类型 | 必填 | 说明 | 1622| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1623| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1624 1625**返回值:** 1626 1627| 类型 | 说明 | 1628| -------------- | --------------------------------------------------------- | 1629| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 | 1630 1631**错误码:** 1632 1633| 错误码ID | 错误信息 | 1634| ------- | ----------------------- | 1635| 401 | Parameter error. | 1636| 201 | Permission denied. | 1637 1638**示例:** 1639 1640```ts 1641import { socket } from '@kit.NetworkKit'; 1642import { BusinessError } from '@kit.BasicServicesKit'; 1643 1644let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1645let netAddress: socket.NetAddress = { 1646 address: '192.168.xx.xxx', 1647 port: 8080 1648} 1649let tcpconnectoptions: socket.TCPConnectOptions = { 1650 address: netAddress, 1651 timeout: 6000 1652} 1653tcp.connect(tcpconnectoptions).then(() => { 1654 console.log('connect success') 1655}).catch((err: BusinessError) => { 1656 console.log('connect fail'); 1657}); 1658``` 1659 1660### send 1661 1662send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 1663 1664通过TCPSocket连接发送数据。使用callback方式作为异步方法。 1665 1666> **说明:** 1667> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 1668 1669**需要权限**:ohos.permission.INTERNET 1670 1671**系统能力**:SystemCapability.Communication.NetStack 1672 1673**参数:** 1674 1675| 参数名 | 类型 | 必填 | 说明 | 1676| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 1677| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 1678| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1679 1680**错误码:** 1681 1682| 错误码ID | 错误信息 | 1683| ------- | ----------------------- | 1684| 401 | Parameter error. | 1685| 201 | Permission denied. | 1686 1687**示例:** 1688 1689```ts 1690import { socket } from '@kit.NetworkKit'; 1691import { BusinessError } from '@kit.BasicServicesKit'; 1692 1693let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1694let netAddress: socket.NetAddress = { 1695 address: '192.168.xx.xxx', 1696 port: 8080 1697} 1698let tcpconnectoptions: socket.TCPConnectOptions = { 1699 address: netAddress, 1700 timeout: 6000 1701} 1702tcp.connect(tcpconnectoptions, () => { 1703 console.log('connect success'); 1704 let tcpSendOptions: socket.TCPSendOptions = { 1705 data: 'Hello, server!' 1706 } 1707 tcp.send(tcpSendOptions, (err: BusinessError) => { 1708 if (err) { 1709 console.log('send fail'); 1710 return; 1711 } 1712 console.log('send success'); 1713 }) 1714}) 1715``` 1716 1717### send 1718 1719send(options: TCPSendOptions): Promise\<void\> 1720 1721通过TCPSocket连接发送数据。使用Promise方式作为异步方法。 1722 1723> **说明:** 1724> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 1725 1726**需要权限**:ohos.permission.INTERNET 1727 1728**系统能力**:SystemCapability.Communication.NetStack 1729 1730**参数:** 1731 1732| 参数名 | 类型 | 必填 | 说明 | 1733| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 1734| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 1735 1736**返回值:** 1737 1738| 类型 | 说明 | 1739| -------------- | ------------------------------------------------- | 1740| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 | 1741 1742**错误码:** 1743 1744| 错误码ID | 错误信息 | 1745| ------- | ----------------------- | 1746| 401 | Parameter error. | 1747| 201 | Permission denied. | 1748 1749**示例:** 1750 1751```ts 1752import { socket } from '@kit.NetworkKit'; 1753import { BusinessError } from '@kit.BasicServicesKit'; 1754 1755let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1756let netAddress: socket.NetAddress = { 1757 address: '192.168.xx.xxx', 1758 port: 8080 1759} 1760let tcpconnectoptions: socket.TCPConnectOptions = { 1761 address: netAddress, 1762 timeout: 6000 1763} 1764tcp.connect(tcpconnectoptions, () => { 1765 console.log('connect success'); 1766 let tcpSendOptions: socket.TCPSendOptions = { 1767 data: 'Hello, server!' 1768 } 1769 tcp.send(tcpSendOptions).then(() => { 1770 console.log('send success'); 1771 }).catch((err: BusinessError) => { 1772 console.log('send fail'); 1773 }); 1774}) 1775``` 1776 1777### close 1778 1779close(callback: AsyncCallback\<void\>): void 1780 1781关闭TCPSocket连接。使用callback方式作为异步方法。 1782 1783**需要权限**:ohos.permission.INTERNET 1784 1785**系统能力**:SystemCapability.Communication.NetStack 1786 1787**参数:** 1788 1789| 参数名 | 类型 | 必填 | 说明 | 1790| -------- | --------------------- | ---- | ---------- | 1791| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1792 1793**错误码:** 1794 1795| 错误码ID | 错误信息 | 1796| ------- | ----------------------- | 1797| 201 | Permission denied. | 1798 1799**示例:** 1800 1801```ts 1802import { socket } from '@kit.NetworkKit'; 1803import { BusinessError } from '@kit.BasicServicesKit'; 1804 1805let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1806 1807tcp.close((err: BusinessError) => { 1808 if (err) { 1809 console.log('close fail'); 1810 return; 1811 } 1812 console.log('close success'); 1813}) 1814``` 1815 1816### close 1817 1818close(): Promise\<void\> 1819 1820关闭TCPSocket连接。使用Promise方式作为异步方法。 1821 1822**需要权限**:ohos.permission.INTERNET 1823 1824**系统能力**:SystemCapability.Communication.NetStack 1825 1826**返回值:** 1827 1828| 类型 | 说明 | 1829| -------------- | ----------------------------------------- | 1830| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 | 1831 1832**错误码:** 1833 1834| 错误码ID | 错误信息 | 1835| ------- | ----------------------- | 1836| 201 | Permission denied. | 1837 1838**示例:** 1839 1840```ts 1841import { socket } from '@kit.NetworkKit'; 1842 1843let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1844 1845tcp.close().then(() => { 1846 console.log('close success'); 1847}).catch((err: BusinessError) => { 1848 console.log('close fail'); 1849}); 1850``` 1851 1852### getRemoteAddress 1853 1854getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 1855 1856获取对端Socket地址。使用callback方式作为异步方法。 1857 1858> **说明:** 1859> connect方法调用成功后,才可调用此方法。 1860 1861**需要权限**:ohos.permission.INTERNET 1862 1863**系统能力**:SystemCapability.Communication.NetStack 1864 1865**参数:** 1866 1867| 参数名 | 类型 | 必填 | 说明 | 1868| -------- | ------------------------------------------------- | ---- | ---------- | 1869| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 | 1870 1871**错误码:** 1872 1873| 错误码ID | 错误信息 | 1874| ------- | ----------------------- | 1875| 201 | Permission denied. | 1876 1877**示例:** 1878 1879```ts 1880import { socket } from '@kit.NetworkKit'; 1881import { BusinessError } from '@kit.BasicServicesKit'; 1882 1883let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1884let netAddress: socket.NetAddress = { 1885 address: '192.168.xx.xxx', 1886 port: 8080 1887} 1888let tcpconnectoptions: socket.TCPConnectOptions = { 1889 address: netAddress, 1890 timeout: 6000 1891} 1892tcp.connect(tcpconnectoptions, () => { 1893 console.log('connect success'); 1894 tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 1895 if (err) { 1896 console.log('getRemoteAddressfail'); 1897 return; 1898 } 1899 console.log('getRemoteAddresssuccess:' + JSON.stringify(data)); 1900 }) 1901}); 1902``` 1903 1904### getRemoteAddress 1905 1906getRemoteAddress(): Promise\<NetAddress\> 1907 1908获取对端Socket地址。使用Promise方式作为异步方法。 1909 1910> **说明:** 1911> connect方法调用成功后,才可调用此方法。 1912 1913**需要权限**:ohos.permission.INTERNET 1914 1915**系统能力**:SystemCapability.Communication.NetStack 1916 1917**返回值:** 1918 1919| 类型 | 说明 | 1920| ------------------------------------------ | ------------------------------------------ | 1921| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 1922 1923**错误码:** 1924 1925| 错误码ID | 错误信息 | 1926| ------- | ----------------------- | 1927| 201 | Permission denied. | 1928 1929**示例:** 1930 1931```ts 1932import { socket } from '@kit.NetworkKit'; 1933import { BusinessError } from '@kit.BasicServicesKit'; 1934 1935let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1936let netAddress: socket.NetAddress = { 1937 address: '192.168.xx.xxx', 1938 port: 8080 1939} 1940let tcpconnectoptions: socket.TCPConnectOptions = { 1941 address: netAddress, 1942 timeout: 6000 1943} 1944tcp.connect(tcpconnectoptions).then(() => { 1945 console.log('connect success'); 1946 tcp.getRemoteAddress().then(() => { 1947 console.log('getRemoteAddress success'); 1948 }).catch((err: BusinessError) => { 1949 console.log('getRemoteAddressfail'); 1950 }); 1951}).catch((err: BusinessError) => { 1952 console.log('connect fail'); 1953}); 1954``` 1955 1956### getState 1957 1958getState(callback: AsyncCallback\<SocketStateBase\>): void 1959 1960获取TCPSocket状态。使用callback方式作为异步方法。 1961 1962> **说明:** 1963> bind或connect方法调用成功后,才可调用此方法。 1964 1965**需要权限**:ohos.permission.INTERNET 1966 1967**系统能力**:SystemCapability.Communication.NetStack 1968 1969**参数:** 1970 1971| 参数名 | 类型 | 必填 | 说明 | 1972| -------- | ------------------------------------------------------ | ---- | ---------- | 1973| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 | 1974 1975**错误码:** 1976 1977| 错误码ID | 错误信息 | 1978| ------- | ----------------------- | 1979| 201 | Permission denied. | 1980 1981**示例:** 1982 1983```ts 1984import { socket } from '@kit.NetworkKit'; 1985import { BusinessError } from '@kit.BasicServicesKit'; 1986 1987let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1988let netAddress: socket.NetAddress = { 1989 address: '192.168.xx.xxx', 1990 port: 8080 1991} 1992let tcpconnectoptions: socket.TCPConnectOptions = { 1993 address: netAddress, 1994 timeout: 6000 1995} 1996tcp.connect(tcpconnectoptions, () => { 1997 console.log('connect success'); 1998 tcp.getState((err: BusinessError, data: socket.SocketStateBase) => { 1999 if (err) { 2000 console.log('getState fail'); 2001 return; 2002 } 2003 console.log('getState success:' + JSON.stringify(data)); 2004 }); 2005}); 2006``` 2007 2008### getState 2009 2010getState(): Promise\<SocketStateBase\> 2011 2012获取TCPSocket状态。使用Promise方式作为异步方法。 2013 2014> **说明:** 2015> bind或connect方法调用成功后,才可调用此方法。 2016 2017**需要权限**:ohos.permission.INTERNET 2018 2019**系统能力**:SystemCapability.Communication.NetStack 2020 2021**返回值:** 2022 2023| 类型 | 说明 | 2024| ----------------------------------------------- | ----------------------------------------- | 2025| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 2026 2027**错误码:** 2028 2029| 错误码ID | 错误信息 | 2030| ------- | ----------------------- | 2031| 201 | Permission denied. | 2032 2033**示例:** 2034 2035```ts 2036import { socket } from '@kit.NetworkKit'; 2037import { BusinessError } from '@kit.BasicServicesKit'; 2038 2039let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2040let netAddress: socket.NetAddress = { 2041 address: '192.168.xx.xxx', 2042 port: 8080 2043} 2044let tcpconnectoptions: socket.TCPConnectOptions = { 2045 address: netAddress, 2046 timeout: 6000 2047} 2048tcp.connect(tcpconnectoptions).then(() => { 2049 console.log('connect success'); 2050 tcp.getState().then(() => { 2051 console.log('getState success'); 2052 }).catch((err: BusinessError) => { 2053 console.log('getState fail'); 2054 }); 2055}).catch((err: BusinessError) => { 2056 console.log('connect fail'); 2057}); 2058``` 2059 2060### getSocketFd<sup>10+</sup> 2061 2062getSocketFd(callback: AsyncCallback\<number\>): void 2063 2064获取TCPSocket的文件描述符。使用callback方式作为异步方法。 2065 2066> **说明:** 2067> bind或connect方法调用成功后,才可调用此方法。 2068 2069**系统能力**:SystemCapability.Communication.NetStack 2070 2071**参数:** 2072 2073| 参数名 | 类型 | 必填 | 说明 | 2074| -------- | ------------------------------------------------------ | ---- | ---------- | 2075| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 | 2076 2077**示例:** 2078 2079```ts 2080import { socket } from '@kit.NetworkKit'; 2081import { BusinessError } from '@kit.BasicServicesKit'; 2082 2083let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2084let bindAddr: socket.NetAddress = { 2085 address: '0.0.0.0' 2086} 2087tcp.bind(bindAddr) 2088let netAddress: socket.NetAddress = { 2089 address: '192.168.xx.xxx', 2090 port: 8080 2091} 2092let tcpconnectoptions: socket.TCPConnectOptions = { 2093 address: netAddress, 2094 timeout: 6000 2095} 2096tcp.connect(tcpconnectoptions) 2097tcp.getSocketFd((err: BusinessError, data: number) => { 2098 console.info("getSocketFd failed: " + err); 2099 console.info("tunenlfd: " + data); 2100}) 2101``` 2102### getSocketFd<sup>10+</sup> 2103 2104getSocketFd(): Promise\<number\> 2105 2106获取TCPSocket的文件描述符。使用Promise方式作为异步方法。 2107 2108> **说明:** 2109> bind或connect方法调用成功后,才可调用此方法。 2110 2111**系统能力**:SystemCapability.Communication.NetStack 2112 2113**返回值:** 2114 2115| 类型 | 说明 | 2116| ----------------------------------------------- | ----------------------------------------- | 2117| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 2118 2119**示例:** 2120 2121```ts 2122import { socket } from '@kit.NetworkKit'; 2123import { BusinessError } from '@kit.BasicServicesKit'; 2124 2125let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2126let bindAddr: socket.NetAddress = { 2127 address: '0.0.0.0' 2128} 2129tcp.bind(bindAddr) 2130let netAddress: socket.NetAddress = { 2131 address: '192.168.xx.xxx', 2132 port: 8080 2133} 2134let tcpconnectoptions: socket.TCPConnectOptions = { 2135 address: netAddress, 2136 timeout: 6000 2137} 2138tcp.connect(tcpconnectoptions) 2139tcp.getSocketFd().then((data: number) => { 2140 console.info("tunenlfd: " + data); 2141}) 2142``` 2143 2144### setExtraOptions 2145 2146setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 2147 2148设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 2149 2150> **说明:** 2151> bind或connect方法调用成功后,才可调用此方法。 2152 2153**需要权限**:ohos.permission.INTERNET 2154 2155**系统能力**:SystemCapability.Communication.NetStack 2156 2157**参数:** 2158 2159| 参数名 | 类型 | 必填 | 说明 | 2160| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2161| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2162| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2163 2164**错误码:** 2165 2166| 错误码ID | 错误信息 | 2167| ------- | ----------------------- | 2168| 401 | Parameter error. | 2169| 201 | Permission denied. | 2170 2171**示例:** 2172 2173```ts 2174import { socket } from '@kit.NetworkKit'; 2175import { BusinessError } from '@kit.BasicServicesKit'; 2176 2177let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2178let netAddress: socket.NetAddress = { 2179 address: '192.168.xx.xxx', 2180 port: 8080 2181} 2182let tcpconnectoptions: socket.TCPConnectOptions = { 2183 address: netAddress, 2184 timeout: 6000 2185} 2186 2187interface SocketLinger { 2188 on: boolean; 2189 linger: number; 2190} 2191 2192tcp.connect(tcpconnectoptions, () => { 2193 console.log('connect success'); 2194 let tcpExtraOptions: socket.TCPExtraOptions = { 2195 keepAlive: true, 2196 OOBInline: true, 2197 TCPNoDelay: true, 2198 socketLinger: { on: true, linger: 10 } as SocketLinger, 2199 receiveBufferSize: 1000, 2200 sendBufferSize: 1000, 2201 reuseAddress: true, 2202 socketTimeout: 3000 2203 } 2204 tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 2205 if (err) { 2206 console.log('setExtraOptions fail'); 2207 return; 2208 } 2209 console.log('setExtraOptions success'); 2210 }); 2211}); 2212``` 2213 2214### setExtraOptions 2215 2216setExtraOptions(options: TCPExtraOptions): Promise\<void\> 2217 2218设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 2219 2220> **说明:** 2221> bind或connect方法调用成功后,才可调用此方法。 2222 2223**需要权限**:ohos.permission.INTERNET 2224 2225**系统能力**:SystemCapability.Communication.NetStack 2226 2227**参数:** 2228 2229| 参数名 | 类型 | 必填 | 说明 | 2230| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2231| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2232 2233**返回值:** 2234 2235| 类型 | 说明 | 2236| -------------- | --------------------------------------------------- | 2237| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 | 2238 2239**错误码:** 2240 2241| 错误码ID | 错误信息 | 2242| ------- | ----------------------- | 2243| 401 | Parameter error. | 2244| 201 | Permission denied. | 2245 2246**示例:** 2247 2248```ts 2249import { socket } from '@kit.NetworkKit'; 2250import { BusinessError } from '@kit.BasicServicesKit'; 2251 2252let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2253let netAddress: socket.NetAddress = { 2254 address: '192.168.xx.xxx', 2255 port: 8080 2256} 2257let tcpconnectoptions: socket.TCPConnectOptions = { 2258 address: netAddress, 2259 timeout: 6000 2260} 2261 2262interface SocketLinger { 2263 on: boolean; 2264 linger: number; 2265} 2266 2267tcp.connect(tcpconnectoptions, () => { 2268 console.log('connect success'); 2269 let tcpExtraOptions: socket.TCPExtraOptions = { 2270 keepAlive: true, 2271 OOBInline: true, 2272 TCPNoDelay: true, 2273 socketLinger: { on: true, linger: 10 } as SocketLinger, 2274 receiveBufferSize: 1000, 2275 sendBufferSize: 1000, 2276 reuseAddress: true, 2277 socketTimeout: 3000 2278 } 2279 tcp.setExtraOptions(tcpExtraOptions).then(() => { 2280 console.log('setExtraOptions success'); 2281 }).catch((err: BusinessError) => { 2282 console.log('setExtraOptions fail'); 2283 }); 2284}); 2285``` 2286 2287### getLocalAddress<sup>12+</sup> 2288 2289getLocalAddress(): Promise\<NetAddress\> 2290 2291获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。 2292 2293> **说明:** 2294> bind方法调用成功后,才可调用此方法。 2295 2296**系统能力**:SystemCapability.Communication.NetStack 2297 2298**返回值:** 2299 2300| 类型 | 说明 | 2301| -------------- | --------------------------------------------------- | 2302| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 2303 2304**错误码:** 2305 2306| 错误码ID | 错误信息 | 2307| -------- | ------------------------------------------- | 2308| 2300002 | System internal error. | 2309| 2301009 | Bad file descriptor. | 2310| 2303188 | Socket operation on non-socket. | 2311 2312**示例:** 2313 2314```ts 2315import { socket } from '@kit.NetworkKit'; 2316import { BusinessError } from '@kit.BasicServicesKit'; 2317 2318let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2319let bindAddr: socket.NetAddress = { 2320 address: '192.168.xx.xxx', 2321 family: 1, 2322 port: 8080 2323} 2324tcp.bind(bindAddr).then(() => { 2325 tcp.getLocalAddress().then((localAddress: socket.NetAddress) => { 2326 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 2327 }).catch((err: BusinessError) => { 2328 console.error("FAILED! Error:" + JSON.stringify(err)); 2329 }) 2330}).catch((err: BusinessError) => { 2331 console.error('bind fail'); 2332}); 2333``` 2334 2335### on('message') 2336 2337on(type: 'message', callback: Callback<SocketMessageInfo\>): void 2338 2339订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2340 2341**系统能力**:SystemCapability.Communication.NetStack 2342 2343**参数:** 2344 2345| 参数名 | 类型 | 必填 | 说明 | 2346| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2347| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 2348| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回TCPSocket连接信息。 | 2349 2350**示例:** 2351 2352```ts 2353import { socket } from '@kit.NetworkKit'; 2354import { BusinessError } from '@kit.BasicServicesKit'; 2355 2356let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2357let messageView = ''; 2358tcp.on('message', (value: socket.SocketMessageInfo) => { 2359 for (let i: number = 0; i < value.message.byteLength; i++) { 2360 let uint8Array = new Uint8Array(value.message) 2361 let messages = uint8Array[i] 2362 let message = String.fromCharCode(messages); 2363 messageView += message; 2364 } 2365 console.log('on message message: ' + JSON.stringify(messageView)); 2366 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2367}); 2368``` 2369 2370### off('message') 2371 2372off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 2373 2374取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2375 2376**系统能力**:SystemCapability.Communication.NetStack 2377 2378**参数:** 2379 2380| 参数名 | 类型 | 必填 | 说明 | 2381| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2382| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 2383| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。取消订阅TCPSocket连接的接收消息事件时触发回调函数。 | 2384 2385**示例:** 2386 2387```ts 2388import { socket } from '@kit.NetworkKit'; 2389import { BusinessError } from '@kit.BasicServicesKit'; 2390 2391let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2392let messageView = ''; 2393let callback = (value: socket.SocketMessageInfo) => { 2394 for (let i: number = 0; i < value.message.byteLength; i++) { 2395 let uint8Array = new Uint8Array(value.message) 2396 let messages = uint8Array[i] 2397 let message = String.fromCharCode(messages); 2398 messageView += message; 2399 } 2400 console.log('on message message: ' + JSON.stringify(messageView)); 2401 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2402} 2403tcp.on('message', callback); 2404// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2405tcp.off('message', callback); 2406tcp.off('message'); 2407``` 2408 2409### on('connect' | 'close') 2410 2411on(type: 'connect' | 'close', callback: Callback\<void\>): void 2412 2413订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2414 2415**系统能力**:SystemCapability.Communication.NetStack 2416 2417**参数:** 2418 2419| 参数名 | 类型 | 必填 | 说明 | 2420| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2421| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2422| callback | Callback\<void\> | 是 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | 2423 2424**示例:** 2425 2426```ts 2427import { socket } from '@kit.NetworkKit'; 2428import { BusinessError } from '@kit.BasicServicesKit'; 2429 2430let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2431tcp.on('connect', () => { 2432 console.log("on connect success") 2433}); 2434tcp.on('close', () => { 2435 console.log("on close success") 2436}); 2437``` 2438 2439### off('connect' | 'close') 2440 2441off(type: 'connect' | 'close', callback?: Callback\<void\>): void 2442 2443取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2444 2445**系统能力**:SystemCapability.Communication.NetStack 2446 2447**参数:** 2448 2449| 参数名 | 类型 | 必填 | 说明 | 2450| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2451| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2452| callback | Callback\<void\> | 否 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | 2453 2454**示例:** 2455 2456```ts 2457import { socket } from '@kit.NetworkKit'; 2458import { BusinessError } from '@kit.BasicServicesKit'; 2459 2460let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2461let callback1 = () => { 2462 console.log("on connect success"); 2463} 2464tcp.on('connect', callback1); 2465// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2466tcp.off('connect', callback1); 2467tcp.off('connect'); 2468let callback2 = () => { 2469 console.log("on close success"); 2470} 2471tcp.on('close', callback2); 2472// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2473tcp.off('close', callback2); 2474tcp.off('close'); 2475``` 2476 2477### on('error') 2478 2479on(type: 'error', callback: ErrorCallback): void 2480 2481订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2482 2483**系统能力**:SystemCapability.Communication.NetStack 2484 2485**参数:** 2486 2487| 参数名 | 类型 | 必填 | 说明 | 2488| -------- | ------------- | ---- | ------------------------------------ | 2489| type | string | 是 | 订阅的事件类型。'error':error事件。 | 2490| callback | ErrorCallback | 是 | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。 | 2491 2492**示例:** 2493 2494```ts 2495import { socket } from '@kit.NetworkKit'; 2496import { BusinessError } from '@kit.BasicServicesKit'; 2497 2498let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2499tcp.on('error', (err: BusinessError) => { 2500 console.log("on error, err:" + JSON.stringify(err)) 2501}); 2502``` 2503 2504### off('error') 2505 2506off(type: 'error', callback?: ErrorCallback): void 2507 2508取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2509 2510**系统能力**:SystemCapability.Communication.NetStack 2511 2512**参数:** 2513 2514| 参数名 | 类型 | 必填 | 说明 | 2515| -------- | ------------- | ---- | ------------------------------------ | 2516| type | string | 是 | 订阅的事件类型。'error':error事件。 | 2517| callback | ErrorCallback | 否 | 回调函数。TCPSocket连接取消订阅的某类error事件触发时调用回调函数。 | 2518 2519**示例:** 2520 2521```ts 2522import { socket } from '@kit.NetworkKit'; 2523import { BusinessError } from '@kit.BasicServicesKit'; 2524 2525let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2526let callback = (err: BusinessError) => { 2527 console.log("on error, err:" + JSON.stringify(err)); 2528} 2529tcp.on('error', callback); 2530// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2531tcp.off('error', callback); 2532tcp.off('error'); 2533``` 2534 2535## TCPConnectOptions 2536 2537TCPSocket连接的参数。 2538 2539**系统能力**:SystemCapability.Communication.NetStack 2540 2541| 名称 | 类型 | 必填 | 说明 | 2542| ------- | ---------------------------------- | ---- | -------------------------- | 2543| address | [NetAddress](#netaddress) | 是 | 绑定的地址以及端口。 | 2544| timeout | number | 否 | 超时时间,单位毫秒(ms)。 | 2545 2546## TCPSendOptions 2547 2548TCPSocket发送请求的参数。 2549 2550**系统能力**:SystemCapability.Communication.NetStack 2551 2552| 名称 | 类型 | 必填 | 说明 | 2553| -------- | ------ | ---- | ------------------------------------------------------------ | 2554| data | string\| ArrayBuffer | 是 | 发送的数据。 | 2555| encoding | string | 否 | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 | 2556 2557## TCPExtraOptions 2558 2559TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 2560 2561**系统能力**:SystemCapability.Communication.NetStack 2562 2563| 名称 | 类型 | 必填 | 说明 | 2564| ----------------- | ------- | ---- | ------------------------------------------------------------ | 2565| keepAlive | boolean | 否 | 是否保持连接。默认为false。 | 2566| OOBInline | boolean | 否 | 是否为OOB内联。默认为false。 | 2567| TCPNoDelay | boolean | 否 | TCPSocket连接是否无时延。默认为false。 | 2568| socketLinger | \{on:boolean, linger:number\} | 否 | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 | 2569 2570## socket.constructTCPSocketServerInstance<sup>10+</sup> 2571 2572constructTCPSocketServerInstance(): TCPSocketServer 2573 2574创建一个TCPSocketServer对象。 2575 2576**系统能力**:SystemCapability.Communication.NetStack 2577 2578**返回值:** 2579 2580| 类型 | 说明 | 2581| ---------------------------------- | ---------------------------- | 2582| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 | 2583 2584**示例:** 2585 2586```ts 2587import { socket } from '@kit.NetworkKit'; 2588let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2589``` 2590 2591## TCPSocketServer<sup>10+</sup> 2592 2593TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。 2594 2595### listen<sup>10+</sup> 2596 2597listen(address: NetAddress, callback: AsyncCallback\<void\>): void 2598 2599绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。 2600 2601> **说明:** 2602> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2603 2604**需要权限**:ohos.permission.INTERNET 2605 2606**系统能力**:SystemCapability.Communication.NetStack 2607 2608**参数:** 2609 2610| 参数名 | 类型 | 必填 | 说明 | 2611| -------- | ------------------------- | ---- | --------------------------------------------- | 2612| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2613| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2614 2615**错误码:** 2616 2617| 错误码ID | 错误信息 | 2618| -------- | ------------------------------------------- | 2619| 401 | Parameter error. | 2620| 201 | Permission denied. | 2621| 2300002 | System internal error. | 2622| 2303109 | Bad file number. | 2623| 2303111 | Resource temporarily unavailable. Try again.| 2624| 2303198 | Address already in use. | 2625| 2303199 | Cannot assign requested address. | 2626 2627**示例:** 2628 2629```ts 2630import { socket } from '@kit.NetworkKit'; 2631import { BusinessError } from '@kit.BasicServicesKit'; 2632 2633let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2634let listenAddr: socket.NetAddress = { 2635 address: '192.168.xx.xxx', 2636 port: 8080, 2637 family: 1 2638} 2639tcpServer.listen(listenAddr, (err: BusinessError) => { 2640 if (err) { 2641 console.log("listen fail"); 2642 return; 2643 } 2644 console.log("listen success"); 2645}) 2646``` 2647 2648### listen<sup>10+</sup> 2649 2650listen(address: NetAddress): Promise\<void\> 2651 2652绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 2653 2654> **说明:** 2655> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2656 2657**需要权限**:ohos.permission.INTERNET 2658 2659**系统能力**:SystemCapability.Communication.NetStack 2660 2661**参数:** 2662 2663| 参数名 | 类型 | 必填 | 说明 | 2664| ------- | ------------------------- | ---- | --------------------------------------------- | 2665| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2666 2667**返回值:** 2668 2669| 类型 | 说明 | 2670| -------------- | ----------------------------------------------------------- | 2671| Promise\<void\> | 以Promise形式返回, 成功返回空,失败返回错误码错误信息。| 2672 2673**错误码:** 2674 2675| 错误码ID | 错误信息 | 2676| -------- | ------------------------------------------- | 2677| 401 | Parameter error. | 2678| 201 | Permission denied. | 2679| 2300002 | System internal error. | 2680| 2303109 | Bad file number. | 2681| 2303111 | Resource temporarily unavailable. Try again.| 2682| 2303198 | Address already in use. | 2683| 2303199 | Cannot assign requested address. | 2684 2685**示例:** 2686 2687```ts 2688import { socket } from '@kit.NetworkKit'; 2689import { BusinessError } from '@kit.BasicServicesKit'; 2690 2691let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2692let listenAddr: socket.NetAddress = { 2693 address: '192.168.xx.xxx', 2694 port: 8080, 2695 family: 1 2696} 2697tcpServer.listen(listenAddr).then(() => { 2698 console.log('listen success'); 2699}).catch((err: BusinessError) => { 2700 console.log('listen fail'); 2701}); 2702``` 2703 2704### getState<sup>10+</sup> 2705 2706getState(callback: AsyncCallback\<SocketStateBase\>): void 2707 2708获取TCPSocketServer状态。使用callback方式作为异步方法。 2709 2710> **说明:** 2711> listen方法调用成功后,才可调用此方法。 2712 2713**需要权限**:ohos.permission.INTERNET 2714 2715**系统能力**:SystemCapability.Communication.NetStack 2716 2717**参数:** 2718 2719| 参数名 | 类型 | 必填 | 说明 | 2720| -------- | -------------------------------------------------- | ---- | ---------- | 2721| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2722 2723**错误码:** 2724 2725| 错误码ID | 错误信息 | 2726| -------- | ------------------------------- | 2727| 401 | Parameter error. | 2728| 201 | Permission denied. | 2729| 2300002 | System internal error. | 2730| 2303188 | Socket operation on non-socket. | 2731 2732**示例:** 2733 2734```ts 2735import { socket } from '@kit.NetworkKit'; 2736import { BusinessError } from '@kit.BasicServicesKit'; 2737 2738let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2739let listenAddr: socket.NetAddress = { 2740 address: '192.168.xx.xxx', 2741 port: 8080, 2742 family: 1 2743} 2744tcpServer.listen(listenAddr, (err: BusinessError) => { 2745 if (err) { 2746 console.log("listen fail"); 2747 return; 2748 } 2749 console.log("listen success"); 2750}) 2751tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 2752 if (err) { 2753 console.log('getState fail'); 2754 return; 2755 } 2756 console.log('getState success:' + JSON.stringify(data)); 2757}) 2758``` 2759 2760### getState<sup>10+</sup> 2761 2762getState(): Promise\<SocketStateBase\> 2763 2764获取TCPSocketServer状态。使用Promise方式作为异步方法。 2765 2766> **说明:** 2767> listen方法调用成功后,才可调用此方法。 2768 2769**需要权限**:ohos.permission.INTERNET 2770 2771**系统能力**:SystemCapability.Communication.NetStack 2772 2773**返回值:** 2774 2775| 类型 | 说明 | 2776| ------------------------------------------- | ----------------------------------------- | 2777| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 2778 2779**错误码:** 2780 2781| 错误码ID | 错误信息 | 2782| -------- | ------------------------------- | 2783| 201 | Permission denied. | 2784| 2300002 | System internal error. | 2785| 2303188 | Socket operation on non-socket. | 2786 2787**示例:** 2788 2789```ts 2790import { socket } from '@kit.NetworkKit'; 2791import { BusinessError } from '@kit.BasicServicesKit'; 2792 2793let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2794let listenAddr: socket.NetAddress = { 2795 address: '192.168.xx.xxx', 2796 port: 8080, 2797 family: 1 2798} 2799tcpServer.listen(listenAddr, (err: BusinessError) => { 2800 if (err) { 2801 console.log("listen fail"); 2802 return; 2803 } 2804 console.log("listen success"); 2805}) 2806tcpServer.getState().then((data: socket.SocketStateBase) => { 2807 console.log('getState success' + JSON.stringify(data)); 2808}).catch((err: BusinessError) => { 2809 console.log('getState fail'); 2810}); 2811``` 2812 2813### setExtraOptions<sup>10+</sup> 2814 2815setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 2816 2817设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。 2818 2819> **说明:** 2820> listen方法调用成功后,才可调用此方法。 2821 2822**需要权限**:ohos.permission.INTERNET 2823 2824**系统能力**:SystemCapability.Communication.NetStack 2825 2826**参数:** 2827 2828| 参数名 | 类型 | 必填 | 说明 | 2829| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 2830| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 2831| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2832 2833**错误码:** 2834 2835| 错误码ID | 错误信息 | 2836| -------- | ------------------------------- | 2837| 401 | Parameter error. | 2838| 201 | Permission denied. | 2839| 2300002 | System internal error. | 2840| 2303188 | Socket operation on non-socket. | 2841 2842**示例:** 2843 2844```ts 2845import { socket } from '@kit.NetworkKit'; 2846import { BusinessError } from '@kit.BasicServicesKit'; 2847 2848let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2849let listenAddr: socket.NetAddress = { 2850 address: '192.168.xx.xxx', 2851 port: 8080, 2852 family: 1 2853} 2854tcpServer.listen(listenAddr, (err: BusinessError) => { 2855 if (err) { 2856 console.log("listen fail"); 2857 return; 2858 } 2859 console.log("listen success"); 2860}) 2861 2862interface SocketLinger { 2863 on: boolean; 2864 linger: number; 2865} 2866 2867let tcpExtraOptions: socket.TCPExtraOptions = { 2868 keepAlive: true, 2869 OOBInline: true, 2870 TCPNoDelay: true, 2871 socketLinger: { on: true, linger: 10 } as SocketLinger, 2872 receiveBufferSize: 1000, 2873 sendBufferSize: 1000, 2874 reuseAddress: true, 2875 socketTimeout: 3000 2876} 2877tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 2878 if (err) { 2879 console.log('setExtraOptions fail'); 2880 return; 2881 } 2882 console.log('setExtraOptions success'); 2883}); 2884``` 2885 2886### setExtraOptions<sup>10+</sup> 2887 2888setExtraOptions(options: TCPExtraOptions): Promise\<void\> 2889 2890设置TCPSocketServer连接的其他属性,使用Promise方式作为异步方法。 2891 2892> **说明:** 2893> listen方法调用成功后,才可调用此方法。 2894 2895**需要权限**:ohos.permission.INTERNET 2896 2897**系统能力**:SystemCapability.Communication.NetStack 2898 2899**参数:** 2900 2901| 参数名 | 类型 | 必填 | 说明 | 2902| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 2903| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 2904 2905**返回值:** 2906 2907| 类型 | 说明 | 2908| -------------- | --------------------------------------------------------- | 2909| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 2910 2911**错误码:** 2912 2913| 错误码ID | 错误信息 | 2914| -------- | ------------------------------- | 2915| 401 | Parameter error. | 2916| 201 | Permission denied. | 2917| 2300002 | System internal error. | 2918| 2303188 | Socket operation on non-socket. | 2919 2920**示例:** 2921 2922```ts 2923import { socket } from '@kit.NetworkKit'; 2924import { BusinessError } from '@kit.BasicServicesKit'; 2925 2926let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2927let listenAddr: socket.NetAddress = { 2928 address: '192.168.xx.xxx', 2929 port: 8080, 2930 family: 1 2931} 2932 2933interface SocketLinger { 2934 on: boolean; 2935 linger: number; 2936} 2937 2938tcpServer.listen(listenAddr, (err: BusinessError) => { 2939 if (err) { 2940 console.log("listen fail"); 2941 return; 2942 } 2943 console.log("listen success"); 2944}) 2945 2946let tcpExtraOptions: socket.TCPExtraOptions = { 2947 keepAlive: true, 2948 OOBInline: true, 2949 TCPNoDelay: true, 2950 socketLinger: { on: true, linger: 10 } as SocketLinger, 2951 receiveBufferSize: 1000, 2952 sendBufferSize: 1000, 2953 reuseAddress: true, 2954 socketTimeout: 3000 2955} 2956tcpServer.setExtraOptions(tcpExtraOptions).then(() => { 2957 console.log('setExtraOptions success'); 2958}).catch((err: BusinessError) => { 2959 console.log('setExtraOptions fail'); 2960}); 2961``` 2962 2963### getLocalAddress<sup>12+</sup> 2964 2965getLocalAddress(): Promise\<NetAddress\> 2966 2967获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。 2968 2969> **说明:** 2970> listen方法调用成功后,才可调用此方法。 2971 2972**系统能力**:SystemCapability.Communication.NetStack 2973 2974**返回值:** 2975 2976| 类型 | 说明 | 2977| -------------- | --------------------------------------------------- | 2978| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 2979 2980**错误码:** 2981 2982| 错误码ID | 错误信息 | 2983| -------- | ------------------------------------------- | 2984| 2300002 | System internal error. | 2985| 2301009 | Bad file descriptor. | 2986| 2303188 | Socket operation on non-socket. | 2987 2988**示例:** 2989 2990```ts 2991import { socket } from '@kit.NetworkKit'; 2992import { BusinessError } from '@kit.BasicServicesKit'; 2993 2994let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2995let listenAddr: socket.NetAddress = { 2996 address: '192.168.xx.xxx', 2997 port: 8080, 2998 family: 1 2999} 3000tcpServer.listen(listenAddr).then(() => { 3001 tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 3002 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 3003 }).catch((err: BusinessError) => { 3004 console.error("FerrorAILED! Error:" + JSON.stringify(err)); 3005 }) 3006}).catch((err: BusinessError) => { 3007 console.error('listen fail'); 3008}); 3009``` 3010 3011### on('connect')<sup>10+</sup> 3012 3013on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void 3014 3015订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3016 3017> **说明:** 3018> listen方法调用成功后,才可调用此方法。 3019 3020**系统能力**:SystemCapability.Communication.NetStack 3021 3022**参数:** 3023 3024| 参数名 | 类型 | 必填 | 说明 | 3025| -------- | ------------------------------- | ---- | ------------------------------------- | 3026| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 3027| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3028 3029**错误码:** 3030 3031| 错误码ID | 错误信息 | 3032| -------- | ---------------- | 3033| 401 | Parameter error. | 3034 3035**示例:** 3036 3037```ts 3038import { socket } from '@kit.NetworkKit'; 3039 3040let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3041 3042let listenAddr: socket.NetAddress = { 3043 address: '192.168.xx.xxx', 3044 port: 8080, 3045 family: 1 3046} 3047tcpServer.listen(listenAddr, (err: BusinessError) => { 3048 if (err) { 3049 console.log("listen fail"); 3050 return; 3051 } 3052 console.log("listen success"); 3053 tcpServer.on('connect', (data: socket.TCPSocketConnection) => { 3054 console.log(JSON.stringify(data)) 3055 }); 3056}) 3057``` 3058 3059### off('connect')<sup>10+</sup> 3060 3061off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void 3062 3063取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3064 3065**系统能力**:SystemCapability.Communication.NetStack 3066 3067**参数:** 3068 3069| 参数名 | 类型 | 必填 | 说明 | 3070| -------- | ------------------------------- | ---- | ------------------------------------- | 3071| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 3072| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3073 3074**错误码:** 3075 3076| 错误码ID | 错误信息 | 3077| -------- | ---------------- | 3078| 401 | Parameter error. | 3079 3080**示例:** 3081 3082```ts 3083import { socket } from '@kit.NetworkKit'; 3084 3085let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3086 3087let listenAddr: socket.NetAddress = { 3088 address: '192.168.xx.xxx', 3089 port: 8080, 3090 family: 1 3091} 3092tcpServer.listen(listenAddr, (err: BusinessError) => { 3093 if (err) { 3094 console.log("listen fail"); 3095 return; 3096 } 3097 console.log("listen success"); 3098 let callback = (data: socket.TCPSocketConnection) => { 3099 console.log('on connect message: ' + JSON.stringify(data)); 3100 } 3101 tcpServer.on('connect', callback); 3102 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3103 tcpServer.off('connect', callback); 3104 tcpServer.off('connect'); 3105}) 3106``` 3107 3108### on('error')<sup>10+</sup> 3109 3110on(type: 'error', callback: ErrorCallback): void 3111 3112订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3113 3114> **说明:** 3115> listen方法调用成功后,才可调用此方法。 3116 3117**系统能力**:SystemCapability.Communication.NetStack 3118 3119**参数:** 3120 3121| 参数名 | 类型 | 必填 | 说明 | 3122| -------- | ------------- | ---- | ------------------------------------ | 3123| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3124| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。| 3125 3126**错误码:** 3127 3128| 错误码ID | 错误信息 | 3129| -------- | ---------------- | 3130| 401 | Parameter error. | 3131 3132**示例:** 3133 3134```ts 3135import { socket } from '@kit.NetworkKit'; 3136import { BusinessError } from '@kit.BasicServicesKit'; 3137 3138let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3139 3140let listenAddr: socket.NetAddress = { 3141 address: '192.168.xx.xxx', 3142 port: 8080, 3143 family: 1 3144} 3145tcpServer.listen(listenAddr, (err: BusinessError) => { 3146 if (err) { 3147 console.log("listen fail"); 3148 return; 3149 } 3150 console.log("listen success"); 3151 tcpServer.on('error', (err: BusinessError) => { 3152 console.log("on error, err:" + JSON.stringify(err)) 3153 }); 3154}) 3155``` 3156 3157### off('error')<sup>10+</sup> 3158 3159off(type: 'error', callback?: ErrorCallback): void 3160 3161取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3162 3163**系统能力**:SystemCapability.Communication.NetStack 3164 3165**参数:** 3166 3167| 参数名 | 类型 | 必填 | 说明 | 3168| -------- | ------------- | ---- | ------------------------------------ | 3169| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3170| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 3171 3172**错误码:** 3173 3174| 错误码ID | 错误信息 | 3175| -------- | ---------------- | 3176| 401 | Parameter error. | 3177 3178**示例:** 3179 3180```ts 3181import { socket } from '@kit.NetworkKit'; 3182import { BusinessError } from '@kit.BasicServicesKit'; 3183 3184let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3185 3186let listenAddr: socket.NetAddress = { 3187 address: '192.168.xx.xxx', 3188 port: 8080, 3189 family: 1 3190} 3191tcpServer.listen(listenAddr, (err: BusinessError) => { 3192 if (err) { 3193 console.log("listen fail"); 3194 return; 3195 } 3196 console.log("listen success"); 3197 let callback = (err: BusinessError) => { 3198 console.log("on error, err:" + JSON.stringify(err)); 3199 } 3200 tcpServer.on('error', callback); 3201 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3202 tcpServer.off('error', callback); 3203 tcpServer.off('error'); 3204}) 3205``` 3206 3207## TCPSocketConnection<sup>10+</sup> 3208 3209TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。 3210 3211> **说明:** 3212> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。 3213 3214**系统能力**:SystemCapability.Communication.NetStack 3215 3216### 属性 3217 3218| 名称 | 类型 | 必填 | 说明 | 3219| -------- | ------ | ---- | ----------------------------------------- | 3220| clientId | number | 是 | 客户端与TCPSocketServer建立连接的id。 | 3221 3222### send<sup>10+</sup> 3223 3224send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 3225 3226通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。 3227 3228> **说明:** 3229> 与客户端建立连接后,才可调用此方法。 3230 3231**需要权限**:ohos.permission.INTERNET 3232 3233**系统能力**:SystemCapability.Communication.NetStack 3234 3235**参数:** 3236 3237| 参数名 | 类型 | 必填 | 说明 | 3238| -------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3239| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3240| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3241 3242**错误码:** 3243 3244| 错误码ID | 错误信息 | 3245| -------- | ---------------------- | 3246| 401 | Parameter error. | 3247| 201 | Permission denied. | 3248| 2300002 | System internal error. | 3249 3250**示例:** 3251 3252```ts 3253import { socket } from '@kit.NetworkKit'; 3254 3255let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3256 3257tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3258 let tcpSendOption: socket.TCPSendOptions = { 3259 data: 'Hello, client!' 3260 } 3261 client.send(tcpSendOption, () => { 3262 console.log('send success'); 3263 }); 3264}); 3265``` 3266 3267### send<sup>10+</sup> 3268 3269send(options: TCPSendOptions): Promise\<void\> 3270 3271通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。 3272 3273> **说明:** 3274> 与客户端建立连接后,才可调用此方法。 3275 3276**需要权限**:ohos.permission.INTERNET 3277 3278**系统能力**:SystemCapability.Communication.NetStack 3279 3280**参数:** 3281 3282| 参数名 | 类型 | 必填 | 说明 | 3283| ------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3284| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3285 3286**返回值:** 3287 3288| 类型 | 说明 | 3289| -------------- | ----------------------------------------------------------- | 3290| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 3291 3292**错误码:** 3293 3294| 错误码ID | 错误信息 | 3295| -------- | ---------------------- | 3296| 401 | Parameter error. | 3297| 201 | Permission denied. | 3298| 2300002 | System internal error. | 3299 3300**示例:** 3301 3302```ts 3303import { socket } from '@kit.NetworkKit'; 3304import { BusinessError } from '@kit.BasicServicesKit'; 3305 3306let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3307 3308tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3309 let tcpSendOption: socket.TCPSendOptions = { 3310 data: 'Hello, client!' 3311 } 3312 client.send(tcpSendOption).then(() => { 3313 console.log('send success'); 3314 }).catch((err: BusinessError) => { 3315 console.log('send fail'); 3316 }); 3317}); 3318``` 3319 3320### close<sup>10+</sup> 3321 3322close(callback: AsyncCallback\<void\>): void 3323 3324关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。 3325 3326**需要权限**:ohos.permission.INTERNET 3327 3328**系统能力**:SystemCapability.Communication.NetStack 3329 3330**参数:** 3331 3332| 参数名 | 类型 | 必填 | 说明 | 3333| -------- | --------------------- | ---- | ---------- | 3334| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3335 3336**错误码:** 3337 3338| 错误码ID | 错误信息 | 3339| -------- | ---------------------- | 3340| 401 | Parameter error. | 3341| 201 | Permission denied. | 3342| 2300002 | System internal error. | 3343 3344**示例:** 3345 3346```ts 3347import { socket } from '@kit.NetworkKit'; 3348import { BusinessError } from '@kit.BasicServicesKit'; 3349 3350let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3351 3352tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3353 client.close((err: BusinessError) => { 3354 if (err) { 3355 console.log('close fail'); 3356 return; 3357 } 3358 console.log('close success'); 3359 }); 3360}); 3361``` 3362 3363### close<sup>10+</sup> 3364 3365close(): Promise\<void\> 3366 3367关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。 3368 3369**需要权限**:ohos.permission.INTERNET 3370 3371**系统能力**:SystemCapability.Communication.NetStack 3372 3373**返回值:** 3374 3375| 类型 | 说明 | 3376| -------------- | ------------------------------------------- | 3377| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 3378 3379**错误码:** 3380 3381| 错误码ID | 错误信息 | 3382| -------- | ---------------------- | 3383| 201 | Permission denied. | 3384| 2300002 | System internal error. | 3385 3386**示例:** 3387 3388```ts 3389import { socket } from '@kit.NetworkKit'; 3390 3391let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3392tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3393 client.close().then(() => { 3394 console.log('close success'); 3395 }).catch((err: BusinessError) => { 3396 console.log('close fail'); 3397 }); 3398}); 3399``` 3400 3401### getRemoteAddress<sup>10+</sup> 3402 3403getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 3404 3405获取对端Socket地址。使用callback方式作为异步方法。 3406 3407> **说明:** 3408> 与客户端建立连接后,才可调用此方法。 3409 3410**需要权限**:ohos.permission.INTERNET 3411 3412**系统能力**:SystemCapability.Communication.NetStack 3413 3414**参数:** 3415 3416| 参数名 | 类型 | 必填 | 说明 | 3417| -------- | ---------------------------------------- | ---- | ---------- | 3418| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3419 3420**错误码:** 3421 3422| 错误码ID | 错误信息 | 3423| -------- | ------------------------------- | 3424| 401 | Parameter error. | 3425| 201 | Permission denied. | 3426| 2300002 | System internal error. | 3427| 2303188 | Socket operation on non-socket. | 3428 3429**示例:** 3430 3431```ts 3432import { socket } from '@kit.NetworkKit'; 3433import { BusinessError } from '@kit.BasicServicesKit'; 3434 3435let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3436tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3437 client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 3438 if (err) { 3439 console.log('getRemoteAddress fail'); 3440 return; 3441 } 3442 console.log('getRemoteAddress success:' + JSON.stringify(data)); 3443 }); 3444}); 3445``` 3446 3447### getRemoteAddress<sup>10+</sup> 3448 3449getRemoteAddress(): Promise\<NetAddress\> 3450 3451获取对端Socket地址。使用Promise方式作为异步方法。 3452 3453> **说明:** 3454> 与客户端建立连接后,才可调用此方法。 3455 3456**需要权限**:ohos.permission.INTERNET 3457 3458**系统能力**:SystemCapability.Communication.NetStack 3459 3460**返回值:** 3461 3462| 类型 | 说明 | 3463| --------------------------------- | ------------------------------------------ | 3464| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 3465 3466**错误码:** 3467 3468| 错误码ID | 错误信息 | 3469| -------- | ------------------------------- | 3470| 201 | Permission denied. | 3471| 2300002 | System internal error. | 3472| 2303188 | Socket operation on non-socket. | 3473 3474**示例:** 3475 3476```ts 3477import { socket } from '@kit.NetworkKit'; 3478import { BusinessError } from '@kit.BasicServicesKit'; 3479 3480let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3481tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3482 client.getRemoteAddress().then(() => { 3483 console.log('getRemoteAddress success'); 3484 }).catch((err: BusinessError) => { 3485 console.log('getRemoteAddress fail'); 3486 }); 3487}); 3488``` 3489 3490### getLocalAddress<sup>12+</sup> 3491 3492getLocalAddress(): Promise\<NetAddress\> 3493 3494获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 3495 3496**系统能力**:SystemCapability.Communication.NetStack 3497 3498**返回值:** 3499 3500| 类型 | 说明 | 3501| -------------- | --------------------------------------------------- | 3502| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 3503 3504**错误码:** 3505 3506| 错误码ID | 错误信息 | 3507| -------- | ------------------------------------------- | 3508| 2300002 | System internal error. | 3509| 2301009 | Bad file descriptor. | 3510| 2303188 | Socket operation on non-socket. | 3511 3512**示例:** 3513 3514```ts 3515import { socket } from '@kit.NetworkKit'; 3516import { BusinessError } from '@kit.BasicServicesKit'; 3517 3518let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3519let listenAddr: socket.NetAddress = { 3520 address: "192.168.xx.xx", 3521 port: 8080, 3522 family: 1 3523} 3524tcpServer.listen(listenAddr, (err: BusinessError) => { 3525 let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 3526 let netAddress: socket.NetAddress = { 3527 address: "192.168.xx.xx", 3528 port: 8080 3529 } 3530 let options: socket.TCPConnectOptions = { 3531 address: netAddress, 3532 timeout: 6000 3533 } 3534 tcp.connect(options, (err: BusinessError) => { 3535 if (err) { 3536 console.error('connect fail'); 3537 return; 3538 } 3539 console.info('connect success!'); 3540 }) 3541 tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3542 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 3543 console.info("Family IP Port: " + JSON.stringify(localAddress)); 3544 }).catch((err: BusinessError) => { 3545 console.error('Error:' + JSON.stringify(err)); 3546 }); 3547 }) 3548}) 3549``` 3550 3551### on('message')<sup>10+</sup> 3552 3553on(type: 'message', callback: Callback<SocketMessageInfo\>): void 3554 3555订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 3556 3557**系统能力**:SystemCapability.Communication.NetStack 3558 3559**参数:** 3560 3561| 参数名 | 类型 | 必填 | 说明 | 3562| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 3563| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 3564| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3565 3566**错误码:** 3567 3568| 错误码ID | 错误信息 | 3569| -------- | ---------------- | 3570| 401 | Parameter error. | 3571 3572**示例:** 3573 3574```ts 3575import { socket } from '@kit.NetworkKit'; 3576import { BusinessError } from '@kit.BasicServicesKit'; 3577 3578let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3579 3580tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3581 client.on('message', (value: socket.SocketMessageInfo) => { 3582 let messageView = ''; 3583 for (let i: number = 0; i < value.message.byteLength; i++) { 3584 let uint8Array = new Uint8Array(value.message) 3585 let messages = uint8Array[i] 3586 let message = String.fromCharCode(messages); 3587 messageView += message; 3588 } 3589 console.log('on message message: ' + JSON.stringify(messageView)); 3590 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 3591 }); 3592}); 3593``` 3594 3595### off('message')<sup>10+</sup> 3596 3597off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 3598 3599取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 3600 3601**系统能力**:SystemCapability.Communication.NetStack 3602 3603**参数:** 3604 3605| 参数名 | 类型 | 必填 | 说明 | 3606| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 3607| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 3608| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3609 3610**错误码:** 3611 3612| 错误码ID | 错误信息 | 3613| -------- | ---------------- | 3614| 401 | Parameter error. | 3615 3616**示例:** 3617 3618```ts 3619import { socket } from '@kit.NetworkKit'; 3620import { BusinessError } from '@kit.BasicServicesKit'; 3621 3622let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3623let callback = (value: socket.SocketMessageInfo) => { 3624 let messageView = ''; 3625 for (let i: number = 0; i < value.message.byteLength; i++) { 3626 let uint8Array = new Uint8Array(value.message) 3627 let messages = uint8Array[i] 3628 let message = String.fromCharCode(messages); 3629 messageView += message; 3630 } 3631 console.log('on message message: ' + JSON.stringify(messageView)); 3632 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 3633} 3634tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3635 client.on('message', callback); 3636 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3637 client.off('message', callback); 3638 client.off('message'); 3639}); 3640``` 3641 3642### on('close')<sup>10+</sup> 3643 3644on(type: 'close', callback: Callback\<void\>): void 3645 3646订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 3647 3648**系统能力**:SystemCapability.Communication.NetStack 3649 3650**参数:** 3651 3652| 参数名 | 类型 | 必填 | 说明 | 3653| -------- | ---------------- | ---- | ----------------------------------- | 3654| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 3655| callback | Callback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3656 3657**错误码:** 3658 3659| 错误码ID | 错误信息 | 3660| -------- | ---------------- | 3661| 401 | Parameter error. | 3662 3663**示例:** 3664 3665```ts 3666import { socket } from '@kit.NetworkKit'; 3667import { BusinessError } from '@kit.BasicServicesKit'; 3668 3669let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3670tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3671 client.on('close', () => { 3672 console.log("on close success") 3673 }); 3674}); 3675``` 3676 3677### off('close')<sup>10+</sup> 3678 3679off(type: 'close', callback?: Callback\<void\>): void 3680 3681取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 3682 3683**系统能力**:SystemCapability.Communication.NetStack 3684 3685**参数:** 3686 3687| 参数名 | 类型 | 必填 | 说明 | 3688| -------- | ---------------- | ---- | ----------------------------------- | 3689| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 3690| callback | Callback\<void\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3691 3692**错误码:** 3693 3694| 错误码ID | 错误信息 | 3695| -------- | ---------------- | 3696| 401 | Parameter error. | 3697 3698**示例:** 3699 3700```ts 3701import { socket } from '@kit.NetworkKit'; 3702 3703let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3704let callback = () => { 3705 console.log("on close success"); 3706} 3707tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3708 client.on('close', callback); 3709 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3710 client.off('close', callback); 3711 client.off('close'); 3712}); 3713``` 3714 3715### on('error')<sup>10+</sup> 3716 3717on(type: 'error', callback: ErrorCallback): void 3718 3719订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 3720 3721**系统能力**:SystemCapability.Communication.NetStack 3722 3723**参数:** 3724 3725| 参数名 | 类型 | 必填 | 说明 | 3726| -------- | ------------- | ---- | ------------------------------------ | 3727| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3728| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 3729 3730**错误码:** 3731 3732| 错误码ID | 错误信息 | 3733| -------- | ---------------- | 3734| 401 | Parameter error. | 3735 3736**示例:** 3737 3738```ts 3739import { socket } from '@kit.NetworkKit'; 3740import { BusinessError } from '@kit.BasicServicesKit'; 3741 3742let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3743tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3744 client.on('error', (err: BusinessError) => { 3745 console.log("on error, err:" + JSON.stringify(err)) 3746 }); 3747}); 3748``` 3749 3750### off('error')<sup>10+</sup> 3751 3752off(type: 'error', callback?: ErrorCallback): void 3753 3754取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 3755 3756**系统能力**:SystemCapability.Communication.NetStack 3757 3758**参数:** 3759 3760| 参数名 | 类型 | 必填 | 说明 | 3761| -------- | ------------- | ---- | ------------------------------------ | 3762| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3763| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 3764 3765**错误码:** 3766 3767| 错误码ID | 错误信息 | 3768| -------- | ---------------- | 3769| 401 | Parameter error. | 3770 3771**示例:** 3772 3773```ts 3774import { socket } from '@kit.NetworkKit'; 3775import { BusinessError } from '@kit.BasicServicesKit'; 3776 3777let callback = (err: BusinessError) => { 3778 console.log("on error, err:" + JSON.stringify(err)); 3779} 3780let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3781tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3782 client.on('error', callback); 3783 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3784 client.off('error', callback); 3785 client.off('error'); 3786}); 3787``` 3788 3789## TCP 错误码说明 3790 3791TCP 其余错误码映射形式为:2301000 + Linux内核错误码。 3792 3793错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 3794 3795## socket.constructLocalSocketInstance<sup>11+</sup> 3796 3797constructLocalSocketInstance(): LocalSocket 3798 3799创建一个LocalSocket对象。 3800 3801**系统能力**:SystemCapability.Communication.NetStack 3802 3803**返回值:** 3804 3805| 类型 | 说明 | 3806 | :--------------------------------- | :---------------------- | 3807| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 | 3808 3809**示例:** 3810 3811```ts 3812import { socket } from '@kit.NetworkKit'; 3813let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 3814``` 3815 3816## LocalSocket<sup>11+</sup> 3817 3818LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。 3819 3820### bind<sup>11+</sup> 3821 3822bind(address: LocalAddress): Promise\<void\>; 3823 3824绑定本地套接字文件的路径。使用promise方法作为异步方法。 3825 3826> **说明:** 3827> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。 3828> bind方法在本地套接字通信中非必须。 3829 3830**系统能力**:SystemCapability.Communication.NetStack 3831 3832**参数:** 3833 3834| 参数名 | 类型 | 必填 | 说明 | 3835| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 3836| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息,参考[LocalAddress](#localaddress11)。 | 3837 3838**错误码:** 3839 3840| 错误码ID | 错误信息 | 3841| ------- | -------------------------- | 3842| 401 | Parameter error. | 3843| 2301013 | Insufficient permissions. | 3844| 2301022 | Invalid argument. | 3845| 2301098 | Address already in use. | 3846 3847**示例:** 3848 3849```ts 3850import { socket } from '@kit.NetworkKit'; 3851 3852let client: socket.LocalSocket = socket.constructLocalSocketInstance() 3853let sandboxPath: string = getContext().filesDir + '/testSocket' 3854let address : socket.LocalAddress = { 3855 address: sandboxPath 3856} 3857client.bind(address).then(() => { 3858 console.log('bind success') 3859}).catch((err: Object) => { 3860 console.error('failed to bind: ' + JSON.stringify(err)) 3861}) 3862``` 3863 3864### connect<sup>11+</sup> 3865 3866connect(options: LocalConnectOptions): Promise\<void\> 3867 3868连接到指定的套接字文件。使用promise方法作为异步方法。 3869 3870> **说明:** 3871> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。 3872 3873**系统能力**:SystemCapability.Communication.NetStack 3874 3875**参数:** 3876 3877| 参数名 | 类型 | 必填 | 说明 | 3878| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 3879| options | [LocalConnectOptions](#localconnectoptions11) | 是 | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 | 3880 3881**返回值:** 3882 3883| 类型 | 说明 | 3884| :-------------- | :---------------------------------------- | 3885| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 | 3886 3887**错误码:** 3888 3889| 错误码ID | 错误信息 | 3890| ------- | ----------------------- | 3891| 401 | Parameter error. | 3892| 2301013 | Insufficient permissions. | 3893| 2301022 | Invalid argument. | 3894| 2301111 | Connection refused. | 3895| 2301099 | Cannot assign requested address. | 3896 3897**示例:** 3898 3899```ts 3900import { socket } from '@kit.NetworkKit'; 3901 3902let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 3903let sandboxPath: string = getContext().filesDir + '/testSocket' 3904let localAddress : socket.LocalAddress = { 3905 address: sandboxPath 3906} 3907let connectOpt: socket.LocalConnectOptions = { 3908 address: localAddress, 3909 timeout: 6000 3910} 3911client.connect(connectOpt).then(() => { 3912 console.log('connect success') 3913}).catch((err: Object) => { 3914 console.error('connect fail: ' + JSON.stringify(err)); 3915}); 3916``` 3917 3918### send<sup>11+</sup> 3919 3920send(options: LocalSendOptions): Promise\<void\> 3921 3922通过LocalSocket连接发送数据。使用Promise方式作为异步方法。 3923 3924> **说明:** 3925> connect方法调用成功后,才可调用此方法。 3926 3927**系统能力**:SystemCapability.Communication.NetStack 3928 3929**参数:** 3930 3931| 参数名 | 类型 | 必填 | 说明 | 3932| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 3933| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 | 3934 3935**返回值:** 3936 3937| 类型 | 说明 | 3938| :-------------- | :------------------------------------------ | 3939| Promise\<void\> | 以Promise形式返回通过LocalSocket发送数据的结果。 | 3940 3941**错误码:** 3942 3943| 错误码ID | 错误信息 | 3944| ------- | ----------------------- | 3945| 401 | Parameter error. | 3946| 2301011 | Operation would block. | 3947 3948**示例:** 3949 3950```ts 3951import { socket } from '@kit.NetworkKit'; 3952 3953let client: socket.LocalSocket = socket.constructLocalSocketInstance() 3954let sandboxPath: string = getContext().filesDir + '/testSocket' 3955let localAddress : socket.LocalAddress = { 3956 address: sandboxPath 3957} 3958let connectOpt: socket.LocalConnectOptions = { 3959 address: localAddress, 3960 timeout: 6000 3961} 3962client.connect(connectOpt).then(() => { 3963 console.log('connect success') 3964}).catch((err: Object) => { 3965 console.error('connect failed: ' + JSON.stringify(err)) 3966}) 3967let sendOpt: socket.LocalSendOptions = { 3968 data: 'Hello world!' 3969} 3970client.send(sendOpt).then(() => { 3971 console.log('send success') 3972}).catch((err: Object) => { 3973 console.error('send fail: ' + JSON.stringify(err)) 3974}) 3975``` 3976 3977### close<sup>11+</sup> 3978 3979close(): Promise\<void\> 3980 3981关闭LocalSocket连接。使用Promise方式作为异步方法。 3982 3983**系统能力**:SystemCapability.Communication.NetStack 3984 3985**返回值:** 3986 3987| 类型 | 说明 | 3988| :-------------- | :----------------------------------------- | 3989| Promise\<void\> | 以Promise形式返回关闭LocalSocket连接的结果。 | 3990 3991**错误码:** 3992 3993| 错误码ID | 错误信息 | 3994| ------- | ----------------------- | 3995| 2301009 | Bad file descriptor. | 3996 3997**示例:** 3998 3999```ts 4000import { socket } from '@kit.NetworkKit'; 4001 4002let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4003 4004client.close().then(() => { 4005 console.log('close success'); 4006}).catch((err: Object) => { 4007 console.error('close fail: ' + JSON.stringify(err)); 4008}); 4009``` 4010 4011### getState<sup>11+</sup> 4012 4013getState(): Promise\<SocketStateBase\> 4014 4015获取LocalSocket状态。使用Promise方式作为异步方法。 4016 4017> **说明:** 4018> bind或connect方法调用成功后,才可调用此方法。 4019 4020**系统能力**:SystemCapability.Communication.NetStack 4021 4022**返回值:** 4023 4024| 类型 | 说明 | 4025| :------------------------------------------- | :--------------------------------------- | 4026| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 | 4027 4028**示例:** 4029 4030```ts 4031import { socket } from '@kit.NetworkKit'; 4032 4033let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4034let sandboxPath: string = getContext().filesDir + '/testSocket' 4035let localAddress : socket.LocalAddress = { 4036 address: sandboxPath 4037} 4038let connectOpt: socket.LocalConnectOptions = { 4039 address: localAddress, 4040 timeout: 6000 4041} 4042client.connect(connectOpt).then(() => { 4043 console.log('connect success'); 4044 client.getState().then(() => { 4045 console.log('getState success'); 4046 }).catch((err: Object) => { 4047 console.error('getState fail: ' + JSON.stringify(err)) 4048 }); 4049}).catch((err: Object) => { 4050 console.error('connect fail: ' + JSON.stringify(err)); 4051}); 4052``` 4053 4054### getSocketFd<sup>11+</sup> 4055 4056getSocketFd(): Promise\<number\> 4057 4058获取LocalSocket的文件描述符。使用Promise方式作为异步方法。 4059 4060> **说明:** 4061> bind或connect方法调用成功后,才可调用此方法。 4062> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。 4063 4064**系统能力**:SystemCapability.Communication.NetStack 4065 4066**返回值:** 4067 4068| 类型 | 说明 | 4069| :---------------- | :-------------------------------- | 4070| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 4071 4072**示例:** 4073 4074```ts 4075import { socket } from '@kit.NetworkKit'; 4076 4077let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4078let sandboxPath: string = getContext().filesDir + '/testSocket' 4079let localAddress : socket.LocalAddress = { 4080 address: sandboxPath 4081} 4082let connectOpt: socket.LocalConnectOptions = { 4083 address: localAddress, 4084 timeout: 6000 4085} 4086client.connect(connectOpt).then(() => { 4087 console.log('connect ok') 4088}).catch((err: Object) => { 4089 console.error('connect fail: ' + JSON.stringify(err)) 4090}) 4091client.getSocketFd().then((data: number) => { 4092 console.info("fd: " + data); 4093}).catch((err: Object) => { 4094 console.error("getSocketFd faile: " + JSON.stringify(err)); 4095}) 4096``` 4097 4098### setExtraOptions<sup>11+</sup> 4099 4100setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 4101 4102设置LocalSocket的套接字属性,使用Promise方式作为异步方法。 4103 4104> **说明:** 4105> bind或connect方法调用成功后,才可调用此方法。 4106 4107**系统能力**:SystemCapability.Communication.NetStack 4108 4109**参数:** 4110 4111| 参数名 | 类型 | 必填 | 说明 | 4112| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 4113| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 | 4114 4115**返回值:** 4116 4117| 类型 | 说明 | 4118| :-------------- | :-------------------------------------------- | 4119| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 | 4120 4121**错误码:** 4122 4123| 错误码ID | 错误信息 | 4124| ------- | ----------------------- | 4125| 401 | Parameter error. | 4126| 2301009 | Bad file descriptor. | 4127 4128**示例:** 4129 4130```ts 4131import { socket } from '@kit.NetworkKit'; 4132 4133let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4134let sandboxPath: string = getContext().filesDir + '/testSocket' 4135let localAddress : socket.LocalAddress = { 4136 address: sandboxPath 4137} 4138let connectOpt: socket.LocalConnectOptions = { 4139 address: localAddress, 4140 timeout: 6000 4141} 4142client.connect(connectOpt).then(() => { 4143 console.log('connect success'); 4144 let options: socket.ExtraOptionsBase = { 4145 receiveBufferSize: 8000, 4146 sendBufferSize: 8000, 4147 socketTimeout: 3000 4148 } 4149 client.setExtraOptions(options).then(() => { 4150 console.log('setExtraOptions success'); 4151 }).catch((err: Object) => { 4152 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4153 }); 4154}).catch((err: Object) => { 4155 console.error('connect fail: ' + JSON.stringify(err)); 4156}); 4157``` 4158 4159### getExtraOptions<sup>11+</sup> 4160 4161getExtraOptions(): Promise\<ExtraOptionsBase\>; 4162 4163获取LocalSocket的套接字属性,使用Promise方式作为异步方法。 4164 4165> **说明:** 4166> bind或connect方法调用成功后,才可调用此方法。 4167 4168**系统能力**:SystemCapability.Communication.NetStack 4169 4170**返回值:** 4171 4172| 类型 | 说明 | 4173| :-------------------------- | :---------------------------------------- | 4174| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 | 4175 4176**错误码:** 4177 4178| 错误码ID | 错误信息 | 4179| ------- | ----------------------- | 4180| 2301009 | Bad file descriptor. | 4181 4182**示例:** 4183 4184```ts 4185import { socket } from '@kit.NetworkKit'; 4186 4187let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4188let sandboxPath: string = getContext().filesDir + '/testSocket' 4189let localAddress : socket.LocalAddress = { 4190 address: sandboxPath 4191} 4192let connectOpt: socket.LocalConnectOptions = { 4193 address: localAddress, 4194 timeout: 6000 4195} 4196client.connect(connectOpt).then(() => { 4197 console.log('connect success'); 4198 client.getExtraOptions().then((options : socket.ExtraOptionsBase) => { 4199 console.log('options: ' + JSON.stringify(options)); 4200 }).catch((err: Object) => { 4201 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4202 }); 4203}).catch((err: Object) => { 4204 console.error('connect fail: ' + JSON.stringify(err)); 4205}); 4206``` 4207 4208### getLocalAddress<sup>12+</sup> 4209 4210getLocalAddress(): Promise\<string\> 4211 4212获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。 4213 4214> **说明:** 4215> bind方法调用成功后,才可调用此方法。 4216 4217**系统能力**:SystemCapability.Communication.NetStack 4218 4219**返回值:** 4220 4221| 类型 | 说明 | 4222| -------------- | --------------------------------------------------- | 4223| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 4224 4225**错误码:** 4226 4227| 错误码ID | 错误信息 | 4228| -------- | ------------------------------------------- | 4229| 2300002 | System internal error. | 4230| 2301009 | Bad file descriptor. | 4231| 2303188 | Socket operation on non-socket. | 4232 4233**示例:** 4234 4235```ts 4236let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4237let sandboxPath: string = getContext().filesDir + '/testSocket'; 4238let address : socket.LocalAddress = { 4239 address: sandboxPath 4240} 4241client.bind(address).then(() => { 4242 console.error('bind success'); 4243 client.getLocalAddress().then((localPath: string) => { 4244 console.info("SUCCESS " + JSON.stringify(localPath)); 4245 }).catch((err: BusinessError) => { 4246 console.error("FAIL " + JSON.stringify(err)); 4247 }) 4248}).catch((err: Object) => { 4249 console.info('failed to bind: ' + JSON.stringify(err)); 4250}) 4251``` 4252 4253### on('message')<sup>11+</sup> 4254 4255on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void 4256 4257订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4258 4259**系统能力**:SystemCapability.Communication.NetStack 4260 4261**参数:** 4262 4263| 参数名 | 类型 | 必填 | 说明 | 4264| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 4265| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 4266| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收的消息。| 4267 4268**错误码:** 4269 4270| 错误码ID | 错误信息 | 4271| ------- | ----------------------- | 4272| 401 | Parameter error. | 4273 4274**示例:** 4275 4276```ts 4277import { socket } from '@kit.NetworkKit'; 4278 4279let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4280client.on('message', (value: socket.LocalSocketMessageInfo) => { 4281 const uintArray = new Uint8Array(value.message) 4282 let messageView = ''; 4283 for (let i = 0; i < uintArray.length; i++) { 4284 messageView += String.fromCharCode(uintArray[i]); 4285 } 4286 console.log('total: ' + JSON.stringify(value)); 4287 console.log('message infomation: ' + messageView); 4288}); 4289``` 4290 4291### off('message')<sup>11+</sup> 4292 4293off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 4294 4295取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4296 4297**系统能力**:SystemCapability.Communication.NetStack 4298 4299**参数:** 4300 4301| 参数名 | 类型 | 必填 | 说明 | 4302| -------- | ------------------------------------------------ | ---- | ----------------------------------- | 4303| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 4304| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on中的callback取消一个订阅。| 4305 4306**错误码:** 4307 4308| 错误码ID | 错误信息 | 4309| ------- | ----------------------- | 4310| 401 | Parameter error. | 4311 4312**示例:** 4313 4314```ts 4315import { socket } from '@kit.NetworkKit'; 4316 4317let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4318let messageView = ''; 4319let callback = (value: socket.LocalSocketMessageInfo) => { 4320 const uintArray = new Uint8Array(value.message) 4321 let messageView = ''; 4322 for (let i = 0; i < uintArray.length; i++) { 4323 messageView += String.fromCharCode(uintArray[i]); 4324 } 4325 console.log('total: ' + JSON.stringify(value)); 4326 console.log('message infomation: ' + messageView); 4327} 4328client.on('message', callback); 4329client.off('message'); 4330``` 4331 4332### on('connect')<sup>11+</sup> 4333 4334on(type: 'connect', callback: Callback\<void\>): void; 4335 4336订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4337 4338**系统能力**:SystemCapability.Communication.NetStack 4339 4340**参数:** 4341 4342| 参数名 | 类型 | 必填 | 说明 | 4343| -------- | ---------------- | ---- | --------------------------------------------------------- | 4344| type | string | 是 | 订阅的事件类型。 | 4345| callback | Callback\<void\> | 是 | 以callback的形式异步返回与服务端连接的结果。 | 4346 4347**错误码:** 4348 4349| 错误码ID | 错误信息 | 4350| ------- | ----------------------- | 4351| 401 | Parameter error. | 4352 4353**示例:** 4354 4355```ts 4356import { socket } from '@kit.NetworkKit'; 4357 4358let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4359client.on('connect', () => { 4360 console.log("on connect success") 4361}); 4362``` 4363 4364### off('connect')<sup>11+</sup> 4365 4366off(type: 'connect', callback?: Callback\<void\>): void; 4367 4368取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4369 4370**系统能力**:SystemCapability.Communication.NetStack 4371 4372**参数:** 4373 4374| 参数名 | 类型 | 必填 | 说明 | 4375| -------- | ---------------- | ---- | --------------------------------------------------------- | 4376| type | string | 是 | 订阅的事件类型。 | 4377| callback | Callback\<void\> | 否 | 指定传入on中的callback取消一个订阅。 | 4378 4379**错误码:** 4380 4381| 错误码ID | 错误信息 | 4382| ------- | ----------------------- | 4383| 401 | Parameter error. | 4384 4385**示例:** 4386 4387```ts 4388import { socket } from '@kit.NetworkKit'; 4389 4390let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4391let callback = () => { 4392 console.log("on connect success"); 4393} 4394client.on('connect', callback); 4395// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4396client.off('connect', callback); 4397client.off('connect'); 4398``` 4399 4400### on('close')<sup>11+</sup> 4401 4402on(type: 'close', callback: Callback\<void\>): void; 4403 4404订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4405 4406**系统能力**:SystemCapability.Communication.NetStack 4407 4408**参数:** 4409 4410| 参数名 | 类型 | 必填 | 说明 | 4411| -------- | ---------------- | ---- | ------------------------ | 4412| type | string | 是 | 订阅LocalSocket的关闭事件。 | 4413| callback | Callback\<void\> | 是 | 以callback的形式异步返回关闭localsocket的结果。| 4414 4415**错误码:** 4416 4417| 错误码ID | 错误信息 | 4418| ------- | ----------------------- | 4419| 401 | Parameter error. | 4420 4421**示例:** 4422 4423```ts 4424import { socket } from '@kit.NetworkKit'; 4425 4426let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4427let callback = () => { 4428 console.log("on close success"); 4429} 4430client.on('close', callback); 4431``` 4432 4433### off('close')<sup>11+</sup> 4434 4435off(type: 'close', callback?: Callback\<void\>): void; 4436 4437订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4438 4439**系统能力**:SystemCapability.Communication.NetStack 4440 4441**参数:** 4442 4443| 参数名 | 类型 | 必填 | 说明 | 4444| -------- | ---------------- | ---- | ------------------------ | 4445| type | string | 是 | 订阅LocalSocket的关闭事件。 | 4446| callback | Callback\<void\> | 否 | 取消指定传入on中的callback取消一个订阅。| 4447 4448**错误码:** 4449 4450| 错误码ID | 错误信息 | 4451| ------- | ----------------------- | 4452| 401 | Parameter error. | 4453 4454**示例:** 4455 4456```ts 4457import { socket } from '@kit.NetworkKit'; 4458 4459let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4460let callback = () => { 4461 console.log("on close success"); 4462} 4463client.on('close', callback); 4464// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4465client.off('close', callback); 4466client.off('close'); 4467``` 4468 4469### on('error')<sup>11+</sup> 4470 4471on(type: 'error', callback: ErrorCallback): void 4472 4473订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 4474 4475**系统能力**:SystemCapability.Communication.NetStack 4476 4477**参数:** 4478 4479| 参数名 | 类型 | 必填 | 说明 | 4480| -------- | ------------- | ---- | ---------------------------- | 4481| type | string | 是 | 订阅LocalSocket的error事件。 | 4482| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 4483 4484**错误码:** 4485 4486| 错误码ID | 错误信息 | 4487| ------- | ----------------------- | 4488| 401 | Parameter error. | 4489 4490**示例:** 4491 4492```ts 4493import { socket } from '@kit.NetworkKit'; 4494 4495let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4496client.on('error', (err: Object) => { 4497 console.log("on error, err:" + JSON.stringify(err)) 4498}); 4499``` 4500 4501### off('error')<sup>11+</sup> 4502 4503off(type: 'error', callback?: ErrorCallback): void; 4504 4505取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 4506 4507**系统能力**:SystemCapability.Communication.NetStack 4508 4509**参数:** 4510 4511| 参数名 | 类型 | 必填 | 说明 | 4512| -------- | ------------- | ---- | ----------------------------- | 4513| type | string | 是 | 取消订阅LocalSocket的error事件。 | 4514| callback | ErrorCallback | 否 | 指定传入on中的callback取消一个订阅。| 4515 4516**错误码:** 4517 4518| 错误码ID | 错误信息 | 4519| ------- | ----------------------- | 4520| 401 | Parameter error. | 4521 4522**示例:** 4523 4524```ts 4525import { socket } from '@kit.NetworkKit'; 4526 4527let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4528let callback = (err: Object) => { 4529 console.log("on error, err:" + JSON.stringify(err)); 4530} 4531client.on('error', callback); 4532// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4533client.off('error', callback); 4534client.off('error'); 4535``` 4536 4537## LocalSocketMessageInfo<sup>11+</sup> 4538 4539LocalSocket客户端与服务端通信时接收的数据。 4540 4541**系统能力**:SystemCapability.Communication.NetStack 4542 4543| 名称 | 类型 | 必填 | 说明 | 4544| ------- | --------------- | --- | ------------------ | 4545| message | ArrayBuffer | 是 | 收到的消息数据。 | 4546| address | string | 是 | 使用的本地套接字路径。| 4547| size | number | 是 | 数据长度。 | 4548 4549## LocalAddress<sup>11+</sup> 4550 4551LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。 4552 4553**系统能力**:SystemCapability.Communication.NetStack 4554 4555| 名称 | 类型 | 必填 | 说明 | 4556| ------- | ---------- | --- | ------------------ | 4557| address | string | 是 | 本地套接字路径。 | 4558 4559## LocalConnectOptions<sup>11+</sup> 4560 4561LocalSocket客户端在连接服务端时传入的参数信息。 4562 4563**系统能力**:SystemCapability.Communication.NetStack 4564 4565| 名称 | 类型 | 必填 | 说明 | 4566| ------- | ---------- | --- | ------------------------------ | 4567| address | [LocalAddress](#localaddress11) | 是 | 指定的本地套接字路径。 | 4568| timeout | number | 否 | 连接服务端的超时时间,单位为毫秒。 | 4569 4570## LocalSendOptions<sup>11+</sup> 4571 4572LocalSocket发送请求的参数。 4573 4574**系统能力**:SystemCapability.Communication.NetStack 4575 4576| 名称 | 类型 | 必填 | 说明 | 4577| ------- | ---------- | --- | ------------------- | 4578| data | string \| ArrayBuffer | 是 | 需要发送的数据。 | 4579| encoding | string | 否 | 字符编码。 | 4580 4581## ExtraOptionsBase<sup>7+</sup> 4582 4583Socket套接字的基础属性。 4584 4585**系统能力**:SystemCapability.Communication.NetStack 4586 4587| 名称 | 类型 | 必填 | 说明 | 4588| ----------------- | ------- | ---- | ----------------------------- | 4589| receiveBufferSize | number | 否 | 接收缓冲区大小(单位:Byte)。 | 4590| sendBufferSize | number | 否 | 发送缓冲区大小(单位:Byte)。 | 4591| reuseAddress | boolean | 否 | 是否重用地址。 | 4592| socketTimeout | number | 否 | 套接字超时时间,单位毫秒(ms)。 | 4593 4594## socket.constructLocalSocketServerInstance<sup>11+</sup> 4595 4596constructLocalSocketServerInstance(): LocalSocketServer 4597 4598创建一个LocalSocketServer对象。 4599 4600**系统能力**:SystemCapability.Communication.NetStack 4601 4602**返回值:** 4603 4604| 类型 | 说明 | 4605| :---------------------------------- | :---------------------------- | 4606| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 | 4607 4608**示例:** 4609 4610```ts 4611import { socket } from '@kit.NetworkKit'; 4612let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4613``` 4614 4615## LocalSocketServer<sup>11+</sup> 4616 4617LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。 4618 4619### listen<sup>11+</sup> 4620 4621listen(address: LocalAddress): Promise\<void\> 4622 4623绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 4624 4625> **说明:** 4626> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。 4627 4628**系统能力**:SystemCapability.Communication.NetStack 4629 4630**参数:** 4631 4632| 参数名 | 类型 | 必填 | 说明 | 4633| ------- | ------------------------- | ---- | --------------------------------------------- | 4634| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息。 | 4635 4636**返回值:** 4637 4638| 类型 | 说明 | 4639| :-------------- | :---------------------------------------------------- | 4640| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。| 4641 4642**错误码:** 4643 4644| 错误码ID | 错误信息 | 4645| -------- | --------------------------- | 4646| 401 | Parameter error. | 4647| 2303109 | Bad file number. | 4648| 2301013 | Insufficient permissions. | 4649| 2301022 | Invalid argument. | 4650| 2301098 | Address already in use. | 4651 4652**示例:** 4653 4654```ts 4655import { socket } from '@kit.NetworkKit'; 4656 4657let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4658let sandboxPath: string = getContext().filesDir + '/testSocket' 4659let addr: socket.LocalAddress = { 4660 address: sandboxPath 4661} 4662server.listen(addr).then(() => { 4663 console.log('listen success'); 4664}).catch((err: Object) => { 4665 console.error('listen fail: ' + JSON.stringify(err)); 4666}); 4667``` 4668 4669### getState<sup>11+</sup> 4670 4671getState(): Promise\<SocketStateBase\> 4672 4673获取LocalSocketServer状态。使用Promise方式作为异步方法。 4674 4675> **说明:** 4676> listen方法调用成功后,才可调用此方法。 4677 4678**系统能力**:SystemCapability.Communication.NetStack 4679 4680**返回值:** 4681 4682| 类型 | 说明 | 4683| :------------------------------------------- | :--------------------------------------------- | 4684| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 | 4685 4686**示例:** 4687 4688```ts 4689import { socket } from '@kit.NetworkKit'; 4690 4691let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4692let sandboxPath: string = getContext().filesDir + '/testSocket' 4693let listenAddr: socket.LocalAddress = { 4694 address: sandboxPath 4695} 4696server.listen(listenAddr).then(() => { 4697 console.log("listen success"); 4698}).catch((err: Object) => { 4699 console.error("listen fail: " + JSON.stringify(err)); 4700}) 4701server.getState().then((data: socket.SocketStateBase) => { 4702 console.log('getState success: ' + JSON.stringify(data)); 4703}).catch((err: Object) => { 4704 console.error('getState fail: ' + JSON.stringify(err)); 4705}); 4706``` 4707 4708### setExtraOptions<sup>11+</sup> 4709 4710setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 4711 4712设置LocalSocketServer连接的套接字属性,使用Promise方式作为异步方法。 4713 4714> **说明:** 4715> listen方法调用成功后,才可调用此方法。 4716 4717**系统能力**:SystemCapability.Communication.NetStack 4718 4719**参数:** 4720 4721| 参数名 | 类型 | 必填 | 说明 | 4722| ------- | --------------------------------------- | ---- | ------------------------------ | 4723| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocketServer连接的其他属性。 | 4724 4725**返回值:** 4726 4727| 类型 | 说明 | 4728| :-------------- | :---------------------------------------------- | 4729| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 4730 4731**错误码:** 4732 4733| 错误码ID | 错误信息 | 4734| -------- | ------------------------------- | 4735| 401 | Parameter error. | 4736| 2301009 | Bad file descriptor. | 4737 4738**示例:** 4739 4740```ts 4741import { socket } from '@kit.NetworkKit'; 4742 4743let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4744let sandboxPath: string = getContext().filesDir + '/testSocket' 4745let listenAddr: socket.NetAddress = { 4746 address: sandboxPath 4747} 4748server.listen(listenAddr).then(() => { 4749 console.log("listen success"); 4750}).catch((err: Object) => { 4751 console.error("listen fail: " + JSON.stringify(err)); 4752}) 4753 4754let options: socket.ExtraOptionsBase = { 4755 receiveBufferSize: 6000, 4756 sendBufferSize: 6000, 4757 socketTimeout: 3000 4758} 4759server.setExtraOptions(options).then(() => { 4760 console.log('setExtraOptions success'); 4761}).catch((err: Object) => { 4762 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4763}); 4764``` 4765 4766### getExtraOptions<sup>11+</sup> 4767 4768getExtraOptions(): Promise\<ExtraOptionsBase\>; 4769 4770获取LocalSocketServer中连接的套接字的属性,使用Promise方式作为异步方法。 4771 4772> **说明:** 4773> listen方法调用成功后,才可调用此方法。 4774 4775**系统能力**:SystemCapability.Communication.NetStack 4776 4777**返回值:** 4778 4779| 类型 | 说明 | 4780| :-------------------------- | :-------------------------- | 4781| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 | 4782 4783**错误码:** 4784 4785| 错误码ID | 错误信息 | 4786| -------- | -------------------- | 4787| 401 | Parameter error. | 4788 4789**示例:** 4790 4791```ts 4792import { socket } from '@kit.NetworkKit'; 4793 4794let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4795let sandboxPath: string = getContext().filesDir + '/testSocket' 4796let listenAddr: socket.LocalAddress = { 4797 address: sandboxPath 4798} 4799server.listen(listenAddr).then(() => { 4800 console.log("listen success"); 4801}).catch((err: Object) => { 4802 console.error("listen fail: " + JSON.stringify(err)); 4803}) 4804server.getExtraOptions().then((options: socket.ExtraOptionsBase) => { 4805 console.log('options: ' + JSON.stringify(options)); 4806}).catch((err: Object) => { 4807 console.error('getExtraOptions fail: ' + JSON.stringify(err)); 4808}); 4809``` 4810 4811### getLocalAddress<sup>12+</sup> 4812 4813getLocalAddress(): Promise\<string\> 4814 4815获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。 4816 4817> **说明:** 4818> listen方法调用成功后,才可调用此方法。 4819 4820**系统能力**:SystemCapability.Communication.NetStack 4821 4822**返回值:** 4823 4824| 类型 | 说明 | 4825| -------------- | --------------------------------------------------- | 4826| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 4827 4828**错误码:** 4829 4830| 错误码ID | 错误信息 | 4831| -------- | ------------------------------------------- | 4832| 2300002 | System internal error. | 4833| 2301009 | Bad file descriptor. | 4834| 2303188 | Socket operation on non-socket. | 4835 4836**示例:** 4837 4838```ts 4839let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4840let sandboxPath: string = getContext().filesDir + '/testSocket'; 4841let listenAddr: socket.LocalAddress = { 4842 address: sandboxPath 4843} 4844server.listen(listenAddr).then(() => { 4845 console.info("listen success"); 4846 server.getLocalAddress().then((localPath: string) => { 4847 console.info("SUCCESS " + JSON.stringify(localPath)); 4848 }).catch((err: BusinessError) => { 4849 console.error("FAIL " + JSON.stringify(err)); 4850 }) 4851}).catch((err: Object) => { 4852 console.error("listen fail: " + JSON.stringify(err)); 4853}) 4854 4855``` 4856 4857### on('connect')<sup>11+</sup> 4858 4859on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void 4860 4861订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 4862 4863> **说明:** 4864> listen方法调用成功后,才可调用此方法。 4865 4866**系统能力**:SystemCapability.Communication.NetStack 4867 4868**参数:** 4869 4870| 参数名 | 类型 | 必填 | 说明 | 4871| -------- | ------------------------------- | ---- | ------------------------------------- | 4872| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 4873| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是 | 以callback的形式异步返回接收到客户端连接的结果。| 4874 4875**错误码:** 4876 4877| 错误码ID | 错误信息 | 4878| -------- | ---------------- | 4879| 401 | Parameter error. | 4880 4881**示例:** 4882 4883```ts 4884import { socket } from '@kit.NetworkKit'; 4885 4886let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4887server.on('connect', (connection: socket.LocalSocketConnection) => { 4888 if (connection) { 4889 console.log('accept a client') 4890 } 4891}); 4892``` 4893 4894### off('connect')<sup>11+</sup> 4895 4896off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void 4897 4898取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 4899 4900**系统能力**:SystemCapability.Communication.NetStack 4901 4902**参数:** 4903 4904| 参数名 | 类型 | 必填 | 说明 | 4905| -------- | ------------------------------- | ---- | ------------------------------------- | 4906| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 4907| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否 | 指定传入on的一个callback取消注册。| 4908 4909**错误码:** 4910 4911| 错误码ID | 错误信息 | 4912| -------- | ---------------- | 4913| 401 | Parameter error. | 4914 4915**示例:** 4916 4917```ts 4918import { socket } from '@kit.NetworkKit'; 4919 4920let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4921let callback = (connection: socket.LocalSocketConnection) => { 4922 if (connection) { 4923 console.log('accept a client') 4924 } 4925} 4926server.on('connect', callback); 4927// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4928server.off('connect', callback); 4929server.off('connect'); 4930``` 4931 4932### on('error')<sup>11+</sup> 4933 4934on(type: 'error', callback: ErrorCallback): void 4935 4936订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 4937 4938> **说明:** 4939> listen方法调用成功后,才可调用此方法。 4940 4941**系统能力**:SystemCapability.Communication.NetStack 4942 4943**参数:** 4944 4945| 参数名 | 类型 | 必填 | 说明 | 4946| -------- | ------------- | ---- | ------------------------------------ | 4947| type | string | 是 | 订阅的事件类型。'error':error事件。 | 4948| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 4949 4950**错误码:** 4951 4952| 错误码ID | 错误信息 | 4953| -------- | ---------------- | 4954| 401 | Parameter error. | 4955 4956**示例:** 4957 4958```ts 4959import { socket } from '@kit.NetworkKit'; 4960 4961let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4962server.on('error', (err: Object) => { 4963 console.error("on error, err:" + JSON.stringify(err)) 4964}); 4965``` 4966 4967### off('error')<sup>11+</sup> 4968 4969off(type: 'error', callback?: ErrorCallback): void 4970 4971取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 4972 4973**系统能力**:SystemCapability.Communication.NetStack 4974 4975**参数:** 4976 4977| 参数名 | 类型 | 必填 | 说明 | 4978| -------- | ------------- | ---- | ------------------------------------ | 4979| type | string | 是 | 订阅的事件类型。'error':error事件。 | 4980| callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | 4981 4982**错误码:** 4983 4984| 错误码ID | 错误信息 | 4985| -------- | ---------------- | 4986| 401 | Parameter error. | 4987 4988**示例:** 4989 4990```ts 4991import { socket } from '@kit.NetworkKit'; 4992 4993let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4994let callback = (err: Object) => { 4995 console.error("on error, err:" + JSON.stringify(err)); 4996} 4997server.on('error', callback); 4998// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4999server.off('error', callback); 5000server.off('error'); 5001``` 5002 5003 5004## LocalSocketConnection<sup>11+</sup> 5005 5006LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。 5007 5008> **说明:** 5009> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。 5010 5011**系统能力**:SystemCapability.Communication.NetStack 5012 5013### 属性 5014 5015| 名称 | 类型 | 必填 | 说明 | 5016| -------- | ------ | ---- | ---------------------------- | 5017| clientId | number | 是 | 客户端与服务端建立的会话连接的id。 | 5018 5019### send<sup>11+</sup> 5020 5021send(options: LocalSendOptions): Promise\<void\> 5022 5023通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。 5024 5025> **说明:** 5026> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。 5027 5028**系统能力**:SystemCapability.Communication.NetStack 5029 5030**参数:** 5031 5032| 参数名 | 类型 | 必填 | 说明 | 5033| ------- | --------------------------------- | ---- | -------------------------------------- | 5034| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocketConnection发送请求的参数。 | 5035 5036**返回值:** 5037 5038| 类型 | 说明 | 5039| :-------------- | :---------------------------------------------- | 5040| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 5041 5042**错误码:** 5043 5044| 错误码ID | 错误信息 | 5045| -------- | ---------------------- | 5046| 401 | Parameter error. | 5047| 2301011 | Operation would block. | 5048 5049**示例:** 5050 5051```ts 5052import { socket } from '@kit.NetworkKit'; 5053 5054let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5055 5056server.on('connect', (connection: socket.LocalSocketConnection) => { 5057 let sendOptions: socket.LocalSendOptions = { 5058 data: 'Hello, client!' 5059 } 5060 connection.send(sendOptions).then(() => { 5061 console.log('send success'); 5062 }).catch((err: Object) => { 5063 console.error('send fail: ' + JSON.stringify(err)); 5064 }); 5065}); 5066``` 5067 5068### close<sup>11+</sup> 5069 5070close(): Promise\<void\> 5071 5072关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。 5073 5074**系统能力**:SystemCapability.Communication.NetStack 5075 5076**返回值:** 5077 5078| 类型 | 说明 | 5079| :-------------- | :------------------------------------------- | 5080| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 5081 5082**错误码:** 5083 5084| 错误码ID | 错误信息 | 5085| -------- | -------------------- | 5086| 2301009 | Bad file descriptor. | 5087 5088**示例:** 5089 5090```ts 5091import { socket } from '@kit.NetworkKit'; 5092 5093let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5094server.on('connect', (connection: socket.LocalSocketConnection) => { 5095 connection.close().then(() => { 5096 console.log('close success'); 5097 }).catch((err: Object) => { 5098 console.error('close fail: ' + JSON.stringify(err)); 5099 }); 5100}); 5101``` 5102 5103### getLocalAddress<sup>12+</sup> 5104 5105getLocalAddress(): Promise\<string\> 5106 5107获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。 5108 5109**系统能力**:SystemCapability.Communication.NetStack 5110 5111**返回值:** 5112 5113| 类型 | 说明 | 5114| -------------- | --------------------------------------------------- | 5115| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 5116 5117**错误码:** 5118 5119| 错误码ID | 错误信息 | 5120| -------- | ------------------------------------------- | 5121| 2300002 | System internal error. | 5122| 2301009 | Bad file descriptor. | 5123| 2303188 | Socket operation on non-socket. | 5124 5125**示例:** 5126 5127```ts 5128let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5129let sandboxPath: string = getContext().filesDir + '/testSocket'; 5130let localAddr: socket.LocalAddress = { 5131 address: sandboxPath 5132} 5133server.listen(localAddr).then(() => { 5134 console.info('listen success'); 5135 let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 5136 let connectOpt: socket.LocalConnectOptions = { 5137 address: localAddr, 5138 timeout: 6000 5139 } 5140 client.connect(connectOpt).then(() => { 5141 server.getLocalAddress().then((localPath: string) => { 5142 console.info("success, localPath is" + JSON.stringify(localPath)); 5143 }).catch((err: BusinessError) => { 5144 console.error("FAIL " + JSON.stringify(err)); 5145 }) 5146 }).catch((err: Object) => { 5147 console.error('connect fail: ' + JSON.stringify(err)); 5148 }); 5149}); 5150``` 5151 5152### on('message')<sup>11+</sup> 5153 5154on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void; 5155 5156订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5157 5158**系统能力**:SystemCapability.Communication.NetStack 5159 5160**参数:** 5161 5162| 参数名 | 类型 | 必填 | 说明 | 5163| -------- | ----------------------------------------------- | ---- | --------------------------------------- | 5164| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5165| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收到的来自客户端的消息。 | 5166 5167**错误码:** 5168 5169| 错误码ID | 错误信息 | 5170| -------- | ---------------- | 5171| 401 | Parameter error. | 5172 5173**示例:** 5174 5175```ts 5176import { socket } from '@kit.NetworkKit'; 5177 5178let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5179let sandboxPath: string = getContext().filesDir + '/testSocket' 5180let listenAddr: socket.LocalAddress = { 5181 address: sandboxPath 5182} 5183server.listen(listenAddr).then(() => { 5184 console.log("listen success"); 5185}).catch((err: Object) => { 5186 console.error("listen fail: " + JSON.stringify(err)); 5187}); 5188server.on('connect', (connection: socket.LocalSocketConnection) => { 5189 connection.on('message', (value: socket.LocalSocketMessageInfo) => { 5190 const uintArray = new Uint8Array(value.message); 5191 let messageView = ''; 5192 for (let i = 0; i < uintArray.length; i++) { 5193 messageView += String.fromCharCode(uintArray[i]); 5194 } 5195 console.log('total: ' + JSON.stringify(value)); 5196 console.log('message infomation: ' + messageView); 5197 }); 5198}); 5199``` 5200 5201### off('message')<sup>11+</sup> 5202 5203off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 5204 5205取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5206 5207**系统能力**:SystemCapability.Communication.NetStack 5208 5209**参数:** 5210 5211| 参数名 | 类型 | 必填 | 说明 | 5212| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 5213| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5214| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on的一个callback取消注册。 | 5215 5216**错误码:** 5217 5218| 错误码ID | 错误信息 | 5219| -------- | ---------------- | 5220| 401 | Parameter error. | 5221 5222**示例:** 5223 5224```ts 5225import { socket } from '@kit.NetworkKit'; 5226 5227let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5228let callback = (value: socket.LocalSocketMessageInfo) => { 5229 const uintArray = new Uint8Array(value.message) 5230 let messageView = ''; 5231 for (let i = 0; i < uintArray.length; i++) { 5232 messageView += String.fromCharCode(uintArray[i]); 5233 } 5234 console.log('total: ' + JSON.stringify(value)); 5235 console.log('message infomation: ' + messageView); 5236} 5237server.on('connect', (connection: socket.LocalSocketConnection) => { 5238 connection.on('message', callback); 5239 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5240 connection.off('message', callback); 5241 connection.off('message'); 5242}); 5243``` 5244 5245### on('close')<sup>11+</sup> 5246 5247on(type: 'close', callback: Callback\<void\>): void 5248 5249订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5250 5251**系统能力**:SystemCapability.Communication.NetStack 5252 5253**参数:** 5254 5255| 参数名 | 类型 | 必填 | 说明 | 5256| -------- | ---------------- | ---- | ----------------------------------- | 5257| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 5258| callback | Callback\<void\> | 是 | 以callback的形式异步返回会话关闭的结果。 | 5259 5260**错误码:** 5261 5262| 错误码ID | 错误信息 | 5263| -------- | ---------------- | 5264| 401 | Parameter error. | 5265 5266**示例:** 5267 5268```ts 5269import { socket } from '@kit.NetworkKit'; 5270 5271let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5272server.on('connect', (connection: socket.LocalSocketConnection) => { 5273 connection.on('close', () => { 5274 console.log("on close success") 5275 }); 5276}); 5277``` 5278 5279### off('close')<sup>11+</sup> 5280 5281off(type: 'close', callback?: Callback\<void\>): void 5282 5283取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5284 5285**系统能力**:SystemCapability.Communication.NetStack 5286 5287**参数:** 5288 5289| 参数名 | 类型 | 必填 | 说明 | 5290| -------- | ---------------- | ---- | ----------------------------------- | 5291| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 5292| callback | Callback\<void\> | 否 | 指定传入on的一个callback取消订阅。 | 5293 5294**错误码:** 5295 5296| 错误码ID | 错误信息 | 5297| -------- | ---------------- | 5298| 401 | Parameter error. | 5299 5300**示例:** 5301 5302```ts 5303import { socket } from '@kit.NetworkKit'; 5304 5305let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5306let callback = () => { 5307 console.log("on close success"); 5308} 5309server.on('connect', (connection: socket.LocalSocketConnection) => { 5310 connection.on('close', callback); 5311 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5312 connection.off('close', callback); 5313 connection.off('close'); 5314}); 5315``` 5316 5317### on('error')<sup>11+</sup> 5318 5319on(type: 'error', callback: ErrorCallback): void 5320 5321订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 5322 5323**系统能力**:SystemCapability.Communication.NetStack 5324 5325**参数:** 5326 5327| 参数名 | 类型 | 必填 | 说明 | 5328| -------- | ------------- | ---- | ------------------------------------ | 5329| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5330| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 5331 5332**错误码:** 5333 5334| 错误码ID | 错误信息 | 5335| -------- | ---------------- | 5336| 401 | Parameter error. | 5337 5338**示例:** 5339 5340```ts 5341import { socket } from '@kit.NetworkKit'; 5342 5343let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5344server.on('connect', (connection: socket.LocalSocketConnection) => { 5345 connection.on('error', (err: Object) => { 5346 console.error("on error, err:" + JSON.stringify(err)) 5347 }); 5348}); 5349``` 5350 5351### off('error')<sup>11+</sup> 5352 5353off(type: 'error', callback?: ErrorCallback): void 5354 5355取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 5356 5357**系统能力**:SystemCapability.Communication.NetStack 5358 5359**参数:** 5360 5361| 参数名 | 类型 | 必填 | 说明 | 5362| -------- | ------------- | ---- | ------------------------------------ | 5363| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5364| callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | 5365 5366**错误码:** 5367 5368| 错误码ID | 错误信息 | 5369| -------- | ---------------- | 5370| 401 | Parameter error. | 5371 5372**示例:** 5373 5374```ts 5375import { socket } from '@kit.NetworkKit'; 5376 5377let callback = (err: Object) => { 5378 console.error("on error, err: " + JSON.stringify(err)); 5379} 5380let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5381server.on('connect', (connection: socket.LocalSocketConnection) => { 5382 connection.on('error', callback); 5383 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5384 connection.off('error', callback); 5385 connection.off('error'); 5386}); 5387``` 5388 5389## LocalSocket 错误码说明 5390 5391LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。 5392 5393错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 5394 5395## socket.constructTLSSocketInstance<sup>9+</sup> 5396 5397constructTLSSocketInstance(): TLSSocket 5398 5399创建并返回一个TLSSocket对象。 5400 5401**系统能力**:SystemCapability.Communication.NetStack 5402 5403**返回值:** 5404 5405| 类型 | 说明 | 5406| --------------------------------- | ---------------------- | 5407| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 5408 5409**示例:** 5410 5411```ts 5412import { socket } from '@kit.NetworkKit'; 5413 5414let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5415``` 5416 5417## socket.constructTLSSocketInstance<sup>12+</sup> 5418 5419constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket 5420 5421将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。 5422 5423> **说明:** 5424> 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。 5425 5426**系统能力**:SystemCapability.Communication.NetStack 5427 5428**参数:** 5429 5430| 参数名 | 类型 | 必填 | 说明 | 5431|-----------|----| ---- |------------------------| 5432| tcpSocket | [TCPSocket](#tcpsocket) | 是 | 需要进行升级的TCPSocket对象。 | 5433 5434**返回值:** 5435 5436| 类型 | 说明 | 5437| --------------------------------- | ---------------------- | 5438| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 5439 5440**错误码:** 5441 5442| 错误码ID | 错误信息 | 5443|---------|----------------------------------| 5444| 401 | Parameter error. | 5445| 2300002 | System internal error. | 5446| 2303601 | Invalid socket FD. | 5447| 2303602 | Socket is not connected. | 5448 5449**示例:** 5450 5451```ts 5452import { socket } from '@kit.NetworkKit'; 5453import { BusinessError } from '@kit.BasicServicesKit'; 5454 5455let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 5456let tcpconnectoptions: socket.TCPConnectOptions = { 5457 address: { 5458 address: '192.168.xx.xxx', 5459 port: 8080 5460 }, 5461 timeout: 6000 5462} 5463tcp.connect(tcpconnectoptions, (err: BusinessError) => { 5464 if (err) { 5465 console.log('connect fail'); 5466 return; 5467 } 5468 console.log('connect success'); 5469 5470 // 确保TCPSocket已连接后,再升级TLSSocket 5471 let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp); 5472}) 5473``` 5474 5475## TLSSocket<sup>9+</sup> 5476 5477TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。 5478 5479### bind<sup>9+</sup> 5480 5481bind(address: NetAddress, callback: AsyncCallback\<void\>): void 5482 5483绑定IP地址和端口。使用callback方法作为异步方法。 5484 5485> **说明:** 5486> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 5487 5488**需要权限**:ohos.permission.INTERNET 5489 5490**系统能力**:SystemCapability.Communication.NetStack 5491 5492**参数:** 5493 5494| 参数名 | 类型 | 必填 | 说明 | 5495| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 5496| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 5497| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。| 5498 5499**错误码:** 5500 5501| 错误码ID | 错误信息 | 5502| ------- | ----------------------- | 5503| 401 | Parameter error. | 5504| 201 | Permission denied. | 5505| 2303198 | Address already in use. | 5506| 2300002 | System internal error. | 5507 5508**示例:** 5509 5510```ts 5511import { socket } from '@kit.NetworkKit'; 5512import { BusinessError } from '@kit.BasicServicesKit'; 5513 5514let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5515let bindAddr: socket.NetAddress = { 5516 address: '192.168.xx.xxx', 5517 port: 8080 5518} 5519tls.bind(bindAddr, (err: BusinessError) => { 5520 if (err) { 5521 console.log('bind fail'); 5522 return; 5523 } 5524 console.log('bind success'); 5525}); 5526``` 5527 5528### bind<sup>9+</sup> 5529 5530bind(address: NetAddress): Promise\<void\> 5531 5532绑定IP地址和端口。使用Promise方法作为异步方法。 5533 5534> **说明:** 5535> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 5536 5537**需要权限**:ohos.permission.INTERNET 5538 5539**系统能力**:SystemCapability.Communication.NetStack 5540 5541**参数:** 5542 5543| 参数名 | 类型 | 必填 | 说明 | 5544| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 5545| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 5546 5547**返回值:** 5548 5549| 类型 | 说明 | 5550| -------------- | ------------------------------------------------------- | 5551| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 | 5552 5553**错误码:** 5554 5555| 错误码ID | 错误信息 | 5556| ------- | ----------------------- | 5557| 401 | Parameter error. | 5558| 201 | Permission denied. | 5559| 2303198 | Address already in use. | 5560| 2300002 | System internal error. | 5561 5562**示例:** 5563 5564```ts 5565import { socket } from '@kit.NetworkKit'; 5566import { BusinessError } from '@kit.BasicServicesKit'; 5567 5568let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5569let bindAddr: socket.NetAddress = { 5570 address: '192.168.xx.xxx', 5571 port: 8080 5572} 5573tls.bind(bindAddr).then(() => { 5574 console.log('bind success'); 5575}).catch((err: BusinessError) => { 5576 console.log('bind fail'); 5577}); 5578``` 5579 5580### getState<sup>9+</sup> 5581 5582getState(callback: AsyncCallback\<SocketStateBase\>): void 5583 5584在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。 5585 5586**系统能力**:SystemCapability.Communication.NetStack 5587 5588**参数:** 5589 5590| 参数名 | 类型 | 必填 | 说明 | 5591| -------- | ------------------------------------------------------ | ---- | ---------- | 5592| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 | 5593 5594**错误码:** 5595 5596| 错误码ID | 错误信息 | 5597| ------- | ------------------------------ | 5598| 2303188 | Socket operation on non-socket.| 5599| 2300002 | System internal error. | 5600 5601**示例:** 5602 5603```ts 5604import { socket } from '@kit.NetworkKit'; 5605import { BusinessError } from '@kit.BasicServicesKit'; 5606 5607let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5608let bindAddr: socket.NetAddress = { 5609 address: '192.168.xx.xxx', 5610 port: 8080 5611} 5612tls.bind(bindAddr, (err: BusinessError) => { 5613 if (err) { 5614 console.log('bind fail'); 5615 return; 5616 } 5617 console.log('bind success'); 5618}); 5619tls.getState((err: BusinessError, data: socket.SocketStateBase) => { 5620 if (err) { 5621 console.log('getState fail'); 5622 return; 5623 } 5624 console.log('getState success:' + JSON.stringify(data)); 5625}); 5626``` 5627 5628### getState<sup>9+</sup> 5629 5630getState(): Promise\<SocketStateBase\> 5631 5632在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。 5633 5634**系统能力**:SystemCapability.Communication.NetStack 5635 5636**返回值:** 5637 5638| 类型 | 说明 | 5639| ----------------------------------------------- | ----------------------------------------- | 5640| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。| 5641 5642**错误码:** 5643 5644| 错误码ID | 错误信息 | 5645| ------- | ------------------------------ | 5646| 2303188 | Socket operation on non-socket.| 5647| 2300002 | System internal error. | 5648 5649**示例:** 5650 5651```ts 5652import { socket } from '@kit.NetworkKit'; 5653import { BusinessError } from '@kit.BasicServicesKit'; 5654 5655let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5656let bindAddr: socket.NetAddress = { 5657 address: '192.168.xx.xxx', 5658 port: 8080 5659} 5660tls.bind(bindAddr, (err: BusinessError) => { 5661 if (err) { 5662 console.log('bind fail'); 5663 return; 5664 } 5665 console.log('bind success'); 5666}); 5667tls.getState().then(() => { 5668 console.log('getState success'); 5669}).catch((err: BusinessError) => { 5670 console.log('getState fail'); 5671}); 5672``` 5673 5674### setExtraOptions<sup>9+</sup> 5675 5676setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 5677 5678在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 5679 5680**系统能力**:SystemCapability.Communication.NetStack 5681 5682**参数:** 5683 5684| 参数名 | 类型 | 必填 | 说明 | 5685| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 5686| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 5687| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。| 5688 5689**错误码:** 5690 5691| 错误码ID | 错误信息 | 5692| ------- | ----------------------------- | 5693| 401 | Parameter error. | 5694| 2303188 | Socket operation on non-socket.| 5695| 2300002 | System internal error. | 5696 5697**示例:** 5698 5699```ts 5700import { socket } from '@kit.NetworkKit'; 5701import { BusinessError } from '@kit.BasicServicesKit'; 5702 5703let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5704let bindAddr: socket.NetAddress = { 5705 address: '192.168.xx.xxx', 5706 port: 8080 5707} 5708tls.bind(bindAddr, (err: BusinessError) => { 5709 if (err) { 5710 console.log('bind fail'); 5711 return; 5712 } 5713 console.log('bind success'); 5714}); 5715 5716interface SocketLinger { 5717 on: boolean; 5718 linger: number; 5719} 5720 5721let tcpExtraOptions: socket.TCPExtraOptions = { 5722 keepAlive: true, 5723 OOBInline: true, 5724 TCPNoDelay: true, 5725 socketLinger: { on: true, linger: 10 } as SocketLinger, 5726 receiveBufferSize: 1000, 5727 sendBufferSize: 1000, 5728 reuseAddress: true, 5729 socketTimeout: 3000 5730} 5731tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 5732 if (err) { 5733 console.log('setExtraOptions fail'); 5734 return; 5735 } 5736 console.log('setExtraOptions success'); 5737}); 5738``` 5739 5740### setExtraOptions<sup>9+</sup> 5741 5742setExtraOptions(options: TCPExtraOptions): Promise\<void\> 5743 5744在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 5745 5746**系统能力**:SystemCapability.Communication.NetStack 5747 5748**参数:** 5749 5750| 参数名 | 类型 | 必填 | 说明 | 5751| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 5752| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 5753 5754**返回值:** 5755 5756| 类型 | 说明 | 5757| -------------- | --------------------------------------------------- | 5758| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 | 5759 5760**错误码:** 5761 5762| 错误码ID | 错误信息 | 5763| ------- | ------------------------------ | 5764| 401 | Parameter error. | 5765| 2303188 | Socket operation on non-socket.| 5766| 2300002 | System internal error. | 5767 5768**示例:** 5769 5770```ts 5771import { socket } from '@kit.NetworkKit'; 5772import { BusinessError } from '@kit.BasicServicesKit'; 5773 5774let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5775let bindAddr: socket.NetAddress = { 5776 address: '192.168.xx.xxx', 5777 port: 8080 5778} 5779tls.bind(bindAddr, (err: BusinessError) => { 5780 if (err) { 5781 console.log('bind fail'); 5782 return; 5783 } 5784 console.log('bind success'); 5785}); 5786 5787interface SocketLinger { 5788 on: boolean; 5789 linger: number; 5790} 5791 5792let tcpExtraOptions: socket.TCPExtraOptions = { 5793 keepAlive: true, 5794 OOBInline: true, 5795 TCPNoDelay: true, 5796 socketLinger: { on: true, linger: 10 } as SocketLinger, 5797 receiveBufferSize: 1000, 5798 sendBufferSize: 1000, 5799 reuseAddress: true, 5800 socketTimeout: 3000 5801} 5802tls.setExtraOptions(tcpExtraOptions).then(() => { 5803 console.log('setExtraOptions success'); 5804}).catch((err: BusinessError) => { 5805 console.log('setExtraOptions fail'); 5806}); 5807``` 5808 5809### on('message')<sup>9+</sup> 5810 5811on(type: 'message', callback: Callback\<SocketMessageInfo\>): void; 5812 5813订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 5814 5815**系统能力**:SystemCapability.Communication.NetStack 5816 5817**参数:** 5818 5819| 参数名 | 类型 | 必填 | 说明 | 5820| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 5821| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5822| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 5823 5824**错误码:** 5825 5826| 错误码ID | 错误信息 | 5827| ------- | ------------------------------ | 5828| 401 | Parameter error. | 5829 5830**示例:** 5831 5832```ts 5833import { socket } from '@kit.NetworkKit'; 5834import { BusinessError } from '@kit.BasicServicesKit'; 5835 5836let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5837let messageView = ''; 5838tls.on('message', (value: socket.SocketMessageInfo) => { 5839 for (let i: number = 0; i < value.message.byteLength; i++) { 5840 let uint8Array = new Uint8Array(value.message) 5841 let messages = uint8Array[i] 5842 let message = String.fromCharCode(messages); 5843 messageView += message; 5844 } 5845 console.log('on message message: ' + JSON.stringify(messageView)); 5846 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 5847}); 5848``` 5849 5850### off('message')<sup>9+</sup> 5851 5852off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 5853 5854取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 5855 5856**系统能力**:SystemCapability.Communication.NetStack 5857 5858**参数:** 5859 5860| 参数名 | 类型 | 必填 | 说明 | 5861| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 5862| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5863| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 5864 5865**错误码:** 5866 5867| 错误码ID | 错误信息 | 5868| ------- | ------------------------------ | 5869| 401 | Parameter error. | 5870 5871**示例:** 5872 5873```ts 5874import { socket } from '@kit.NetworkKit'; 5875import { BusinessError } from '@kit.BasicServicesKit'; 5876 5877let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5878let messageView = ''; 5879let callback = (value: socket.SocketMessageInfo) => { 5880 for (let i: number = 0; i < value.message.byteLength; i++) { 5881 let uint8Array = new Uint8Array(value.message) 5882 let messages = uint8Array[i] 5883 let message = String.fromCharCode(messages); 5884 messageView += message; 5885 } 5886 console.log('on message message: ' + JSON.stringify(messageView)); 5887 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 5888} 5889tls.on('message', callback); 5890// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5891tls.off('message', callback); 5892``` 5893### on('connect' | 'close')<sup>9+</sup> 5894 5895on(type: 'connect' | 'close', callback: Callback\<void\>): void 5896 5897订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 5898 5899**系统能力**:SystemCapability.Communication.NetStack 5900 5901**参数:** 5902 5903| 参数名 | 类型 | 必填 | 说明 | 5904| -------- | ---------------- | ---- | ------------------------------------------------------------ | 5905| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 5906| callback | Callback\<void\> | 是 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 5907 5908**错误码:** 5909 5910| 错误码ID | 错误信息 | 5911| ------- | ------------------------------ | 5912| 401 | Parameter error. | 5913 5914**示例:** 5915 5916```ts 5917import { socket } from '@kit.NetworkKit'; 5918import { BusinessError } from '@kit.BasicServicesKit'; 5919 5920let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5921tls.on('connect', () => { 5922 console.log("on connect success") 5923}); 5924tls.on('close', () => { 5925 console.log("on close success") 5926}); 5927``` 5928 5929### off('connect' | 'close')<sup>9+</sup> 5930 5931off(type: 'connect' | 'close', callback?: Callback\<void\>): void 5932 5933取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 5934 5935**系统能力**:SystemCapability.Communication.NetStack 5936 5937**参数:** 5938 5939| 参数名 | 类型 | 必填 | 说明 | 5940| -------- | ---------------- | ---- | ------------------------------------------------------------ | 5941| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 5942| callback | Callback\<void\> | 否 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 5943 5944**错误码:** 5945 5946| 错误码ID | 错误信息 | 5947| ------- | ------------------------------ | 5948| 401 | Parameter error. | 5949 5950**示例:** 5951 5952```ts 5953import { socket } from '@kit.NetworkKit'; 5954import { BusinessError } from '@kit.BasicServicesKit'; 5955 5956let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5957let callback1 = () => { 5958 console.log("on connect success"); 5959} 5960tls.on('connect', callback1); 5961// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5962tls.off('connect', callback1); 5963tls.off('connect'); 5964let callback2 = () => { 5965 console.log("on close success"); 5966} 5967tls.on('close', callback2); 5968// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5969tls.off('close', callback2); 5970``` 5971 5972### on('error')<sup>9+</sup> 5973 5974on(type: 'error', callback: ErrorCallback): void 5975 5976订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 5977 5978**系统能力**:SystemCapability.Communication.NetStack 5979 5980**参数:** 5981 5982| 参数名 | 类型 | 必填 | 说明 | 5983| -------- | ------------- | ---- | ------------------------------------ | 5984| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5985| callback | ErrorCallback | 是 | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。 | 5986 5987**错误码:** 5988 5989| 错误码ID | 错误信息 | 5990| ------- | ------------------------------ | 5991| 401 | Parameter error. | 5992 5993**示例:** 5994 5995```ts 5996import { socket } from '@kit.NetworkKit'; 5997import { BusinessError } from '@kit.BasicServicesKit'; 5998 5999let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6000tls.on('error', (err: BusinessError) => { 6001 console.log("on error, err:" + JSON.stringify(err)) 6002}); 6003``` 6004 6005### off('error')<sup>9+</sup> 6006 6007off(type: 'error', callback?: ErrorCallback): void 6008 6009取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 6010 6011**系统能力**:SystemCapability.Communication.NetStack 6012 6013**参数:** 6014 6015| 参数名 | 类型 | 必填 | 说明 | 6016| -------- | ------------- | ---- | ------------------------------------ | 6017| type | string | 是 | 订阅的事件类型。'error':error事件。 | 6018| callback | ErrorCallback | 否 | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。 | 6019 6020**错误码:** 6021 6022| 错误码ID | 错误信息 | 6023| ------- | ------------------------------ | 6024| 401 | Parameter error. | 6025 6026**示例:** 6027 6028```ts 6029import { socket } from '@kit.NetworkKit'; 6030import { BusinessError } from '@kit.BasicServicesKit'; 6031 6032let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6033let callback = (err: BusinessError) => { 6034 console.log("on error, err:" + JSON.stringify(err)); 6035} 6036tls.on('error', callback); 6037// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6038tls.off('error', callback); 6039``` 6040 6041### connect<sup>9+</sup> 6042 6043connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 6044 6045在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。 6046 6047**系统能力**:SystemCapability.Communication.NetStack 6048 6049**参数:** 6050 6051| 参数名 | 类型 | 必填 | 说明 | 6052| -------- | ---------------------------------------| ----| --------------- | 6053| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocket连接所需要的参数。| 6054| callback | AsyncCallback\<void\> | 是 | 回调函数,成功无返回,失败返回错误码、错误信息。| 6055 6056**错误码:** 6057 6058| 错误码ID | 错误信息 | 6059| ------- | -------------------------------------------- | 6060| 401 | Parameter error. | 6061| 2303104 | Interrupted system call. | 6062| 2303109 | Bad file number. | 6063| 2303111 | Resource temporarily unavailable. Try again. | 6064| 2303188 | Socket operation on non-socket. | 6065| 2303191 | Incorrect socket protocol type. | 6066| 2303198 | Address already in use. | 6067| 2303199 | Cannot assign requested address. | 6068| 2303210 | Connection timed out. | 6069| 2303501 | SSL is null. | 6070| 2303502 | An error occurred when reading data on the TLS socket.| 6071| 2303503 | An error occurred when writing data on the TLS socket.| 6072| 2303505 | An error occurred in the TLS system call. | 6073| 2303506 | Failed to close the TLS connection. | 6074| 2300002 | System internal error. | 6075 6076**示例:** 6077 6078```ts 6079import { socket } from '@kit.NetworkKit'; 6080import { BusinessError } from '@kit.BasicServicesKit'; 6081 6082let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 6083let bindAddr: socket.NetAddress = { 6084 address: '0.0.0.0', 6085} 6086tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6087 if (err) { 6088 console.log('bind fail'); 6089 return; 6090 } 6091 console.log('bind success'); 6092}); 6093let twoWayNetAddr: socket.NetAddress = { 6094 address: '192.168.xx.xxx', 6095 port: 8080 6096} 6097let twoWaySecureOptions: socket.TLSSecureOptions = { 6098 key: "xxxx", 6099 cert: "xxxx", 6100 ca: ["xxxx"], 6101 password: "xxxx", 6102 protocols: socket.Protocol.TLSv12, 6103 useRemoteCipherPrefer: true, 6104 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6105 cipherSuite: "AES256-SHA256" 6106} 6107let tlsConnectOptions: socket.TLSConnectOptions = { 6108 address: twoWayNetAddr, 6109 secureOptions: twoWaySecureOptions, 6110 ALPNProtocols: ["spdy/1", "http/1.1"] 6111} 6112 6113tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => { 6114 console.error("connect callback error" + err); 6115}); 6116 6117let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 6118tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6119 if (err) { 6120 console.log('bind fail'); 6121 return; 6122 } 6123 console.log('bind success'); 6124}); 6125let oneWayNetAddr: socket.NetAddress = { 6126 address: '192.168.xx.xxx', 6127 port: 8080 6128} 6129let oneWaySecureOptions: socket.TLSSecureOptions = { 6130 ca: ["xxxx", "xxxx"], 6131 cipherSuite: "AES256-SHA256" 6132} 6133let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6134 address: oneWayNetAddr, 6135 secureOptions: oneWaySecureOptions 6136} 6137tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => { 6138 console.error("connect callback error" + err); 6139}); 6140``` 6141 6142### connect<sup>9+</sup> 6143 6144connect(options: TLSConnectOptions): Promise\<void\> 6145 6146在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。 6147 6148**系统能力**:SystemCapability.Communication.NetStack 6149 6150**参数:** 6151 6152| 参数名 | 类型 | 必填 | 说明 | 6153| -------- | --------------------------------------| ----| --------------- | 6154| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。| 6155 6156**返回值:** 6157 6158| 类型 | 说明 | 6159| ------------------------------------------- | ----------------------------- | 6160| Promise\<void\> | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。| 6161 6162**错误码:** 6163 6164| 错误码ID | 错误信息 | 6165| ------- | -------------------------------------------- | 6166| 401 | Parameter error. | 6167| 2303104 | Interrupted system call. | 6168| 2303109 | Bad file number. | 6169| 2303111 | Resource temporarily unavailable. Try again. | 6170| 2303188 | Socket operation on non-socket. | 6171| 2303191 | Incorrect socket protocol type. | 6172| 2303198 | Address already in use. | 6173| 2303199 | Cannot assign requested address. | 6174| 2303210 | Connection timed out. | 6175| 2303501 | SSL is null. | 6176| 2303502 | An error occurred when reading data on the TLS socket.| 6177| 2303503 | An error occurred when writing data on the TLS socket.| 6178| 2303505 | An error occurred in the TLS system call. | 6179| 2303506 | Failed to close the TLS connection. | 6180| 2300002 | System internal error. | 6181 6182**示例:** 6183 6184```ts 6185import { socket } from '@kit.NetworkKit'; 6186import { BusinessError } from '@kit.BasicServicesKit'; 6187 6188let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 6189let bindAddr: socket.NetAddress = { 6190 address: '0.0.0.0', 6191} 6192tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6193 if (err) { 6194 console.log('bind fail'); 6195 return; 6196 } 6197 console.log('bind success'); 6198}); 6199let twoWayNetAddr: socket.NetAddress = { 6200 address: '192.168.xx.xxx', 6201 port: 8080 6202} 6203let twoWaySecureOptions: socket.TLSSecureOptions = { 6204 key: "xxxx", 6205 cert: "xxxx", 6206 ca: ["xxxx"], 6207 password: "xxxx", 6208 protocols: socket.Protocol.TLSv12, 6209 useRemoteCipherPrefer: true, 6210 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6211 cipherSuite: "AES256-SHA256" 6212} 6213let tlsConnectOptions: socket.TLSConnectOptions = { 6214 address: twoWayNetAddr, 6215 secureOptions: twoWaySecureOptions, 6216 ALPNProtocols: ["spdy/1", "http/1.1"] 6217} 6218 6219tlsTwoWay.connect(tlsConnectOptions).then(() => { 6220 console.log("connect successfully"); 6221}).catch((err: BusinessError) => { 6222 console.log("connect failed " + JSON.stringify(err)); 6223}); 6224 6225let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 6226tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6227 if (err) { 6228 console.log('bind fail'); 6229 return; 6230 } 6231 console.log('bind success'); 6232}); 6233let oneWayNetAddr: socket.NetAddress = { 6234 address: '192.168.xx.xxx', 6235 port: 8080 6236} 6237let oneWaySecureOptions: socket.TLSSecureOptions = { 6238 ca: ["xxxx", "xxxx"], 6239 cipherSuite: "AES256-SHA256" 6240} 6241let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6242 address: oneWayNetAddr, 6243 secureOptions: oneWaySecureOptions 6244} 6245tlsOneWay.connect(tlsOneWayConnectOptions).then(() => { 6246 console.log("connect successfully"); 6247}).catch((err: BusinessError) => { 6248 console.log("connect failed " + JSON.stringify(err)); 6249}); 6250``` 6251 6252### getRemoteAddress<sup>9+</sup> 6253 6254getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 6255 6256在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 6257 6258**系统能力**:SystemCapability.Communication.NetStack 6259 6260**参数:** 6261 6262| 参数名 | 类型 | 必填 | 说明 | 6263| -------- | ------------------------------------------------- | ---- | ---------- | 6264| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 6265 6266**错误码:** 6267 6268| 错误码ID | 错误信息 | 6269| ------- | ----------------------------- | 6270| 2303188 | Socket operation on non-socket.| 6271| 2300002 | System internal error. | 6272 6273**示例:** 6274 6275```ts 6276import { socket } from '@kit.NetworkKit'; 6277import { BusinessError } from '@kit.BasicServicesKit'; 6278 6279let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6280tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 6281 if (err) { 6282 console.log('getRemoteAddress fail'); 6283 return; 6284 } 6285 console.log('getRemoteAddress success:' + JSON.stringify(data)); 6286}); 6287``` 6288 6289### getRemoteAddress<sup>9+</sup> 6290 6291getRemoteAddress(): Promise\<NetAddress\> 6292 6293在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 6294 6295**系统能力**:SystemCapability.Communication.NetStack 6296 6297**返回值:** 6298 6299| 类型 | 说明 | 6300| ------------------------------------------ | ------------------------------------------ | 6301| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 6302 6303**错误码:** 6304 6305| 错误码ID | 错误信息 | 6306| ------- | ------------------------------ | 6307| 2303188 | Socket operation on non-socket.| 6308| 2300002 | System internal error. | 6309 6310**示例:** 6311 6312```ts 6313import { socket } from '@kit.NetworkKit'; 6314import { BusinessError } from '@kit.BasicServicesKit'; 6315 6316let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6317tls.getRemoteAddress().then(() => { 6318 console.log('getRemoteAddress success'); 6319}).catch((err: BusinessError) => { 6320 console.log('getRemoteAddress fail'); 6321}); 6322``` 6323 6324### getCertificate<sup>9+</sup> 6325 6326getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 6327 6328在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。 6329 6330**系统能力**:SystemCapability.Communication.NetStack 6331 6332**参数:** 6333 6334| 参数名 | 类型 | 必填 | 说明 | 6335| -------- | ----------------------------------------| ---- | ---------------| 6336| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。| 6337 6338**错误码:** 6339 6340| 错误码ID | 错误信息 | 6341| ------- | ------------------------------ | 6342| 2303501 | SSL is null. | 6343| 2303504 | An error occurred when verifying the X.509 certificate.| 6344| 2300002 | System internal error. | 6345 6346**示例:** 6347 6348```ts 6349import { socket } from '@kit.NetworkKit'; 6350import { BusinessError } from '@kit.BasicServicesKit'; 6351 6352let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6353tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 6354 if (err) { 6355 console.log("getCertificate callback error = " + err); 6356 } else { 6357 console.log("getCertificate callback = " + data); 6358 } 6359}); 6360``` 6361 6362### getCertificate<sup>9+</sup> 6363 6364getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 6365 6366在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。 6367 6368**系统能力**:SystemCapability.Communication.NetStack 6369 6370**返回值:** 6371 6372| 类型 | 说明 | 6373| -------------- | -------------------- | 6374| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 6375 6376**错误码:** 6377 6378| 错误码ID | 错误信息 | 6379| ------- | ------------------------------ | 6380| 2303501 | SSL is null. | 6381| 2303504 | An error occurred when verifying the X.509 certificate.| 6382| 2300002 | System internal error. | 6383 6384**示例:** 6385 6386```ts 6387import { socket } from '@kit.NetworkKit'; 6388import { BusinessError } from '@kit.BasicServicesKit'; 6389import { util } from '@kit.ArkTS'; 6390 6391let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6392tls.getCertificate().then((data: socket.X509CertRawData) => { 6393 const decoder = util.TextDecoder.create(); 6394 const str = decoder.decodeWithStream(data.data); 6395 console.log("getCertificate: " + str); 6396}).catch((err: BusinessError) => { 6397 console.error("failed" + err); 6398}); 6399``` 6400 6401### getRemoteCertificate<sup>9+</sup> 6402 6403getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 6404 6405在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。 6406 6407**系统能力**:SystemCapability.Communication.NetStack 6408 6409**参数:** 6410 6411| 参数名 | 类型 | 必填 | 说明 | 6412| -------- | ----------------------------------------| ---- | ---------------| 6413| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 | 6414 6415**错误码:** 6416 6417| 错误码ID | 错误信息 | 6418| ------- | ------------------------------ | 6419| 2303501 | SSL is null. | 6420| 2300002 | System internal error. | 6421 6422**示例:** 6423 6424```ts 6425import { socket } from '@kit.NetworkKit'; 6426import { BusinessError } from '@kit.BasicServicesKit'; 6427import { util } from '@kit.ArkTS'; 6428 6429let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6430tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 6431 if (err) { 6432 console.log("getRemoteCertificate callback error = " + err); 6433 } else { 6434 const decoder = util.TextDecoder.create(); 6435 const str = decoder.decodeWithStream(data.data); 6436 console.log("getRemoteCertificate callback = " + str); 6437 } 6438}); 6439``` 6440 6441### getRemoteCertificate<sup>9+</sup> 6442 6443getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 6444 6445在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。 6446 6447**系统能力**:SystemCapability.Communication.NetStack 6448 6449**返回值:** 6450 6451| 类型 | 说明 | 6452| -------------- | -------------------- | 6453| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 | 6454 6455**错误码:** 6456 6457| 错误码ID | 错误信息 | 6458| ------- | ------------------------------ | 6459| 2303501 | SSL is null. | 6460| 2300002 | System internal error. | 6461 6462**示例:** 6463 6464```ts 6465import { socket } from '@kit.NetworkKit'; 6466import { BusinessError } from '@kit.BasicServicesKit'; 6467import { util } from '@kit.ArkTS'; 6468 6469let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6470tls.getRemoteCertificate().then((data: socket.X509CertRawData) => { 6471 const decoder = util.TextDecoder.create(); 6472 const str = decoder.decodeWithStream(data.data); 6473 console.log("getRemoteCertificate:" + str); 6474}).catch((err: BusinessError) => { 6475 console.error("failed" + err); 6476}); 6477``` 6478 6479### getProtocol<sup>9+</sup> 6480 6481getProtocol(callback: AsyncCallback\<string\>): void 6482 6483在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 6484 6485**系统能力**:SystemCapability.Communication.NetStack 6486 6487**参数:** 6488 6489| 参数名 | 类型 | 必填 | 说明 | 6490| -------- | ----------------------------------------| ---- | ---------------| 6491| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。| 6492 6493**错误码:** 6494 6495| 错误码ID | 错误信息 | 6496| ------- | ----------------------------- | 6497| 2303501 | SSL is null. | 6498| 2303505 | An error occurred in the TLS system call. | 6499| 2300002 | System internal error. | 6500 6501**示例:** 6502 6503```ts 6504import { socket } from '@kit.NetworkKit'; 6505import { BusinessError } from '@kit.BasicServicesKit'; 6506 6507let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6508tls.getProtocol((err: BusinessError, data: string) => { 6509 if (err) { 6510 console.log("getProtocol callback error = " + err); 6511 } else { 6512 console.log("getProtocol callback = " + data); 6513 } 6514}); 6515``` 6516 6517### getProtocol<sup>9+</sup> 6518 6519getProtocol():Promise\<string\> 6520 6521在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 6522 6523**系统能力**:SystemCapability.Communication.NetStack 6524 6525**返回值:** 6526 6527| 类型 | 说明 | 6528| -------------- | -------------------- | 6529| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 6530 6531**错误码:** 6532 6533| 错误码ID | 错误信息 | 6534| ------- | ------------------------------ | 6535| 2303501 | SSL is null. | 6536| 2303505 | An error occurred in the TLS system call. | 6537| 2300002 | System internal error. | 6538 6539**示例:** 6540 6541```ts 6542import { socket } from '@kit.NetworkKit'; 6543import { BusinessError } from '@kit.BasicServicesKit'; 6544 6545let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6546tls.getProtocol().then((data: string) => { 6547 console.log(data); 6548}).catch((err: BusinessError) => { 6549 console.error("failed" + err); 6550}); 6551``` 6552 6553### getCipherSuite<sup>9+</sup> 6554 6555getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 6556 6557在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 6558 6559**系统能力**:SystemCapability.Communication.NetStack 6560 6561**参数:** 6562 6563| 参数名 | 类型 | 必填 | 说明 | 6564| -------- | ----------------------------------------| ---- | ---------------| 6565| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 6566 6567**错误码:** 6568 6569| 错误码ID | 错误信息 | 6570| ------- | ------------------------------ | 6571| 2303501 | SSL is null. | 6572| 2303502 | An error occurred when reading data on the TLS socket.| 6573| 2303505 | An error occurred in the TLS system call. | 6574| 2300002 | System internal error. | 6575 6576**示例:** 6577 6578```ts 6579import { socket } from '@kit.NetworkKit'; 6580import { BusinessError } from '@kit.BasicServicesKit'; 6581 6582let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6583tls.getCipherSuite((err: BusinessError, data: Array<string>) => { 6584 if (err) { 6585 console.log("getCipherSuite callback error = " + err); 6586 } else { 6587 console.log("getCipherSuite callback = " + data); 6588 } 6589}); 6590``` 6591 6592### getCipherSuite<sup>9+</sup> 6593 6594getCipherSuite(): Promise\<Array\<string\>\> 6595 6596在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 6597 6598**系统能力**:SystemCapability.Communication.NetStack 6599 6600**返回值:** 6601 6602| 类型 | 说明 | 6603| ---------------------- | --------------------- | 6604| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 6605 6606**错误码:** 6607 6608| 错误码ID | 错误信息 | 6609| ------- | ------------------------------ | 6610| 2303501 | SSL is null. | 6611| 2303502 | An error occurred when reading data on the TLS socket.| 6612| 2303505 | An error occurred in the TLS system call. | 6613| 2300002 | System internal error. | 6614 6615**示例:** 6616 6617```ts 6618import { socket } from '@kit.NetworkKit'; 6619import { BusinessError } from '@kit.BasicServicesKit'; 6620 6621let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6622tls.getCipherSuite().then((data: Array<string>) => { 6623 console.log('getCipherSuite success:' + JSON.stringify(data)); 6624}).catch((err: BusinessError) => { 6625 console.error("failed" + err); 6626}); 6627``` 6628 6629### getSignatureAlgorithms<sup>9+</sup> 6630 6631getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 6632 6633在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。 6634 6635**系统能力**:SystemCapability.Communication.NetStack 6636 6637**参数:** 6638 6639| 参数名 | 类型 | 必填 | 说明 | 6640| -------- | -------------------------------------| ---- | ---------------| 6641| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 6642 6643**错误码:** 6644 6645| 错误码ID | 错误信息 | 6646| ------- | ------------------------------ | 6647| 2303501 | SSL is null. | 6648| 2300002 | System internal error. | 6649 6650**示例:** 6651 6652```ts 6653import { socket } from '@kit.NetworkKit'; 6654import { BusinessError } from '@kit.BasicServicesKit'; 6655 6656let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6657tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 6658 if (err) { 6659 console.log("getSignatureAlgorithms callback error = " + err); 6660 } else { 6661 console.log("getSignatureAlgorithms callback = " + data); 6662 } 6663}); 6664``` 6665 6666### getSignatureAlgorithms<sup>9+</sup> 6667 6668getSignatureAlgorithms(): Promise\<Array\<string\>\> 6669 6670在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。 6671 6672**系统能力**:SystemCapability.Communication.NetStack 6673 6674**返回值:** 6675 6676| 类型 | 说明 | 6677| ---------------------- | -------------------- | 6678| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 6679 6680**错误码:** 6681 6682| 错误码ID | 错误信息 | 6683| ------- | ------------------------------ | 6684| 2303501 | SSL is null. | 6685| 2300002 | System internal error. | 6686 6687**示例:** 6688 6689```ts 6690import { socket } from '@kit.NetworkKit'; 6691import { BusinessError } from '@kit.BasicServicesKit'; 6692 6693let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6694tls.getSignatureAlgorithms().then((data: Array<string>) => { 6695 console.log("getSignatureAlgorithms success" + data); 6696}).catch((err: BusinessError) => { 6697 console.error("failed" + err); 6698}); 6699``` 6700 6701### getLocalAddress<sup>12+</sup> 6702 6703getLocalAddress(): Promise\<NetAddress\> 6704 6705获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。 6706 6707> **说明:** 6708> 在TLSSocketServer通信连接成功之后,才可调用此方法。 6709 6710**系统能力**:SystemCapability.Communication.NetStack 6711 6712**返回值:** 6713 6714| 类型 | 说明 | 6715| -------------- | --------------------------------------------------- | 6716| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 6717 6718**错误码:** 6719 6720| 错误码ID | 错误信息 | 6721| -------- | ------------------------------------------- | 6722| 2300002 | System internal error. | 6723| 2301009 | Bad file descriptor. | 6724| 2303188 | Socket operation on non-socket. | 6725 6726**示例:** 6727 6728```ts 6729import { socket } from '@kit.NetworkKit'; 6730import { BusinessError } from '@kit.BasicServicesKit'; 6731 6732let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6733tls.getLocalAddress().then((localAddress: socket.NetAddress) => { 6734 console.info("Get success: " + JSON.stringify(localAddress)); 6735}).catch((err: BusinessError) => { 6736 console.error("Get failed, error: " + JSON.stringify(err)); 6737}) 6738``` 6739 6740### send<sup>9+</sup> 6741 6742send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 6743 6744在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。 6745 6746**系统能力**:SystemCapability.Communication.NetStack 6747 6748**参数:** 6749 6750| 参数名 | 类型 | 必填 | 说明 | 6751| -------- | -----------------------------| ---- | ---------------| 6752| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 6753| callback | AsyncCallback\<void\> | 是 | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 | 6754 6755**错误码:** 6756 6757| 错误码ID | 错误信息 | 6758| ------- | -------------------------------------------- | 6759| 401 | Parameter error. | 6760| 2303501 | SSL is null. | 6761| 2303503 | An error occurred when writing data on the TLS socket.| 6762| 2303505 | An error occurred in the TLS system call. | 6763| 2303506 | Failed to close the TLS connection. | 6764| 2300002 | System internal error. | 6765 6766**示例:** 6767 6768```ts 6769import { socket } from '@kit.NetworkKit'; 6770import { BusinessError } from '@kit.BasicServicesKit'; 6771 6772let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6773tls.send("xxxx", (err: BusinessError) => { 6774 if (err) { 6775 console.log("send callback error = " + err); 6776 } else { 6777 console.log("send success"); 6778 } 6779}); 6780``` 6781 6782### send<sup>9+</sup> 6783 6784send(data: string \| ArrayBuffer): Promise\<void\> 6785 6786在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 6787 6788**系统能力**:SystemCapability.Communication.NetStack 6789 6790**参数:** 6791 6792| 参数名 | 类型 | 必填 | 说明 | 6793| -------- | -----------------------------| ---- | ---------------| 6794| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 6795 6796**错误码:** 6797 6798| 错误码ID | 错误信息 | 6799| ------- | -------------------------------------------- | 6800| 401 | Parameter error. | 6801| 2303501 | SSL is null. | 6802| 2303503 | An error occurred when writing data on the TLS socket.| 6803| 2303505 | An error occurred in the TLS system call. | 6804| 2303506 | Failed to close the TLS connection. | 6805| 2300002 | System internal error. | 6806 6807**返回值:** 6808 6809| 类型 | 说明 | 6810| -------------- | -------------------- | 6811| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 | 6812 6813**示例:** 6814 6815```ts 6816import { socket } from '@kit.NetworkKit'; 6817import { BusinessError } from '@kit.BasicServicesKit'; 6818 6819let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6820tls.send("xxxx").then(() => { 6821 console.log("send success"); 6822}).catch((err: BusinessError) => { 6823 console.error("failed" + err); 6824}); 6825``` 6826 6827### close<sup>9+</sup> 6828 6829close(callback: AsyncCallback\<void\>): void 6830 6831在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。 6832 6833**系统能力**:SystemCapability.Communication.NetStack 6834 6835**参数:** 6836 6837| 参数名 | 类型 | 必填 | 说明 | 6838| -------- | -----------------------------| ---- | ---------------| 6839| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 | 6840 6841**错误码:** 6842 6843| 错误码ID | 错误信息 | 6844| ------- | -------------------------------------------- | 6845| 401 | Parameter error. | 6846| 2303501 | SSL is null. | 6847| 2303505 | An error occurred in the TLS system call. | 6848| 2303506 | Failed to close the TLS connection. | 6849| 2300002 | System internal error. | 6850 6851**示例:** 6852 6853```ts 6854import { socket } from '@kit.NetworkKit'; 6855import { BusinessError } from '@kit.BasicServicesKit'; 6856 6857let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6858tls.close((err: BusinessError) => { 6859 if (err) { 6860 console.log("close callback error = " + err); 6861 } else { 6862 console.log("close success"); 6863 } 6864}); 6865``` 6866 6867### close<sup>9+</sup> 6868 6869close(): Promise\<void\> 6870 6871在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。 6872 6873**系统能力**:SystemCapability.Communication.NetStack 6874 6875**返回值:** 6876 6877| 类型 | 说明 | 6878| -------------- | -------------------- | 6879| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 | 6880 6881**错误码:** 6882 6883| 错误码ID | 错误信息 | 6884| ------- | -------------------------------------------- | 6885| 401 | Parameter error. | 6886| 2303501 | SSL is null. | 6887| 2303505 | An error occurred in the TLS system call. | 6888| 2303506 | Failed to close the TLS connection. | 6889| 2300002 | System internal error. | 6890 6891**示例:** 6892 6893```ts 6894import { socket } from '@kit.NetworkKit'; 6895import { BusinessError } from '@kit.BasicServicesKit'; 6896 6897let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6898tls.close().then(() => { 6899 console.log("close success"); 6900}).catch((err: BusinessError) => { 6901 console.error("failed" + err); 6902}); 6903``` 6904 6905## TLSConnectOptions<sup>9+</sup> 6906 6907TLS连接的操作。 6908 6909**系统能力**:SystemCapability.Communication.NetStack 6910 6911| 名称 | 类型 | 必填 | 说明 | 6912| -------------- | ------------------------------------- | --- |-------------- | 6913| address | [NetAddress](#netaddress) | 是 | 网关地址。 | 6914| secureOptions | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。| 6915| ALPNProtocols | Array\<string\> | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。 | 6916| skipRemoteValidation<sup>12+</sup> | boolean | 否 | 是否对服务端进行证书认证,默认为false。 | 6917 6918## TLSSecureOptions<sup>9+</sup> 6919 6920TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。 6921 6922**系统能力**:SystemCapability.Communication.NetStack 6923 6924| 名称 | 类型 | 必填 | 说明 | 6925| --------------------- | ------------------------------------------------------ | --- |----------------------------------- | 6926| ca | string \| Array\<string\> | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书<sup>12+</sup>。 | 6927| cert | string | 否 | 本地客户端的数字证书。 | 6928| key | string | 否 | 本地数字证书的私钥。 | 6929| password | string | 否 | 读取私钥的密码。 | 6930| protocols | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。 | 6931| useRemoteCipherPrefer | boolean | 否 | 优先使用对等方的密码套件。 | 6932| signatureAlgorithms | string | 否 | 通信过程中的签名算法,默认为"" 。 | 6933| cipherSuite | string | 否 | 通信过程中的加密套件,默认为"" 。 | 6934 6935## Protocol<sup>9+</sup> 6936 6937TLS通信的协议版本。 6938 6939**系统能力**:SystemCapability.Communication.NetStack 6940 6941| 名称 | 值 | 说明 | 6942| --------- | --------- |------------------ | 6943| TLSv12 | "TLSv1.2" | 使用TLSv1.2协议通信。 | 6944| TLSv13 | "TLSv1.3" | 使用TLSv1.3协议通信。 | 6945 6946## X509CertRawData<sup>9+</sup> 6947 6948存储证书的数据。 6949 6950**系统能力**:SystemCapability.Communication.NetStack 6951 6952## socket.constructTLSSocketServerInstance<sup>10+</sup> 6953 6954constructTLSSocketServerInstance(): TLSSocketServer 6955 6956创建并返回一个TLSSocketServer对象。 6957 6958**系统能力**:SystemCapability.Communication.NetStack 6959 6960**返回值:** 6961 6962| 类型 | 说明 | 6963| ------------------------------------ | ---------------------------- | 6964| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 | 6965 6966**示例:** 6967 6968```ts 6969import { socket } from '@kit.NetworkKit'; 6970import { BusinessError } from '@kit.BasicServicesKit'; 6971 6972let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 6973``` 6974 6975## TLSSocketServer<sup>10+</sup> 6976 6977TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。 6978 6979### listen<sup>10+</sup> 6980 6981listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 6982 6983绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。 6984 6985**需要权限**:ohos.permission.INTERNET 6986 6987**系统能力**:SystemCapability.Communication.NetStack 6988 6989**参数:** 6990 6991| 参数名 | 类型 | 必填 | 说明 | 6992| -------- | ---------------------------------------- | ---- | ------------------------------------------------ | 6993| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocketServer连接所需要的参数。 | 6994| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 6995 6996**错误码:** 6997 6998| 错误码ID | 错误信息 | 6999| -------- | ------------------------------------------- | 7000| 401 | Parameter error. | 7001| 201 | Permission denied. | 7002| 2300002 | System internal error. | 7003| 2303109 | Bad file number. | 7004| 2303111 | Resource temporarily unavailable. Try again.| 7005| 2303198 | Address already in use. | 7006| 2303199 | Cannot assign requested address. | 7007| 2303501 | SSL is null. | 7008| 2303502 | An error occurred when reading data on the TLS socket.| 7009| 2303503 | An error occurred when writing data on the TLS socket.| 7010| 2303505 | An error occurred in the TLS system call. | 7011| 2303506 | Failed to close the TLS connection. | 7012 7013**示例:** 7014 7015```ts 7016import { socket } from '@kit.NetworkKit'; 7017import { BusinessError } from '@kit.BasicServicesKit'; 7018 7019let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7020let netAddress: socket.NetAddress = { 7021 address: '192.168.xx.xxx', 7022 port: 8080 7023} 7024let tlsSecureOptions: socket.TLSSecureOptions = { 7025 key: "xxxx", 7026 cert: "xxxx", 7027 ca: ["xxxx"], 7028 password: "xxxx", 7029 protocols: socket.Protocol.TLSv12, 7030 useRemoteCipherPrefer: true, 7031 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7032 cipherSuite: "AES256-SHA256" 7033} 7034let tlsConnectOptions: socket.TLSConnectOptions = { 7035 address: netAddress, 7036 secureOptions: tlsSecureOptions, 7037 ALPNProtocols: ["spdy/1", "http/1.1"], 7038 skipRemoteValidation: false 7039} 7040tlsServer.listen(tlsConnectOptions, (err: BusinessError) => { 7041 console.log("listen callback error" + err); 7042}); 7043``` 7044 7045### listen<sup>10+</sup> 7046 7047listen(options: TLSConnectOptions): Promise\<void\> 7048 7049绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。 7050 7051**需要权限**:ohos.permission.INTERNET 7052 7053**系统能力**:SystemCapability.Communication.NetStack 7054 7055**参数:** 7056 7057| 参数名 | 类型 | 必填 | 说明 | 7058| ------- | ---------------------------------------- | ---- | ------------------ | 7059| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。 | 7060 7061**返回值:** 7062 7063| 类型 | 说明 | 7064| --------------- | --------------------------------------------------------- | 7065| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 7066 7067**错误码:** 7068 7069| 错误码ID | 错误信息 | 7070| -------- | ------------------------------------------- | 7071| 401 | Parameter error. | 7072| 201 | Permission denied. | 7073| 2300002 | System internal error. | 7074| 2303109 | Bad file number. | 7075| 2303111 | Resource temporarily unavailable. Try again.| 7076| 2303198 | Address already in use. | 7077| 2303199 | Cannot assign requested address. | 7078| 2303501 | SSL is null. | 7079| 2303502 | An error occurred when reading data on the TLS socket.| 7080| 2303503 | An error occurred when writing data on the TLS socket.| 7081| 2303505 | An error occurred in the TLS system call. | 7082| 2303506 | Failed to close the TLS connection. | 7083 7084**示例:** 7085 7086```ts 7087import { socket } from '@kit.NetworkKit'; 7088import { BusinessError } from '@kit.BasicServicesKit'; 7089 7090let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7091let netAddress: socket.NetAddress = { 7092 address: '192.168.xx.xxx', 7093 port: 8080 7094} 7095let tlsSecureOptions: socket.TLSSecureOptions = { 7096 key: "xxxx", 7097 cert: "xxxx", 7098 ca: ["xxxx"], 7099 password: "xxxx", 7100 protocols: socket.Protocol.TLSv12, 7101 useRemoteCipherPrefer: true, 7102 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7103 cipherSuite: "AES256-SHA256" 7104} 7105let tlsConnectOptions: socket.TLSConnectOptions = { 7106 address: netAddress, 7107 secureOptions: tlsSecureOptions, 7108 ALPNProtocols: ["spdy/1", "http/1.1"], 7109 skipRemoteValidation: false 7110} 7111tlsServer.listen(tlsConnectOptions).then(() => { 7112 console.log("listen callback success"); 7113}).catch((err: BusinessError) => { 7114 console.log("failed: " + JSON.stringify(err)); 7115}); 7116``` 7117 7118### getState<sup>10+</sup> 7119 7120getState(callback: AsyncCallback\<SocketStateBase\>): void 7121 7122在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。 7123 7124> **说明:** 7125> listen方法调用成功后,才可调用此方法。 7126 7127**系统能力**:SystemCapability.Communication.NetStack 7128 7129**参数:** 7130 7131| 参数名 | 类型 | 必填 | 说明 | 7132| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 7133| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 | 7134 7135**错误码:** 7136 7137| 错误码ID | 错误信息 | 7138| -------- | ------------------------------- | 7139| 401 | Parameter error. | 7140| 2303188 | Socket operation on non-socket. | 7141| 2300002 | System internal error. | 7142 7143**示例:** 7144 7145```ts 7146import { socket } from '@kit.NetworkKit'; 7147import { BusinessError } from '@kit.BasicServicesKit'; 7148 7149let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7150let netAddress: socket.NetAddress = { 7151 address: '192.168.xx.xxx', 7152 port: 8080 7153} 7154let tlsSecureOptions: socket.TLSSecureOptions = { 7155 key: "xxxx", 7156 cert: "xxxx", 7157 ca: ["xxxx"], 7158 password: "xxxx", 7159 protocols: socket.Protocol.TLSv12, 7160 useRemoteCipherPrefer: true, 7161 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7162 cipherSuite: "AES256-SHA256" 7163} 7164let tlsConnectOptions: socket.TLSConnectOptions = { 7165 address: netAddress, 7166 secureOptions: tlsSecureOptions, 7167 ALPNProtocols: ["spdy/1", "http/1.1"] 7168} 7169tlsServer.listen(tlsConnectOptions).then(() => { 7170 console.log("listen callback success"); 7171}).catch((err: BusinessError) => { 7172 console.log("failed: " + JSON.stringify(err)); 7173}); 7174tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 7175 if (err) { 7176 console.log('getState fail'); 7177 return; 7178 } 7179 console.log('getState success:' + JSON.stringify(data)); 7180}); 7181``` 7182 7183### getState<sup>10+</sup> 7184 7185getState(): Promise\<SocketStateBase\> 7186 7187在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。 7188 7189> **说明:** 7190> listen方法调用成功后,才可调用此方法。 7191 7192**系统能力**:SystemCapability.Communication.NetStack 7193 7194**返回值:** 7195 7196| 类型 | 说明 | 7197| --------------------------------------------- | ----------------------------------------------------------- | 7198| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 | 7199 7200**错误码:** 7201 7202| 错误码ID | 错误信息 | 7203| -------- | ------------------------------- | 7204| 2303188 | Socket operation on non-socket. | 7205| 2300002 | System internal error. | 7206 7207**示例:** 7208 7209```ts 7210import { socket } from '@kit.NetworkKit'; 7211import { BusinessError } from '@kit.BasicServicesKit'; 7212 7213let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7214let netAddress: socket.NetAddress = { 7215 address: '192.168.xx.xxx', 7216 port: 8080 7217} 7218let tlsSecureOptions: socket.TLSSecureOptions = { 7219 key: "xxxx", 7220 cert: "xxxx", 7221 ca: ["xxxx"], 7222 password: "xxxx", 7223 protocols: socket.Protocol.TLSv12, 7224 useRemoteCipherPrefer: true, 7225 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7226 cipherSuite: "AES256-SHA256" 7227} 7228let tlsConnectOptions: socket.TLSConnectOptions = { 7229 address: netAddress, 7230 secureOptions: tlsSecureOptions, 7231 ALPNProtocols: ["spdy/1", "http/1.1"] 7232} 7233tlsServer.listen(tlsConnectOptions).then(() => { 7234 console.log("listen callback success"); 7235}).catch((err: BusinessError) => { 7236 console.log("failed: " + JSON.stringify(err)); 7237}); 7238tlsServer.getState().then(() => { 7239 console.log('getState success'); 7240}).catch((err: BusinessError) => { 7241 console.log('getState fail'); 7242}); 7243``` 7244 7245### setExtraOptions<sup>10+</sup> 7246 7247setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 7248 7249在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。 7250 7251> **说明:** 7252> listen方法调用成功后,才可调用此方法。 7253 7254**系统能力**:SystemCapability.Communication.NetStack 7255 7256**参数:** 7257 7258| 参数名 | 类型 | 必填 | 说明 | 7259| -------- | ------------------------------------ | ---- | ------------------------------------------------ | 7260| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 7261| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 7262 7263**错误码:** 7264 7265| 错误码ID | 错误信息 | 7266| -------- | ------------------------------- | 7267| 401 | Parameter error. | 7268| 2303188 | Socket operation on non-socket. | 7269| 2300002 | System internal error. | 7270 7271**示例:** 7272 7273```ts 7274import { socket } from '@kit.NetworkKit'; 7275import { BusinessError } from '@kit.BasicServicesKit'; 7276 7277let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7278let netAddress: socket.NetAddress = { 7279 address: '192.168.xx.xxx', 7280 port: 8080 7281} 7282let tlsSecureOptions: socket.TLSSecureOptions = { 7283 key: "xxxx", 7284 cert: "xxxx", 7285 ca: ["xxxx"], 7286 password: "xxxx", 7287 protocols: socket.Protocol.TLSv12, 7288 useRemoteCipherPrefer: true, 7289 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7290 cipherSuite: "AES256-SHA256" 7291} 7292let tlsConnectOptions: socket.TLSConnectOptions = { 7293 address: netAddress, 7294 secureOptions: tlsSecureOptions, 7295 ALPNProtocols: ["spdy/1", "http/1.1"] 7296} 7297tlsServer.listen(tlsConnectOptions).then(() => { 7298 console.log("listen callback success"); 7299}).catch((err: BusinessError) => { 7300 console.log("failed: " + JSON.stringify(err)); 7301}); 7302 7303interface SocketLinger { 7304 on: boolean; 7305 linger: number; 7306} 7307 7308let tcpExtraOptions: socket.TCPExtraOptions = { 7309 keepAlive: true, 7310 OOBInline: true, 7311 TCPNoDelay: true, 7312 socketLinger: { on: true, linger: 10 } as SocketLinger, 7313 receiveBufferSize: 1000, 7314 sendBufferSize: 1000, 7315 reuseAddress: true, 7316 socketTimeout: 3000 7317} 7318tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 7319 if (err) { 7320 console.log('setExtraOptions fail'); 7321 return; 7322 } 7323 console.log('setExtraOptions success'); 7324}); 7325``` 7326 7327### setExtraOptions<sup>10+</sup> 7328 7329setExtraOptions(options: TCPExtraOptions): Promise\<void\> 7330 7331在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。 7332 7333> **说明:** 7334> listen方法调用成功后,才可调用此方法。 7335 7336**系统能力**:SystemCapability.Communication.NetStack 7337 7338**参数:** 7339 7340| 参数名 | 类型 | 必填 | 说明 | 7341| ------- | ------------------------------------ | ---- | ------------------------------- | 7342| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 7343 7344**返回值:** 7345 7346| 类型 | 说明 | 7347| -------------- | -------------------------------------------------------- | 7348| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 7349 7350**错误码:** 7351 7352| 错误码ID | 错误信息 | 7353| -------- | ------------------------------- | 7354| 401 | Parameter error. | 7355| 2303188 | Socket operation on non-socket. | 7356| 2300002 | System internal error. | 7357 7358**示例:** 7359 7360```ts 7361import { socket } from '@kit.NetworkKit'; 7362import { BusinessError } from '@kit.BasicServicesKit'; 7363 7364let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7365let netAddress: socket.NetAddress = { 7366 address: '192.168.xx.xxx', 7367 port: 8080 7368} 7369let tlsSecureOptions: socket.TLSSecureOptions = { 7370 key: "xxxx", 7371 cert: "xxxx", 7372 ca: ["xxxx"], 7373 password: "xxxx", 7374 protocols: socket.Protocol.TLSv12, 7375 useRemoteCipherPrefer: true, 7376 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7377 cipherSuite: "AES256-SHA256" 7378} 7379let tlsConnectOptions: socket.TLSConnectOptions = { 7380 address: netAddress, 7381 secureOptions: tlsSecureOptions, 7382 ALPNProtocols: ["spdy/1", "http/1.1"] 7383} 7384tlsServer.listen(tlsConnectOptions).then(() => { 7385 console.log("listen callback success"); 7386}).catch((err: BusinessError) => { 7387 console.log("failed: " + JSON.stringify(err)); 7388}); 7389 7390interface SocketLinger { 7391 on: boolean; 7392 linger: number; 7393} 7394 7395let tcpExtraOptions: socket.TCPExtraOptions = { 7396 keepAlive: true, 7397 OOBInline: true, 7398 TCPNoDelay: true, 7399 socketLinger: { on: true, linger: 10 } as SocketLinger, 7400 receiveBufferSize: 1000, 7401 sendBufferSize: 1000, 7402 reuseAddress: true, 7403 socketTimeout: 3000 7404} 7405tlsServer.setExtraOptions(tcpExtraOptions).then(() => { 7406 console.log('setExtraOptions success'); 7407}).catch((err: BusinessError) => { 7408 console.log('setExtraOptions fail'); 7409}); 7410``` 7411 7412### getCertificate<sup>10+</sup> 7413 7414getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 7415 7416在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。 7417 7418> **说明:** 7419> listen方法调用成功后,才可调用此方法。 7420 7421**系统能力**:SystemCapability.Communication.NetStack 7422 7423**参数:** 7424 7425| 参数名 | 类型 | 必填 | 说明 | 7426| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- | 7427| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 | 7428 7429**错误码:** 7430 7431| 错误码ID | 错误信息 | 7432| -------- | ---------------------- | 7433| 401 | Parameter error. | 7434| 2303501 | SSL is null. | 7435| 2303504 | An error occurred when verifying the X.509 certificate. | 7436| 2300002 | System internal error. | 7437 7438**示例:** 7439 7440```ts 7441import { socket } from '@kit.NetworkKit'; 7442import { BusinessError } from '@kit.BasicServicesKit'; 7443import { util } from '@kit.ArkTS'; 7444 7445let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7446let netAddress: socket.NetAddress = { 7447 address: '192.168.xx.xxx', 7448 port: 8080 7449} 7450let tlsSecureOptions: socket.TLSSecureOptions = { 7451 key: "xxxx", 7452 cert: "xxxx", 7453 ca: ["xxxx"], 7454 password: "xxxx", 7455 protocols: socket.Protocol.TLSv12, 7456 useRemoteCipherPrefer: true, 7457 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7458 cipherSuite: "AES256-SHA256" 7459} 7460let tlsConnectOptions: socket.TLSConnectOptions = { 7461 address: netAddress, 7462 secureOptions: tlsSecureOptions, 7463 ALPNProtocols: ["spdy/1", "http/1.1"] 7464} 7465tlsServer.listen(tlsConnectOptions).then(() => { 7466 console.log("listen callback success"); 7467}).catch((err: BusinessError) => { 7468 console.log("failed: " + JSON.stringify(err)); 7469}); 7470tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 7471 if (err) { 7472 console.log("getCertificate callback error = " + err); 7473 } else { 7474 const decoder = util.TextDecoder.create(); 7475 const str = decoder.decodeWithStream(data.data); 7476 console.log("getCertificate callback: " + str); 7477 } 7478}); 7479``` 7480 7481### getCertificate<sup>10+</sup> 7482 7483getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 7484 7485在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。 7486 7487> **说明:** 7488> listen方法调用成功后,才可调用此方法。 7489 7490**系统能力**:SystemCapability.Communication.NetStack 7491 7492**返回值:** 7493 7494| 类型 | 说明 | 7495| ----------------------------------------------- | ------------------------------------------------------------ | 7496| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 7497 7498**错误码:** 7499 7500| 错误码ID | 错误信息 | 7501| -------- | ---------------------- | 7502| 2303501 | SSL is null. | 7503| 2303504 | An error occurred when verifying the X.509 certificate. | 7504| 2300002 | System internal error. | 7505 7506**示例:** 7507 7508```ts 7509import { socket } from '@kit.NetworkKit'; 7510import { BusinessError } from '@kit.BasicServicesKit'; 7511import { util } from '@kit.ArkTS'; 7512 7513let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7514let netAddress: socket.NetAddress = { 7515 address: '192.168.xx.xxx', 7516 port: 8080 7517} 7518let tlsSecureOptions: socket.TLSSecureOptions = { 7519 key: "xxxx", 7520 cert: "xxxx", 7521 ca: ["xxxx"], 7522 password: "xxxx", 7523 protocols: socket.Protocol.TLSv12, 7524 useRemoteCipherPrefer: true, 7525 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7526 cipherSuite: "AES256-SHA256" 7527} 7528let tlsConnectOptions: socket.TLSConnectOptions = { 7529 address: netAddress, 7530 secureOptions: tlsSecureOptions, 7531 ALPNProtocols: ["spdy/1", "http/1.1"] 7532} 7533tlsServer.listen(tlsConnectOptions).then(() => { 7534 console.log("listen callback success"); 7535}).catch((err: BusinessError) => { 7536 console.log("failed: " + JSON.stringify(err)); 7537}); 7538tlsServer.getCertificate().then((data: socket.X509CertRawData) => { 7539 const decoder = util.TextDecoder.create(); 7540 const str = decoder.decodeWithStream(data.data); 7541 console.log("getCertificate: " + str); 7542}).catch((err: BusinessError) => { 7543 console.error("failed" + err); 7544}); 7545``` 7546 7547### getProtocol<sup>10+</sup> 7548 7549getProtocol(callback: AsyncCallback\<string\>): void 7550 7551在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 7552 7553> **说明:** 7554> listen方法调用成功后,才可调用此方法。 7555 7556**系统能力**:SystemCapability.Communication.NetStack 7557 7558**参数:** 7559 7560| 参数名 | 类型 | 必填 | 说明 | 7561| -------- | ----------------------- | ---- | ---------------------------------------------------- | 7562| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。 | 7563 7564**错误码:** 7565 7566| 错误码ID | 错误信息 | 7567| -------- | -------------------------------------- | 7568| 401 | Parameter error. | 7569| 2303501 | SSL is null. | 7570| 2303505 | An error occurred in the TLS system call. | 7571| 2300002 | System internal error. | 7572 7573**示例:** 7574 7575```ts 7576import { socket } from '@kit.NetworkKit'; 7577import { BusinessError } from '@kit.BasicServicesKit'; 7578 7579let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7580let netAddress: socket.NetAddress = { 7581 address: '192.168.xx.xxx', 7582 port: 8080 7583} 7584let tlsSecureOptions: socket.TLSSecureOptions = { 7585 key: "xxxx", 7586 cert: "xxxx", 7587 ca: ["xxxx"], 7588 password: "xxxx", 7589 protocols: socket.Protocol.TLSv12, 7590 useRemoteCipherPrefer: true, 7591 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7592 cipherSuite: "AES256-SHA256" 7593} 7594let tlsConnectOptions: socket.TLSConnectOptions = { 7595 address: netAddress, 7596 secureOptions: tlsSecureOptions, 7597 ALPNProtocols: ["spdy/1", "http/1.1"] 7598} 7599tlsServer.listen(tlsConnectOptions).then(() => { 7600 console.log("listen callback success"); 7601}).catch((err: BusinessError) => { 7602 console.log("failed: " + JSON.stringify(err)); 7603}); 7604tlsServer.getProtocol((err: BusinessError, data: string) => { 7605 if (err) { 7606 console.log("getProtocol callback error = " + err); 7607 } else { 7608 console.log("getProtocol callback = " + data); 7609 } 7610}); 7611``` 7612 7613### getProtocol<sup>10+</sup> 7614 7615getProtocol():Promise\<string\> 7616 7617在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 7618 7619> **说明:** 7620> listen方法调用成功后,才可调用此方法。 7621 7622**系统能力**:SystemCapability.Communication.NetStack 7623 7624**返回值:** 7625 7626| 类型 | 说明 | 7627| ----------------- | ------------------------------------------------------- | 7628| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 7629 7630**错误码:** 7631 7632| 错误码ID | 错误信息 | 7633| -------- | -------------------------------------- | 7634| 2303501 | SSL is null. | 7635| 2303505 | An error occurred in the TLS system call. | 7636| 2300002 | System internal error. | 7637 7638**示例:** 7639 7640```ts 7641import { socket } from '@kit.NetworkKit'; 7642import { BusinessError } from '@kit.BasicServicesKit'; 7643 7644let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7645let netAddress: socket.NetAddress = { 7646 address: '192.168.xx.xxx', 7647 port: 8080 7648} 7649let tlsSecureOptions: socket.TLSSecureOptions = { 7650 key: "xxxx", 7651 cert: "xxxx", 7652 ca: ["xxxx"], 7653 password: "xxxx", 7654 protocols: socket.Protocol.TLSv12, 7655 useRemoteCipherPrefer: true, 7656 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7657 cipherSuite: "AES256-SHA256" 7658} 7659let tlsConnectOptions: socket.TLSConnectOptions = { 7660 address: netAddress, 7661 secureOptions: tlsSecureOptions, 7662 ALPNProtocols: ["spdy/1", "http/1.1"] 7663} 7664tlsServer.listen(tlsConnectOptions).then(() => { 7665 console.log("listen callback success"); 7666}).catch((err: BusinessError) => { 7667 console.log("failed: " + JSON.stringify(err)); 7668}); 7669tlsServer.getProtocol().then((data: string) => { 7670 console.log(data); 7671}).catch((err: BusinessError) => { 7672 console.error("failed" + err); 7673}); 7674``` 7675 7676### getLocalAddress<sup>12+</sup> 7677 7678getLocalAddress(): Promise\<NetAddress\> 7679 7680获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。 7681 7682> **说明:** 7683> 在TLSSocketServer通信连接成功之后,才可调用此方法。 7684 7685**系统能力**:SystemCapability.Communication.NetStack 7686 7687**返回值:** 7688 7689| 类型 | 说明 | 7690| -------------- | --------------------------------------------------- | 7691| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 7692 7693**错误码:** 7694 7695| 错误码ID | 错误信息 | 7696| -------- | ------------------------------------------- | 7697| 2300002 | System internal error. | 7698| 2301009 | Bad file descriptor. | 7699| 2303188 | Socket operation on non-socket. | 7700 7701**示例:** 7702 7703```ts 7704import { socket } from '@kit.NetworkKit'; 7705import { BusinessError } from '@kit.BasicServicesKit'; 7706 7707let tlsServer: socket.TLSSocket = socket.constructTLSSocketServerInstance(); 7708tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 7709 console.info("Get success: " + JSON.stringify(localAddress)); 7710}).catch((err: BusinessError) => { 7711 console.error("Get failed, error: " + JSON.stringify(err)); 7712}) 7713``` 7714 7715### on('connect')<sup>10+</sup> 7716 7717on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void 7718 7719订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 7720 7721> **说明:** 7722> listen方法调用成功后,才可调用此方法。 7723 7724**系统能力**:SystemCapability.Communication.NetStack 7725 7726**参数:** 7727 7728| 参数名 | 类型 | 必填 | 说明 | 7729| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 7730| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 7731| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 7732 7733**错误码:** 7734 7735| 错误码ID | 错误信息 | 7736| -------- | ---------------- | 7737| 401 | Parameter error. | 7738 7739**示例:** 7740 7741```ts 7742import { socket } from '@kit.NetworkKit'; 7743import { BusinessError } from '@kit.BasicServicesKit'; 7744 7745let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7746let netAddress: socket.NetAddress = { 7747 address: '192.168.xx.xxx', 7748 port: 8080 7749} 7750let tlsSecureOptions: socket.TLSSecureOptions = { 7751 key: "xxxx", 7752 cert: "xxxx", 7753 ca: ["xxxx"], 7754 password: "xxxx", 7755 protocols: socket.Protocol.TLSv12, 7756 useRemoteCipherPrefer: true, 7757 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7758 cipherSuite: "AES256-SHA256" 7759} 7760let tlsConnectOptions: socket.TLSConnectOptions = { 7761 address: netAddress, 7762 secureOptions: tlsSecureOptions, 7763 ALPNProtocols: ["spdy/1", "http/1.1"] 7764} 7765tlsServer.listen(tlsConnectOptions).then(() => { 7766 console.log("listen callback success"); 7767}).catch((err: BusinessError) => { 7768 console.log("failed: " + JSON.stringify(err)); 7769}); 7770tlsServer.on('connect', (data: socket.TLSSocketConnection) => { 7771 console.log(JSON.stringify(data)) 7772}); 7773``` 7774 7775### off('connect')<sup>10+</sup> 7776 7777off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void 7778 7779取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 7780 7781> **说明:** 7782> listen方法调用成功后,才可调用此方法。 7783> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7784 7785**系统能力**:SystemCapability.Communication.NetStack 7786 7787**参数:** 7788 7789| 参数名 | 类型 | 必填 | 说明 | 7790| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 7791| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 7792| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 7793 7794**错误码:** 7795 7796| 错误码ID | 错误信息 | 7797| -------- | ---------------- | 7798| 401 | Parameter error. | 7799 7800**示例:** 7801 7802```ts 7803import { socket } from '@kit.NetworkKit'; 7804import { BusinessError } from '@kit.BasicServicesKit'; 7805 7806let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7807let netAddress: socket.NetAddress = { 7808 address: '192.168.xx.xxx', 7809 port: 8080 7810} 7811let tlsSecureOptions: socket.TLSSecureOptions = { 7812 key: "xxxx", 7813 cert: "xxxx", 7814 ca: ["xxxx"], 7815 password: "xxxx", 7816 protocols: socket.Protocol.TLSv12, 7817 useRemoteCipherPrefer: true, 7818 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7819 cipherSuite: "AES256-SHA256" 7820} 7821let tlsConnectOptions: socket.TLSConnectOptions = { 7822 address: netAddress, 7823 secureOptions: tlsSecureOptions, 7824 ALPNProtocols: ["spdy/1", "http/1.1"] 7825} 7826tlsServer.listen(tlsConnectOptions).then(() => { 7827 console.log("listen callback success"); 7828}).catch((err: BusinessError) => { 7829 console.log("failed: " + JSON.stringify(err)); 7830}); 7831 7832let callback = (data: socket.TLSSocketConnection) => { 7833 console.log('on connect message: ' + JSON.stringify(data)); 7834} 7835tlsServer.on('connect', callback); 7836// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7837tlsServer.off('connect', callback); 7838tlsServer.off('connect'); 7839``` 7840 7841### on('error')<sup>10+</sup> 7842 7843on(type: 'error', callback: ErrorCallback): void 7844 7845订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 7846 7847> **说明:** 7848> listen方法调用成功后,才可调用此方法。 7849 7850**系统能力**:SystemCapability.Communication.NetStack 7851 7852**参数:** 7853 7854| 参数名 | 类型 | 必填 | 说明 | 7855| -------- | ------------- | ---- | ------------------------------------ | 7856| type | string | 是 | 订阅的事件类型。'error':error事件。 | 7857| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 7858 7859**错误码:** 7860 7861| 错误码ID | 错误信息 | 7862| -------- | ---------------- | 7863| 401 | Parameter error. | 7864 7865**示例:** 7866 7867```ts 7868import { socket } from '@kit.NetworkKit'; 7869import { BusinessError } from '@kit.BasicServicesKit'; 7870 7871let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7872let netAddress: socket.NetAddress = { 7873 address: '192.168.xx.xxx', 7874 port: 8080 7875} 7876let tlsSecureOptions: socket.TLSSecureOptions = { 7877 key: "xxxx", 7878 cert: "xxxx", 7879 ca: ["xxxx"], 7880 password: "xxxx", 7881 protocols: socket.Protocol.TLSv12, 7882 useRemoteCipherPrefer: true, 7883 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7884 cipherSuite: "AES256-SHA256" 7885} 7886let tlsConnectOptions: socket.TLSConnectOptions = { 7887 address: netAddress, 7888 secureOptions: tlsSecureOptions, 7889 ALPNProtocols: ["spdy/1", "http/1.1"] 7890} 7891tlsServer.listen(tlsConnectOptions).then(() => { 7892 console.log("listen callback success"); 7893}).catch((err: BusinessError) => { 7894 console.log("failed: " + JSON.stringify(err)); 7895}); 7896tlsServer.on('error', (err: BusinessError) => { 7897 console.log("on error, err:" + JSON.stringify(err)) 7898}); 7899``` 7900 7901### off('error')<sup>10+</sup> 7902 7903off(type: 'error', callback?: ErrorCallback): void 7904 7905取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 7906 7907> **说明:** 7908> listen方法调用成功后,才可调用此方法。 7909> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7910 7911**系统能力**:SystemCapability.Communication.NetStack 7912 7913**参数:** 7914 7915| 参数名 | 类型 | 必填 | 说明 | 7916| -------- | ------------- | ---- | ------------------------------------ | 7917| type | string | 是 | 订阅的事件类型。'error':error事件。 | 7918| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 7919 7920**错误码:** 7921 7922| 错误码ID | 错误信息 | 7923| -------- | ---------------- | 7924| 401 | Parameter error. | 7925 7926**示例:** 7927 7928```ts 7929import { socket } from '@kit.NetworkKit'; 7930import { BusinessError } from '@kit.BasicServicesKit'; 7931 7932let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7933let netAddress: socket.NetAddress = { 7934 address: '192.168.xx.xxx', 7935 port: 8080 7936} 7937let tlsSecureOptions: socket.TLSSecureOptions = { 7938 key: "xxxx", 7939 cert: "xxxx", 7940 ca: ["xxxx"], 7941 password: "xxxx", 7942 protocols: socket.Protocol.TLSv12, 7943 useRemoteCipherPrefer: true, 7944 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7945 cipherSuite: "AES256-SHA256" 7946} 7947let tlsConnectOptions: socket.TLSConnectOptions = { 7948 address: netAddress, 7949 secureOptions: tlsSecureOptions, 7950 ALPNProtocols: ["spdy/1", "http/1.1"] 7951} 7952tlsServer.listen(tlsConnectOptions).then(() => { 7953 console.log("listen callback success"); 7954}).catch((err: BusinessError) => { 7955 console.log("failed: " + JSON.stringify(err)); 7956}); 7957 7958let callback = (err: BusinessError) => { 7959 console.log("on error, err:" + JSON.stringify(err)); 7960} 7961tlsServer.on('error', callback); 7962// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 7963tlsServer.off('error', callback); 7964tlsServer.off('error'); 7965``` 7966 7967## TLSSocketConnection<sup>10+</sup> 7968 7969TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。 7970 7971> **说明:** 7972> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。 7973 7974**系统能力**:SystemCapability.Communication.NetStack 7975 7976### 属性 7977 7978| 名称 | 类型 | 必填 | 说明 | 7979| -------- | ------ | ---- | ------------------------------------- | 7980| clientId | number | 是 | 客户端与TLSSocketServer建立连接的id。 | 7981 7982### send<sup>10+</sup> 7983 7984send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 7985 7986在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。 7987 7988**系统能力**:SystemCapability.Communication.NetStack 7989 7990**参数:** 7991 7992| 参数名 | 类型 | 必填 | 说明 | 7993| -------- | --------------------- | ---- | ------------------------------------------------ | 7994| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 7995| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 7996 7997**错误码:** 7998 7999| 错误码ID | 错误信息 | 8000| -------- | -------------------------------------- | 8001| 401 | Parameter error. | 8002| 2303501 | SSL is null. | 8003| 2303503 | An error occurred when writing data on the TLS socket.| 8004| 2303505 | An error occurred in the TLS system call.| 8005| 2303506 | Failed to close the TLS connection. | 8006| 2300002 | System internal error. | 8007 8008**示例:** 8009 8010```ts 8011import { socket } from '@kit.NetworkKit'; 8012import { BusinessError } from '@kit.BasicServicesKit'; 8013 8014let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8015let netAddress: socket.NetAddress = { 8016 address: '192.168.xx.xxx', 8017 port: 8080 8018} 8019let tlsSecureOptions: socket.TLSSecureOptions = { 8020 key: "xxxx", 8021 cert: "xxxx", 8022 ca: ["xxxx"], 8023 password: "xxxx", 8024 protocols: socket.Protocol.TLSv12, 8025 useRemoteCipherPrefer: true, 8026 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8027 cipherSuite: "AES256-SHA256" 8028} 8029let tlsConnectOptions: socket.TLSConnectOptions = { 8030 address: netAddress, 8031 secureOptions: tlsSecureOptions, 8032 ALPNProtocols: ["spdy/1", "http/1.1"] 8033} 8034tlsServer.listen(tlsConnectOptions).then(() => { 8035 console.log("listen callback success"); 8036}).catch((err: BusinessError) => { 8037 console.log("failed" + err); 8038}); 8039 8040tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8041 client.send('Hello, client!', (err: BusinessError) => { 8042 if (err) { 8043 console.log('send fail'); 8044 return; 8045 } 8046 console.log('send success'); 8047 }); 8048}); 8049``` 8050 8051### send<sup>10+</sup> 8052 8053send(data: string \| ArrayBuffer): Promise\<void\> 8054 8055在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 8056 8057**系统能力**:SystemCapability.Communication.NetStack 8058 8059**参数:** 8060 8061| 参数名 | 类型 | 必填 | 说明 | 8062| ------ | ------ | ---- | ------------------------------------- | 8063| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 8064 8065**返回值:** 8066 8067| 类型 | 说明 | 8068| --------------- | --------------------------------------------------------- | 8069| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 8070 8071**错误码:** 8072 8073| 错误码ID | 错误信息 | 8074| -------- | -------------------------------------- | 8075| 401 | Parameter error. | 8076| 2303501 | SSL is null. | 8077| 2303503 | An error occurred when writing data on the TLS socket.| 8078| 2303505 | An error occurred in the TLS system call.| 8079| 2303506 | Failed to close the TLS connection. | 8080| 2300002 | System internal error. | 8081 8082**示例:** 8083 8084```ts 8085import { socket } from '@kit.NetworkKit'; 8086import { BusinessError } from '@kit.BasicServicesKit'; 8087 8088let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8089let netAddress: socket.NetAddress = { 8090 address: '192.168.xx.xxx', 8091 port: 8080 8092} 8093let tlsSecureOptions: socket.TLSSecureOptions = { 8094 key: "xxxx", 8095 cert: "xxxx", 8096 ca: ["xxxx"], 8097 password: "xxxx", 8098 protocols: socket.Protocol.TLSv12, 8099 useRemoteCipherPrefer: true, 8100 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8101 cipherSuite: "AES256-SHA256" 8102} 8103let tlsConnectOptions: socket.TLSConnectOptions = { 8104 address: netAddress, 8105 secureOptions: tlsSecureOptions, 8106 ALPNProtocols: ["spdy/1", "http/1.1"] 8107} 8108tlsServer.listen(tlsConnectOptions).then(() => { 8109 console.log("listen callback success"); 8110}).catch((err: BusinessError) => { 8111 console.log("failed" + err); 8112}); 8113 8114tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8115 client.send('Hello, client!').then(() => { 8116 console.log('send success'); 8117 }).catch((err: BusinessError) => { 8118 console.log('send fail'); 8119 }); 8120}); 8121``` 8122 8123### close<sup>10+</sup> 8124 8125close(callback: AsyncCallback\<void\>): void 8126 8127在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。 8128 8129**系统能力**:SystemCapability.Communication.NetStack 8130 8131**参数:** 8132 8133| 参数名 | 类型 | 必填 | 说明 | 8134| -------- | --------------------- | ---- | ------------------------------------------------ | 8135| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 8136 8137**错误码:** 8138 8139| 错误码ID | 错误信息 | 8140| -------- | -------------------------------------- | 8141| 401 | Parameter error. | 8142| 2303501 | SSL is null. | 8143| 2303505 | An error occurred in the TLS system call. | 8144| 2303506 | Failed to close the TLS connection. | 8145| 2300002 | System internal error. | 8146 8147**示例:** 8148 8149```ts 8150import { socket } from '@kit.NetworkKit'; 8151import { BusinessError } from '@kit.BasicServicesKit'; 8152 8153let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8154let netAddress: socket.NetAddress = { 8155 address: '192.168.xx.xxx', 8156 port: 8080 8157} 8158let tlsSecureOptions: socket.TLSSecureOptions = { 8159 key: "xxxx", 8160 cert: "xxxx", 8161 ca: ["xxxx"], 8162 password: "xxxx", 8163 protocols: socket.Protocol.TLSv12, 8164 useRemoteCipherPrefer: true, 8165 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8166 cipherSuite: "AES256-SHA256" 8167} 8168let tlsConnectOptions: socket.TLSConnectOptions = { 8169 address: netAddress, 8170 secureOptions: tlsSecureOptions, 8171 ALPNProtocols: ["spdy/1", "http/1.1"] 8172} 8173tlsServer.listen(tlsConnectOptions).then(() => { 8174 console.log("listen callback success"); 8175}).catch((err: BusinessError) => { 8176 console.log("failed" + err); 8177}); 8178 8179tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8180 client.close((err: BusinessError) => { 8181 if (err) { 8182 console.log('close fail'); 8183 return; 8184 } 8185 console.log('close success'); 8186 }); 8187}); 8188``` 8189 8190### close<sup>10+</sup> 8191 8192close(): Promise\<void\> 8193 8194在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。 8195 8196**系统能力**:SystemCapability.Communication.NetStack 8197 8198**返回值:** 8199 8200| 类型 | 说明 | 8201| --------------- | --------------------------------------------------------- | 8202| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 | 8203 8204**错误码:** 8205 8206| 错误码ID | 错误信息 | 8207| -------- | -------------------------------------- | 8208| 2303501 | SSL is null. | 8209| 2303505 | An error occurred in the TLS system call. | 8210| 2303506 | Failed to close the TLS connection. | 8211| 2300002 | System internal error. | 8212 8213**示例:** 8214 8215```ts 8216import { socket } from '@kit.NetworkKit'; 8217import { BusinessError } from '@kit.BasicServicesKit'; 8218 8219let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8220let netAddress: socket.NetAddress = { 8221 address: '192.168.xx.xxx', 8222 port: 8080 8223} 8224let tlsSecureOptions: socket.TLSSecureOptions = { 8225 key: "xxxx", 8226 cert: "xxxx", 8227 ca: ["xxxx"], 8228 password: "xxxx", 8229 protocols: socket.Protocol.TLSv12, 8230 useRemoteCipherPrefer: true, 8231 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8232 cipherSuite: "AES256-SHA256" 8233} 8234let tlsConnectOptions: socket.TLSConnectOptions = { 8235 address: netAddress, 8236 secureOptions: tlsSecureOptions, 8237 ALPNProtocols: ["spdy/1", "http/1.1"] 8238} 8239tlsServer.listen(tlsConnectOptions).then(() => { 8240 console.log("listen callback success"); 8241}).catch((err: BusinessError) => { 8242 console.log("failed" + err); 8243}); 8244tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8245 client.close().then(() => { 8246 console.log('close success'); 8247 }).catch((err: BusinessError) => { 8248 console.log('close fail'); 8249 }); 8250}); 8251``` 8252 8253### getRemoteAddress<sup>10+</sup> 8254 8255getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 8256 8257在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 8258 8259**系统能力**:SystemCapability.Communication.NetStack 8260 8261**参数:** 8262 8263| 参数名 | 类型 | 必填 | 说明 | 8264| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ | 8265| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 8266 8267**错误码:** 8268 8269| 错误码ID | 错误信息 | 8270| -------- | ------------------------------- | 8271| 401 | Parameter error. | 8272| 2303188 | Socket operation on non-socket. | 8273| 2300002 | System internal error. | 8274 8275**示例:** 8276 8277```ts 8278import { socket } from '@kit.NetworkKit'; 8279import { BusinessError } from '@kit.BasicServicesKit'; 8280 8281let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8282let netAddress: socket.NetAddress = { 8283 address: '192.168.xx.xxx', 8284 port: 8080 8285} 8286let tlsSecureOptions: socket.TLSSecureOptions = { 8287 key: "xxxx", 8288 cert: "xxxx", 8289 ca: ["xxxx"], 8290 password: "xxxx", 8291 protocols: socket.Protocol.TLSv12, 8292 useRemoteCipherPrefer: true, 8293 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8294 cipherSuite: "AES256-SHA256" 8295} 8296let tlsConnectOptions: socket.TLSConnectOptions = { 8297 address: netAddress, 8298 secureOptions: tlsSecureOptions, 8299 ALPNProtocols: ["spdy/1", "http/1.1"] 8300} 8301tlsServer.listen(tlsConnectOptions).then(() => { 8302 console.log("listen callback success"); 8303}).catch((err: BusinessError) => { 8304 console.log("failed" + err); 8305}); 8306tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8307 client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 8308 if (err) { 8309 console.log('getRemoteAddress fail'); 8310 return; 8311 } 8312 console.log('getRemoteAddress success:' + JSON.stringify(data)); 8313 }); 8314}); 8315``` 8316 8317### getRemoteAddress<sup>10+</sup> 8318 8319getRemoteAddress(): Promise\<NetAddress\> 8320 8321在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 8322 8323**系统能力**:SystemCapability.Communication.NetStack 8324 8325**返回值:** 8326 8327| 类型 | 说明 | 8328| ----------------------------------- | ----------------------------------------------------------- | 8329| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 8330 8331**错误码:** 8332 8333| 错误码ID | 错误信息 | 8334| -------- | ------------------------------- | 8335| 2303188 | Socket operation on non-socket. | 8336| 2300002 | System internal error. | 8337 8338**示例:** 8339 8340```ts 8341import { socket } from '@kit.NetworkKit'; 8342import { BusinessError } from '@kit.BasicServicesKit'; 8343 8344let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8345let netAddress: socket.NetAddress = { 8346 address: '192.168.xx.xxx', 8347 port: 8080 8348} 8349let tlsSecureOptions: socket.TLSSecureOptions = { 8350 key: "xxxx", 8351 cert: "xxxx", 8352 ca: ["xxxx"], 8353 password: "xxxx", 8354 protocols: socket.Protocol.TLSv12, 8355 useRemoteCipherPrefer: true, 8356 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8357 cipherSuite: "AES256-SHA256" 8358} 8359let tlsConnectOptions: socket.TLSConnectOptions = { 8360 address: netAddress, 8361 secureOptions: tlsSecureOptions, 8362 ALPNProtocols: ["spdy/1", "http/1.1"] 8363} 8364tlsServer.listen(tlsConnectOptions).then(() => { 8365 console.log("listen callback success"); 8366}).catch((err: BusinessError) => { 8367 console.log("failed" + err); 8368}); 8369tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8370 client.getRemoteAddress().then((data: socket.NetAddress) => { 8371 console.log('getRemoteAddress success:' + JSON.stringify(data)); 8372 }).catch((err: BusinessError) => { 8373 console.error("failed" + err); 8374 }); 8375}); 8376``` 8377 8378### getRemoteCertificate<sup>10+</sup> 8379 8380getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 8381 8382在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。 8383 8384**系统能力**:SystemCapability.Communication.NetStack 8385 8386**参数:** 8387 8388| 参数名 | 类型 | 必填 | 说明 | 8389| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- | 8390| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回对端的证书。失败返回错误码、错误信息。 | 8391 8392**错误码:** 8393 8394| 错误码ID | 错误信息 | 8395| -------- | ---------------------- | 8396| 401 | Parameter error. | 8397| 2303501 | SSL is null. | 8398| 2300002 | System internal error. | 8399 8400**示例:** 8401 8402```ts 8403import { socket } from '@kit.NetworkKit'; 8404import { BusinessError } from '@kit.BasicServicesKit'; 8405import { util } from '@kit.ArkTS'; 8406 8407let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8408let netAddress: socket.NetAddress = { 8409 address: '192.168.xx.xxx', 8410 port: 8080 8411} 8412let tlsSecureOptions: socket.TLSSecureOptions = { 8413 key: "xxxx", 8414 cert: "xxxx", 8415 ca: ["xxxx"], 8416 password: "xxxx", 8417 protocols: socket.Protocol.TLSv12, 8418 useRemoteCipherPrefer: true, 8419 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8420 cipherSuite: "AES256-SHA256" 8421} 8422let tlsConnectOptions: socket.TLSConnectOptions = { 8423 address: netAddress, 8424 secureOptions: tlsSecureOptions, 8425 ALPNProtocols: ["spdy/1", "http/1.1"] 8426} 8427tlsServer.listen(tlsConnectOptions).then(() => { 8428 console.log("listen callback success"); 8429}).catch((err: BusinessError) => { 8430 console.log("failed" + err); 8431}); 8432tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8433 client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 8434 if (err) { 8435 console.log("getRemoteCertificate callback error: " + err); 8436 } else { 8437 const decoder = util.TextDecoder.create(); 8438 const str = decoder.decodeWithStream(data.data); 8439 console.log("getRemoteCertificate callback: " + str); 8440 } 8441 }); 8442}); 8443``` 8444 8445### getRemoteCertificate<sup>10+</sup> 8446 8447getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 8448 8449在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。 8450 8451**系统能力**:SystemCapability.Communication.NetStack 8452 8453**返回值:** 8454 8455| 类型 | 说明 | 8456| ----------------------------------------------- | ------------------------------------------------------------ | 8457| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 | 8458 8459**错误码:** 8460 8461| 错误码ID | 错误信息 | 8462| -------- | ---------------------- | 8463| 2303501 | SSL is null. | 8464| 2300002 | System internal error. | 8465 8466**示例:** 8467 8468```ts 8469import { socket } from '@kit.NetworkKit'; 8470import { BusinessError } from '@kit.BasicServicesKit'; 8471import { util } from '@kit.ArkTS'; 8472 8473let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8474let netAddress: socket.NetAddress = { 8475 address: '192.168.xx.xxx', 8476 port: 8080 8477} 8478let tlsSecureOptions: socket.TLSSecureOptions = { 8479 key: "xxxx", 8480 cert: "xxxx", 8481 ca: ["xxxx"], 8482 password: "xxxx", 8483 protocols: socket.Protocol.TLSv12, 8484 useRemoteCipherPrefer: true, 8485 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8486 cipherSuite: "AES256-SHA256" 8487} 8488let tlsConnectOptions: socket.TLSConnectOptions = { 8489 address: netAddress, 8490 secureOptions: tlsSecureOptions, 8491 ALPNProtocols: ["spdy/1", "http/1.1"] 8492} 8493tlsServer.listen(tlsConnectOptions).then(() => { 8494 console.log("listen callback success"); 8495}).catch((err: BusinessError) => { 8496 console.log("failed" + err); 8497}); 8498tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8499 client.getRemoteCertificate().then((data: socket.X509CertRawData) => { 8500 const decoder = util.TextDecoder.create(); 8501 const str = decoder.decodeWithStream(data.data); 8502 console.log("getRemoteCertificate success: " + str); 8503 }).catch((err: BusinessError) => { 8504 console.error("failed" + err); 8505 }); 8506}); 8507``` 8508 8509### getCipherSuite<sup>10+</sup> 8510 8511getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 8512 8513在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 8514 8515**系统能力**:SystemCapability.Communication.NetStack 8516 8517**参数:** 8518 8519| 参数名 | 类型 | 必填 | 说明 | 8520| -------- | -------------------------------- | ---- | ------------------------------------------------------------ | 8521| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 8522 8523**错误码:** 8524 8525| 错误码ID | 错误信息 | 8526| -------- | -------------------------------------- | 8527| 401 | Parameter error. | 8528| 2303501 | SSL is null. | 8529| 2303502 | An error occurred when reading data on the TLS socket.| 8530| 2303505 | An error occurred in the TLS system call.| 8531| 2300002 | System internal error. | 8532 8533**示例:** 8534 8535```ts 8536import { socket } from '@kit.NetworkKit'; 8537import { BusinessError } from '@kit.BasicServicesKit'; 8538 8539let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8540let netAddress: socket.NetAddress = { 8541 address: '192.168.xx.xxx', 8542 port: 8080 8543} 8544let tlsSecureOptions: socket.TLSSecureOptions = { 8545 key: "xxxx", 8546 cert: "xxxx", 8547 ca: ["xxxx"], 8548 password: "xxxx", 8549 protocols: socket.Protocol.TLSv12, 8550 useRemoteCipherPrefer: true, 8551 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8552 cipherSuite: "AES256-SHA256" 8553} 8554let tlsConnectOptions: socket.TLSConnectOptions = { 8555 address: netAddress, 8556 secureOptions: tlsSecureOptions, 8557 ALPNProtocols: ["spdy/1", "http/1.1"] 8558} 8559tlsServer.listen(tlsConnectOptions).then(() => { 8560 console.log("listen callback success"); 8561}).catch((err: BusinessError) => { 8562 console.log("failed" + err); 8563}); 8564tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8565 client.getCipherSuite((err: BusinessError, data: Array<string>) => { 8566 if (err) { 8567 console.log("getCipherSuite callback error = " + err); 8568 } else { 8569 console.log("getCipherSuite callback = " + data); 8570 } 8571 }); 8572}); 8573``` 8574 8575### getCipherSuite<sup>10+</sup> 8576 8577getCipherSuite(): Promise\<Array\<string\>\> 8578 8579在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 8580 8581**系统能力**:SystemCapability.Communication.NetStack 8582 8583**返回值:** 8584 8585| 类型 | 说明 | 8586| -------------------------- | ------------------------------------------------------------ | 8587| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 8588 8589**错误码:** 8590 8591| 错误码ID | 错误信息 | 8592| -------- | -------------------------------------- | 8593| 2303501 | SSL is null. | 8594| 2303502 | An error occurred when reading data on the TLS socket.| 8595| 2303505 | An error occurred in the TLS system call. | 8596| 2300002 | System internal error. | 8597 8598**示例:** 8599 8600```ts 8601import { socket } from '@kit.NetworkKit'; 8602import { BusinessError } from '@kit.BasicServicesKit'; 8603 8604let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8605let netAddress: socket.NetAddress = { 8606 address: '192.168.xx.xxx', 8607 port: 8080 8608} 8609let tlsSecureOptions: socket.TLSSecureOptions = { 8610 key: "xxxx", 8611 cert: "xxxx", 8612 ca: ["xxxx"], 8613 password: "xxxx", 8614 protocols: socket.Protocol.TLSv12, 8615 useRemoteCipherPrefer: true, 8616 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8617 cipherSuite: "AES256-SHA256" 8618} 8619let tlsConnectOptions: socket.TLSConnectOptions = { 8620 address: netAddress, 8621 secureOptions: tlsSecureOptions, 8622 ALPNProtocols: ["spdy/1", "http/1.1"] 8623} 8624tlsServer.listen(tlsConnectOptions).then(() => { 8625 console.log("listen callback success"); 8626}).catch((err: BusinessError) => { 8627 console.log("failed" + err); 8628}); 8629tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8630 client.getCipherSuite().then((data: Array<string>) => { 8631 console.log('getCipherSuite success:' + JSON.stringify(data)); 8632 }).catch((err: BusinessError) => { 8633 console.error("failed" + err); 8634 }); 8635}); 8636``` 8637 8638### getSignatureAlgorithms<sup>10+</sup> 8639 8640getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 8641 8642在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。 8643 8644**系统能力**:SystemCapability.Communication.NetStack 8645 8646**参数:** 8647 8648| 参数名 | 类型 | 必填 | 说明 | 8649| -------- | -------------------------------- | ---- | ---------------------------------- | 8650| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 8651 8652**错误码:** 8653 8654| 错误码ID | 错误信息 | 8655| -------- | ---------------------- | 8656| 401 | Parameter error. | 8657| 2303501 | SSL is null. | 8658| 2300002 | System internal error. | 8659 8660**示例:** 8661 8662```ts 8663import { socket } from '@kit.NetworkKit'; 8664import { BusinessError } from '@kit.BasicServicesKit'; 8665 8666let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8667let netAddress: socket.NetAddress = { 8668 address: '192.168.xx.xxx', 8669 port: 8080 8670} 8671let tlsSecureOptions: socket.TLSSecureOptions = { 8672 key: "xxxx", 8673 cert: "xxxx", 8674 ca: ["xxxx"], 8675 password: "xxxx", 8676 protocols: socket.Protocol.TLSv12, 8677 useRemoteCipherPrefer: true, 8678 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8679 cipherSuite: "AES256-SHA256" 8680} 8681let tlsConnectOptions: socket.TLSConnectOptions = { 8682 address: netAddress, 8683 secureOptions: tlsSecureOptions, 8684 ALPNProtocols: ["spdy/1", "http/1.1"] 8685} 8686tlsServer.listen(tlsConnectOptions).then(() => { 8687 console.log("listen callback success"); 8688}).catch((err: BusinessError) => { 8689 console.log("failed" + err); 8690}); 8691tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8692 client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 8693 if (err) { 8694 console.log("getSignatureAlgorithms callback error = " + err); 8695 } else { 8696 console.log("getSignatureAlgorithms callback = " + data); 8697 } 8698 }); 8699}); 8700``` 8701 8702### getSignatureAlgorithms<sup>10+</sup> 8703 8704getSignatureAlgorithms(): Promise\<Array\<string\>\> 8705 8706在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。 8707 8708**系统能力**:SystemCapability.Communication.NetStack 8709 8710**返回值:** 8711 8712| 类型 | 说明 | 8713| -------------------------- | --------------------------------------------- | 8714| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 8715 8716**错误码:** 8717 8718| 错误码ID | 错误信息 | 8719| -------- | ---------------------- | 8720| 2303501 | SSL is null. | 8721| 2300002 | System internal error. | 8722 8723**示例:** 8724 8725```ts 8726import { socket } from '@kit.NetworkKit'; 8727import { BusinessError } from '@kit.BasicServicesKit'; 8728 8729let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8730let netAddress: socket.NetAddress = { 8731 address: '192.168.xx.xxx', 8732 port: 8080 8733} 8734let tlsSecureOptions: socket.TLSSecureOptions = { 8735 key: "xxxx", 8736 cert: "xxxx", 8737 ca: ["xxxx"], 8738 password: "xxxx", 8739 protocols: socket.Protocol.TLSv12, 8740 useRemoteCipherPrefer: true, 8741 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8742 cipherSuite: "AES256-SHA256" 8743} 8744let tlsConnectOptions: socket.TLSConnectOptions = { 8745 address: netAddress, 8746 secureOptions: tlsSecureOptions, 8747 ALPNProtocols: ["spdy/1", "http/1.1"] 8748} 8749tlsServer.listen(tlsConnectOptions).then(() => { 8750 console.log("listen callback success"); 8751}).catch((err: BusinessError) => { 8752 console.log("failed" + err); 8753}); 8754tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8755 client.getSignatureAlgorithms().then((data: Array<string>) => { 8756 console.log("getSignatureAlgorithms success" + data); 8757 }).catch((err: BusinessError) => { 8758 console.error("failed" + err); 8759 }); 8760}); 8761``` 8762 8763### getLocalAddress<sup>12+</sup> 8764 8765getLocalAddress(): Promise\<NetAddress\> 8766 8767获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 8768 8769> **说明:** 8770> 在TLSSocketServer通信连接成功之后,才可调用此方法。 8771 8772**系统能力**:SystemCapability.Communication.NetStack 8773 8774**返回值:** 8775 8776| 类型 | 说明 | 8777| -------------- | --------------------------------------------------- | 8778| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 8779 8780**错误码:** 8781 8782| 错误码ID | 错误信息 | 8783| -------- | ------------------------------------------- | 8784| 2300002 | System internal error. | 8785| 2301009 | Bad file descriptor. | 8786| 2303188 | Socket operation on non-socket. | 8787 8788**示例:** 8789 8790```ts 8791import { socket } from '@kit.NetworkKit'; 8792import { BusinessError } from '@kit.BasicServicesKit'; 8793 8794let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8795let netAddress: socket.NetAddress = { 8796 address: '192.168.xx.xxx', 8797 port: 8080 8798} 8799let tlsSecureOptions: socket.TLSSecureOptions = { 8800 key: "xxxx", 8801 cert: "xxxx", 8802 ca: ["xxxx"], 8803 password: "xxxx", 8804 protocols: socket.Protocol.TLSv12, 8805 useRemoteCipherPrefer: true, 8806 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8807 cipherSuite: "AES256-SHA256" 8808} 8809let tlsConnectOptions: socket.TLSConnectOptions = { 8810 address: netAddress, 8811 secureOptions: tlsSecureOptions, 8812 ALPNProtocols: ["spdy/1", "http/1.1"] 8813} 8814tlsServer.listen(tlsConnectOptions).then(() => { 8815 console.info("listen callback success"); 8816}).catch((err: BusinessError) => { 8817 console.error("failed" + err); 8818}); 8819 8820tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8821 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 8822 console.info("Family IP Port: " + JSON.stringify(localAddress)); 8823 }).catch((err: BusinessError) => { 8824 console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err)); 8825 }) 8826}); 8827``` 8828 8829### on('message')<sup>10+</sup> 8830 8831on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 8832 8833订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 8834 8835**系统能力**:SystemCapability.Communication.NetStack 8836 8837**参数:** 8838 8839| 参数名 | 类型 | 必填 | 说明 | 8840| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 8841| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 8842| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 8843 8844**错误码:** 8845 8846| 错误码ID | 错误信息 | 8847| -------- | ---------------- | 8848| 401 | Parameter error. | 8849 8850**示例:** 8851 8852```ts 8853import { socket } from '@kit.NetworkKit'; 8854import { BusinessError } from '@kit.BasicServicesKit'; 8855 8856let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8857let netAddress: socket.NetAddress = { 8858 address: '192.168.xx.xxx', 8859 port: 8080 8860} 8861let tlsSecureOptions: socket.TLSSecureOptions = { 8862 key: "xxxx", 8863 cert: "xxxx", 8864 ca: ["xxxx"], 8865 password: "xxxx", 8866 protocols: socket.Protocol.TLSv12, 8867 useRemoteCipherPrefer: true, 8868 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8869 cipherSuite: "AES256-SHA256" 8870} 8871let tlsConnectOptions: socket.TLSConnectOptions = { 8872 address: netAddress, 8873 secureOptions: tlsSecureOptions, 8874 ALPNProtocols: ["spdy/1", "http/1.1"] 8875} 8876tlsServer.listen(tlsConnectOptions).then(() => { 8877 console.log("listen callback success"); 8878}).catch((err: BusinessError) => { 8879 console.log("failed" + err); 8880}); 8881 8882tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8883 client.on('message', (value: socket.SocketMessageInfo) => { 8884 let messageView = ''; 8885 for (let i: number = 0; i < value.message.byteLength; i++) { 8886 let uint8Array = new Uint8Array(value.message) 8887 let messages = uint8Array[i] 8888 let message = String.fromCharCode(messages); 8889 messageView += message; 8890 } 8891 console.log('on message message: ' + JSON.stringify(messageView)); 8892 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 8893 }); 8894}); 8895``` 8896 8897### off('message')<sup>10+</sup> 8898 8899off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 8900 8901取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 8902 8903**系统能力**:SystemCapability.Communication.NetStack 8904 8905**参数:** 8906 8907| 参数名 | 类型 | 必填 | 说明 | 8908| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 8909| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 8910| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 8911 8912**错误码:** 8913 8914| 错误码ID | 错误信息 | 8915| -------- | ---------------- | 8916| 401 | Parameter error. | 8917 8918**示例:** 8919 8920```ts 8921import { socket } from '@kit.NetworkKit'; 8922import { BusinessError } from '@kit.BasicServicesKit'; 8923 8924let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8925let netAddress: socket.NetAddress = { 8926 address: '192.168.xx.xxx', 8927 port: 8080 8928} 8929let tlsSecureOptions: socket.TLSSecureOptions = { 8930 key: "xxxx", 8931 cert: "xxxx", 8932 ca: ["xxxx"], 8933 password: "xxxx", 8934 protocols: socket.Protocol.TLSv12, 8935 useRemoteCipherPrefer: true, 8936 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8937 cipherSuite: "AES256-SHA256" 8938} 8939let tlsConnectOptions: socket.TLSConnectOptions = { 8940 address: netAddress, 8941 secureOptions: tlsSecureOptions, 8942 ALPNProtocols: ["spdy/1", "http/1.1"] 8943} 8944tlsServer.listen(tlsConnectOptions).then(() => { 8945 console.log("listen callback success"); 8946}).catch((err: BusinessError) => { 8947 console.log("failed" + err); 8948}); 8949 8950let callback = (value: socket.SocketMessageInfo) => { 8951 let messageView = ''; 8952 for (let i: number = 0; i < value.message.byteLength; i++) { 8953 let uint8Array = new Uint8Array(value.message) 8954 let messages = uint8Array[i] 8955 let message = String.fromCharCode(messages); 8956 messageView += message; 8957 } 8958 console.log('on message message: ' + JSON.stringify(messageView)); 8959 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 8960} 8961tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8962 client.on('message', callback); 8963 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8964 client.off('message', callback); 8965 client.off('message'); 8966}); 8967``` 8968 8969### on('close')<sup>10+</sup> 8970 8971on(type: 'close', callback: Callback\<void\>): void 8972 8973订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 8974 8975**系统能力**:SystemCapability.Communication.NetStack 8976 8977**参数:** 8978 8979| 参数名 | 类型 | 必填 | 说明 | 8980| -------- | ---------------- | ---- | ----------------------------------- | 8981| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 8982| callback | Callback\<void\> | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 8983 8984**错误码:** 8985 8986| 错误码ID | 错误信息 | 8987| -------- | ---------------- | 8988| 401 | Parameter error. | 8989 8990**示例:** 8991 8992```ts 8993import { socket } from '@kit.NetworkKit'; 8994import { BusinessError } from '@kit.BasicServicesKit'; 8995 8996let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8997let netAddress: socket.NetAddress = { 8998 address: '192.168.xx.xxx', 8999 port: 8080 9000} 9001let tlsSecureOptions: socket.TLSSecureOptions = { 9002 key: "xxxx", 9003 cert: "xxxx", 9004 ca: ["xxxx"], 9005 password: "xxxx", 9006 protocols: socket.Protocol.TLSv12, 9007 useRemoteCipherPrefer: true, 9008 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9009 cipherSuite: "AES256-SHA256" 9010} 9011let tlsConnectOptions: socket.TLSConnectOptions = { 9012 address: netAddress, 9013 secureOptions: tlsSecureOptions, 9014 ALPNProtocols: ["spdy/1", "http/1.1"] 9015} 9016tlsServer.listen(tlsConnectOptions).then(() => { 9017 console.log("listen callback success"); 9018}).catch((err: BusinessError) => { 9019 console.log("failed" + err); 9020}); 9021tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9022 client.on('close', () => { 9023 console.log("on close success") 9024 }); 9025}); 9026``` 9027 9028### off('close')<sup>10+</sup> 9029 9030off(type: 'close', callback?: Callback\<void\>): void 9031 9032取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 9033 9034**系统能力**:SystemCapability.Communication.NetStack 9035 9036**参数:** 9037 9038| 参数名 | 类型 | 必填 | 说明 | 9039| -------- | ---------------- | ---- | ----------------------------------- | 9040| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 9041| callback | Callback\<void\> | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9042 9043**错误码:** 9044 9045| 错误码ID | 错误信息 | 9046| -------- | ---------------- | 9047| 401 | Parameter error. | 9048 9049**示例:** 9050 9051```ts 9052import { socket } from '@kit.NetworkKit'; 9053import { BusinessError } from '@kit.BasicServicesKit'; 9054 9055let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9056let netAddress: socket.NetAddress = { 9057 address: '192.168.xx.xxx', 9058 port: 8080 9059} 9060let tlsSecureOptions: socket.TLSSecureOptions = { 9061 key: "xxxx", 9062 cert: "xxxx", 9063 ca: ["xxxx"], 9064 password: "xxxx", 9065 protocols: socket.Protocol.TLSv12, 9066 useRemoteCipherPrefer: true, 9067 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9068 cipherSuite: "AES256-SHA256" 9069} 9070let tlsConnectOptions: socket.TLSConnectOptions = { 9071 address: netAddress, 9072 secureOptions: tlsSecureOptions, 9073 ALPNProtocols: ["spdy/1", "http/1.1"] 9074} 9075tlsServer.listen(tlsConnectOptions).then(() => { 9076 console.log("listen callback success"); 9077}).catch((err: BusinessError) => { 9078 console.log("failed" + err); 9079}); 9080 9081let callback = () => { 9082 console.log("on close success"); 9083} 9084tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9085 client.on('close', callback); 9086 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9087 client.off('close', callback); 9088 client.off('close'); 9089}); 9090``` 9091 9092### on('error')<sup>10+</sup> 9093 9094on(type: 'error', callback: ErrorCallback): void 9095 9096订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 9097 9098**系统能力**:SystemCapability.Communication.NetStack 9099 9100**参数:** 9101 9102| 参数名 | 类型 | 必填 | 说明 | 9103| -------- | ------------- | ---- | ------------------------------------ | 9104| type | string | 是 | 订阅的事件类型。'error':error事件。 | 9105| callback | ErrorCallback | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9106 9107**错误码:** 9108 9109| 错误码ID | 错误信息 | 9110| -------- | ---------------- | 9111| 401 | Parameter error. | 9112 9113**示例:** 9114 9115```ts 9116import { socket } from '@kit.NetworkKit'; 9117import { BusinessError } from '@kit.BasicServicesKit'; 9118 9119let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9120let netAddress: socket.NetAddress = { 9121 address: '192.168.xx.xxx', 9122 port: 8080 9123} 9124let tlsSecureOptions: socket.TLSSecureOptions = { 9125 key: "xxxx", 9126 cert: "xxxx", 9127 ca: ["xxxx"], 9128 password: "xxxx", 9129 protocols: socket.Protocol.TLSv12, 9130 useRemoteCipherPrefer: true, 9131 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9132 cipherSuite: "AES256-SHA256" 9133} 9134let tlsConnectOptions: socket.TLSConnectOptions = { 9135 address: netAddress, 9136 secureOptions: tlsSecureOptions, 9137 ALPNProtocols: ["spdy/1", "http/1.1"] 9138} 9139tlsServer.listen(tlsConnectOptions).then(() => { 9140 console.log("listen callback success"); 9141}).catch((err: BusinessError) => { 9142 console.log("failed" + err); 9143}); 9144 9145tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9146 client.on('error', (err: BusinessError) => { 9147 console.log("on error, err:" + JSON.stringify(err)) 9148 }); 9149}); 9150``` 9151 9152### off('error')<sup>10+</sup> 9153 9154off(type: 'error', callback?: ErrorCallback): void 9155 9156取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 9157 9158**系统能力**:SystemCapability.Communication.NetStack 9159 9160**参数:** 9161 9162| 参数名 | 类型 | 必填 | 说明 | 9163| -------- | ------------- | ---- | ------------------------------------ | 9164| type | string | 是 | 订阅的事件类型。'error':error事件。 | 9165| callback | ErrorCallback | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9166 9167**错误码:** 9168 9169| 错误码ID | 错误信息 | 9170| -------- | ---------------- | 9171| 401 | Parameter error. | 9172 9173**示例:** 9174 9175```ts 9176import { socket } from '@kit.NetworkKit'; 9177import { BusinessError } from '@kit.BasicServicesKit'; 9178 9179let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9180let netAddress: socket.NetAddress = { 9181 address: '192.168.xx.xxx', 9182 port: 8080 9183} 9184let tlsSecureOptions: socket.TLSSecureOptions = { 9185 key: "xxxx", 9186 cert: "xxxx", 9187 ca: ["xxxx"], 9188 password: "xxxx", 9189 protocols: socket.Protocol.TLSv12, 9190 useRemoteCipherPrefer: true, 9191 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9192 cipherSuite: "AES256-SHA256" 9193} 9194let tlsConnectOptions: socket.TLSConnectOptions = { 9195 address: netAddress, 9196 secureOptions: tlsSecureOptions, 9197 ALPNProtocols: ["spdy/1", "http/1.1"] 9198} 9199tlsServer.listen(tlsConnectOptions).then(() => { 9200 console.log("listen callback success"); 9201}).catch((err: BusinessError) => { 9202 console.log("failed" + err); 9203}); 9204 9205let callback = (err: BusinessError) => { 9206 console.log("on error, err:" + JSON.stringify(err)); 9207} 9208tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9209 client.on('error', callback); 9210 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9211 client.off('error', callback); 9212 client.off('error'); 9213}); 9214``` 9215