1# @ohos.net.socket (Socket连接) 2 3本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。 4 5> **说明:** 6> 7> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 本模块API使用时建议放在worker线程或者taskpool中做网络操作,否则可能会导致UI线程卡顿。 9 10## 导入模块 11 12```ts 13import { socket } from '@kit.NetworkKit'; 14``` 15 16## socket.constructUDPSocketInstance 17 18constructUDPSocketInstance(): UDPSocket 19 20创建一个UDPSocket对象。 21 22**系统能力**:SystemCapability.Communication.NetStack 23 24**返回值:** 25 26| 类型 | 说明 | 27| --------------------------------- | ---------------------- | 28| [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 | 29 30**示例:** 31 32```ts 33import { socket } from '@kit.NetworkKit'; 34let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 35``` 36 37## UDPSocket 38 39UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。 40 41### bind 42 43bind(address: NetAddress, callback: AsyncCallback\<void\>): void 44 45绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。 46 47**需要权限**:ohos.permission.INTERNET 48 49**系统能力**:SystemCapability.Communication.NetStack 50 51**参数:** 52 53| 参数名 | 类型 | 必填 | 说明 | 54| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 55| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 56| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 57 58**错误码:** 59 60| 错误码ID | 错误信息 | 61| ------- | ----------------------- | 62| 401 | Parameter error. | 63| 201 | Permission denied. | 64 65**示例:** 66 67```ts 68import { socket } from '@kit.NetworkKit'; 69import { BusinessError } from '@kit.BasicServicesKit'; 70 71let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 72let bindAddr: socket.NetAddress = { 73 address: '192.168.xx.xxx', 74 port: 1234 75} 76udp.bind(bindAddr, (err: BusinessError) => { 77 if (err) { 78 console.log('bind fail'); 79 return; 80 } 81 console.log('bind success'); 82}); 83``` 84 85### bind 86 87bind(address: NetAddress): Promise\<void\> 88 89绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。 90 91**需要权限**:ohos.permission.INTERNET 92 93**系统能力**:SystemCapability.Communication.NetStack 94 95**参数:** 96 97| 参数名 | 类型 | 必填 | 说明 | 98| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 99| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 100 101**错误码:** 102 103| 错误码ID | 错误信息 | 104| ------- | ----------------------- | 105| 401 | Parameter error. | 106| 201 | Permission denied. | 107 108**返回值:** 109 110| 类型 | 说明 | 111| -------------- | ----------------------------------------- | 112| Promise\<void\> | 以Promise形式异步返回UDPSocket绑定的结果。 | 113 114**示例:** 115 116```ts 117import { socket } from '@kit.NetworkKit'; 118import { BusinessError } from '@kit.BasicServicesKit'; 119 120let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 121let bindAddr: socket.NetAddress = { 122 address: '192.168.xx.xxx', 123 port: 8080 124} 125udp.bind(bindAddr).then(() => { 126 console.log('bind success'); 127}).catch((err: BusinessError) => { 128 console.log('bind fail'); 129}); 130``` 131 132### send 133 134send(options: UDPSendOptions, callback: AsyncCallback\<void\>): void 135 136通过UDPSocket连接发送数据。使用callback方式作为异步方法。 137 138发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 139 140**需要权限**:ohos.permission.INTERNET 141 142**系统能力**:SystemCapability.Communication.NetStack 143 144**参数:** 145 146| 参数名 | 类型 | 必填 | 说明 | 147| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 148| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 149| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 150 151**错误码:** 152 153| 错误码ID | 错误信息 | 154| ------- | ----------------------- | 155| 401 | Parameter error. | 156| 201 | Permission denied. | 157| 2301206 | Socks5 failed to connect to the proxy server. | 158| 2301207 | Socks5 username or password is invalid. | 159| 2301208 | Socks5 failed to connect to the remote server. | 160| 2301209 | Socks5 failed to negotiate the authentication method. | 161| 2301210 | Socks5 failed to send the message. | 162| 2301211 | Socks5 failed to receive the message. | 163| 2301212 | Socks5 serialization error. | 164| 2301213 | Socks5 deserialization error. | 165 166**示例:** 167 168```ts 169import { socket } from '@kit.NetworkKit'; 170import { BusinessError } from '@kit.BasicServicesKit'; 171 172let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 173let bindAddr: socket.NetAddress = { 174 address: '192.168.xx.xxx', // 本端地址 175 port: 1234 176} 177udp.bind(bindAddr, (err: BusinessError) => { 178 if (err) { 179 console.log('bind fail'); 180 return; 181 } 182 console.log('bind success'); 183}); 184let netAddress: socket.NetAddress = { 185 address: '192.168.xx.xxx', // 对端地址 186 port: 8080 187} 188let sendOptions: socket.UDPSendOptions = { 189 data: 'Hello, server!', 190 address: netAddress 191} 192udp.send(sendOptions, (err: BusinessError) => { 193 if (err) { 194 console.log('send fail'); 195 return; 196 } 197 console.log('send success'); 198}); 199``` 200 201**示例(设置socket代理):** 202 203```ts 204import { socket } from '@kit.NetworkKit'; 205import { BusinessError } from '@kit.BasicServicesKit'; 206 207let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 208let bindAddr: socket.NetAddress = { 209 address: '192.168.xx.xxx', // 本端地址 210 port: 1234 211} 212udp.bind(bindAddr, (err: BusinessError) => { 213 if (err) { 214 console.log('bind fail'); 215 return; 216 } 217 console.log('bind success'); 218}); 219let netAddress: socket.NetAddress = { 220 address: '192.168.xx.xxx', // 对端地址 221 port: 8080 222} 223let socks5Server: socket.NetAddress = { 224 address: '192.168.xx.xxx', 225 port: 8080 226} 227let sendOptions: socket.UDPSendOptions = { 228 data: 'Hello, server!', 229 address: netAddress, 230 proxy: socket.ProxyOptions = { 231 type : 1, 232 address: socks5Server, 233 username: "xxx", 234 password: "xxx" 235 } 236} 237udp.send(sendOptions, (err: BusinessError) => { 238 if (err) { 239 console.log('send fail'); 240 return; 241 } 242 console.log('send success'); 243}); 244``` 245 246### send 247 248send(options: UDPSendOptions): Promise\<void\> 249 250通过UDPSocket连接发送数据。使用Promise方式作为异步方法。 251 252发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 253 254**需要权限**:ohos.permission.INTERNET 255 256**系统能力**:SystemCapability.Communication.NetStack 257 258**参数:** 259 260| 参数名 | 类型 | 必填 | 说明 | 261| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 262| options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | 263 264**错误码:** 265 266| 错误码ID | 错误信息 | 267| ------- | ----------------------- | 268| 401 | Parameter error. | 269| 201 | Permission denied. | 270| 2301206 | Socks5 failed to connect to the proxy server. | 271| 2301207 | Socks5 username or password is invalid. | 272| 2301208 | Socks5 failed to connect to the remote server. | 273| 2301209 | Socks5 failed to negotiate the authentication method. | 274| 2301210 | Socks5 failed to send the message. | 275| 2301211 | Socks5 failed to receive the message. | 276| 2301212 | Socks5 serialization error. | 277| 2301213 | Socks5 deserialization error. | 278 279**返回值:** 280 281| 类型 | 说明 | 282| -------------- | --------------------------------------------- | 283| Promise\<void\> | 以Promise形式返回UDPSocket连接发送数据的结果。 | 284 285**示例:** 286 287```ts 288import { socket } from '@kit.NetworkKit'; 289import { BusinessError } from '@kit.BasicServicesKit'; 290 291let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 292let bindAddr: socket.NetAddress = { 293 address: '192.168.xx.xxx', // 本端地址 294 port: 8080 295} 296udp.bind(bindAddr).then(() => { 297 console.log('bind success'); 298}).catch((err: BusinessError) => { 299 console.log('bind fail'); 300 return; 301}); 302let netAddress: socket.NetAddress = { 303 address: '192.168.xx.xxx', // 对端地址 304 port: 8080 305} 306let sendOptions: socket.UDPSendOptions = { 307 data: 'Hello, server!', 308 address: netAddress 309} 310udp.send(sendOptions).then(() => { 311 console.log('send success'); 312}).catch((err: BusinessError) => { 313 console.log('send fail'); 314}); 315``` 316 317**示例(设置socket代理):** 318 319```ts 320import { socket } from '@kit.NetworkKit'; 321import { BusinessError } from '@kit.BasicServicesKit'; 322 323let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 324let bindAddr: socket.NetAddress = { 325 address: '192.168.xx.xxx', // 本端地址 326 port: 8080 327} 328udp.bind(bindAddr).then(() => { 329 console.log('bind success'); 330}).catch((err: BusinessError) => { 331 console.log('bind fail'); 332 return; 333}); 334let netAddress: socket.NetAddress = { 335 address: '192.168.xx.xxx', // 对端地址 336 port: 8080 337} 338let socks5Server: socket.NetAddress = { 339 address: '192.168.xx.xxx', 340 port: 8080 341} 342let sendOptions: socket.UDPSendOptions = { 343 data: 'Hello, server!', 344 address: netAddress, 345 proxy: socket.ProxyOptions = { 346 type : 1, 347 address: socks5Server, 348 username: "xxx", 349 password: "xxx" 350 } 351} 352udp.send(sendOptions).then(() => { 353 console.log('send success'); 354}).catch((err: BusinessError) => { 355 console.log('send fail'); 356}); 357``` 358 359### close 360 361close(callback: AsyncCallback\<void\>): void 362 363关闭UDPSocket连接。使用callback方式作为异步方法。 364 365**需要权限**:ohos.permission.INTERNET 366 367**系统能力**:SystemCapability.Communication.NetStack 368 369**参数:** 370 371| 参数名 | 类型 | 必填 | 说明 | 372| -------- | --------------------- | ---- | ---------- | 373| callback | AsyncCallback\<void\> | 是 | 回调函数。关闭UDPSocket连接后触发回调函数。 | 374 375**错误码:** 376 377| 错误码ID | 错误信息 | 378| ------- | ----------------------- | 379| 201 | Permission denied. | 380 381**示例:** 382 383```ts 384import { socket } from '@kit.NetworkKit'; 385import { BusinessError } from '@kit.BasicServicesKit'; 386 387let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 388udp.close((err: BusinessError) => { 389 if (err) { 390 console.log('close fail'); 391 return; 392 } 393 console.log('close success'); 394}) 395``` 396 397### close 398 399close(): Promise\<void\> 400 401关闭UDPSocket连接。使用Promise方式作为异步方法。 402 403**需要权限**:ohos.permission.INTERNET 404 405**系统能力**:SystemCapability.Communication.NetStack 406 407**错误码:** 408 409| 错误码ID | 错误信息 | 410| ------- | ----------------------- | 411| 201 | Permission denied. | 412 413**返回值:** 414 415| 类型 | 说明 | 416| -------------- | ----------------------------------------- | 417| Promise\<void\> | 以Promise形式返回关闭UDPSocket连接的结果。 | 418 419**示例:** 420 421```ts 422import { socket } from '@kit.NetworkKit'; 423import { BusinessError } from '@kit.BasicServicesKit'; 424 425let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 426udp.close().then(() => { 427 console.log('close success'); 428}).catch((err: BusinessError) => { 429 console.log('close fail'); 430}); 431``` 432 433### getState 434 435getState(callback: AsyncCallback\<SocketStateBase\>): void 436 437获取UDPSocket状态。使用callback方式作为异步方法。 438 439> **说明:** 440> bind方法调用成功后,才可调用此方法。 441 442**需要权限**:ohos.permission.INTERNET 443 444**系统能力**:SystemCapability.Communication.NetStack 445 446**参数:** 447 448| 参数名 | 类型 | 必填 | 说明 | 449| -------- | ------------------------------------------------------ | ---- | ---------- | 450| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 | 451 452**错误码:** 453 454| 错误码ID | 错误信息 | 455| ------- | ----------------------- | 456| 201 | Permission denied. | 457 458**示例:** 459 460```ts 461import { socket } from '@kit.NetworkKit'; 462import { BusinessError } from '@kit.BasicServicesKit'; 463 464let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 465let bindAddr: socket.NetAddress = { 466 address: '192.168.xx.xxx', 467 port: 8080 468} 469udp.bind(bindAddr, (err: BusinessError) => { 470 if (err) { 471 console.log('bind fail'); 472 return; 473 } 474 console.log('bind success'); 475 udp.getState((err: BusinessError, data: socket.SocketStateBase) => { 476 if (err) { 477 console.log('getState fail'); 478 return; 479 } 480 console.log('getState success:' + JSON.stringify(data)); 481 }) 482}) 483``` 484 485### getState 486 487getState(): Promise\<SocketStateBase\> 488 489获取UDPSocket状态。使用Promise方式作为异步方法。 490 491> **说明:** 492> bind方法调用成功后,才可调用此方法。 493 494**需要权限**:ohos.permission.INTERNET 495 496**系统能力**:SystemCapability.Communication.NetStack 497 498**错误码:** 499 500| 错误码ID | 错误信息 | 501| ------- | ----------------------- | 502| 201 | Permission denied. | 503 504**返回值:** 505 506| 类型 | 说明 | 507| ----------------------------------------------- | ----------------------------------------- | 508| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 | 509 510**示例:** 511 512```ts 513import { socket } from '@kit.NetworkKit'; 514import { BusinessError } from '@kit.BasicServicesKit'; 515 516let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 517let bindAddr: socket.NetAddress = { 518 address: '192.168.xx.xxx', 519 port: 8080 520} 521udp.bind(bindAddr, (err: BusinessError) => { 522 if (err) { 523 console.log('bind fail'); 524 return; 525 } 526 console.log('bind success'); 527 udp.getState().then((data: socket.SocketStateBase) => { 528 console.log('getState success:' + JSON.stringify(data)); 529 }).catch((err: BusinessError) => { 530 console.log('getState fail' + JSON.stringify(err)); 531 }); 532}); 533``` 534 535### setExtraOptions 536 537setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\<void\>): void 538 539设置UDPSocket连接的其他属性。使用callback方式作为异步方法。 540 541> **说明:** 542> bind方法调用成功后,才可调用此方法。 543 544**需要权限**:ohos.permission.INTERNET 545 546**系统能力**:SystemCapability.Communication.NetStack 547 548**参数:** 549 550| 参数名 | 类型 | 必填 | 说明 | 551| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 552| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 553| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 554 555**错误码:** 556 557| 错误码ID | 错误信息 | 558| ------- | ----------------------- | 559| 401 | Parameter error. | 560| 201 | Permission denied. | 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, (err: BusinessError) => { 575 if (err) { 576 console.log('bind fail'); 577 return; 578 } 579 console.log('bind success'); 580 let udpextraoptions: socket.UDPExtraOptions = { 581 receiveBufferSize: 6000000, 582 sendBufferSize: 2000000, 583 reuseAddress: false, 584 socketTimeout: 6000, 585 broadcast: true 586 } 587 udp.setExtraOptions(udpextraoptions, (err: BusinessError) => { 588 if (err) { 589 console.log('setExtraOptions fail'); 590 return; 591 } 592 console.log('setExtraOptions success'); 593 }) 594}) 595``` 596 597### setExtraOptions 598 599setExtraOptions(options: UDPExtraOptions): Promise\<void\> 600 601设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。 602 603> **说明:** 604> bind方法调用成功后,才可调用此方法。 605 606**需要权限**:ohos.permission.INTERNET 607 608**系统能力**:SystemCapability.Communication.NetStack 609 610**参数:** 611 612| 参数名 | 类型 | 必填 | 说明 | 613| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 614| options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | 615 616**返回值:** 617 618| 类型 | 说明 | 619| -------------- | --------------------------------------------------- | 620| Promise\<void\> | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 | 621 622**错误码:** 623 624| 错误码ID | 错误信息 | 625| ------- | ----------------------- | 626| 401 | Parameter error. | 627| 201 | Permission denied. | 628 629**示例:** 630 631```ts 632import { socket } from '@kit.NetworkKit'; 633import { BusinessError } from '@kit.BasicServicesKit'; 634 635let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 636 637let bindAddr: socket.NetAddress = { 638 address: '192.168.xx.xxx', 639 port: 8080 640} 641udp.bind(bindAddr, (err: BusinessError) => { 642 if (err) { 643 console.log('bind fail'); 644 return; 645 } 646 console.log('bind success'); 647 let udpextraoptions: socket.UDPExtraOptions = { 648 receiveBufferSize: 6000000, 649 sendBufferSize: 2000000, 650 reuseAddress: false, 651 socketTimeout: 6000, 652 broadcast: true 653 } 654 udp.setExtraOptions(udpextraoptions).then(() => { 655 console.log('setExtraOptions success'); 656 }).catch((err: BusinessError) => { 657 console.log('setExtraOptions fail'); 658 }); 659}) 660``` 661 662### getLocalAddress<sup>12+</sup> 663 664getLocalAddress(): Promise\<NetAddress\> 665 666获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。 667 668> **说明:** 669> bind方法调用成功后,才可调用此方法。 670 671**系统能力**:SystemCapability.Communication.NetStack 672 673**返回值:** 674 675| 类型 | 说明 | 676| -------------- | --------------------------------------------------- | 677| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 678 679**错误码:** 680 681| 错误码ID | 错误信息 | 682| -------- | ------------------------------------------- | 683| 2300002 | System internal error. | 684| 2301009 | Bad file descriptor. | 685| 2303188 | Socket operation on non-socket. | 686 687**示例:** 688 689```ts 690import { socket } from '@kit.NetworkKit'; 691import { BusinessError } from '@kit.BasicServicesKit'; 692 693let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 694 695let bindAddr: socket.NetAddress = { 696 address: '192.168.xx.xxx', 697 port: 8080 698} 699udp.bind(bindAddr).then(() => { 700 console.info('bind success'); 701 udp.getLocalAddress().then((localAddress: socket.NetAddress) => { 702 console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress)); 703 }).catch((err: BusinessError) => { 704 console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err)); 705 }) 706}).catch((err: BusinessError) => { 707 console.error('bind fail'); 708}); 709``` 710 711### on('message') 712 713on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 714 715订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 716 717**系统能力**:SystemCapability.Communication.NetStack 718 719**参数:** 720 721| 参数名 | 类型 | 必填 | 说明 | 722| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 723| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 724| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。 | 725 726**示例:** 727 728```ts 729import { socket } from '@kit.NetworkKit'; 730import { BusinessError } from '@kit.BasicServicesKit'; 731 732let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 733 734let messageView = ''; 735udp.on('message', (value: socket.SocketMessageInfo) => { 736 for (let i: number = 0; i < value.message.byteLength; i++) { 737 let uint8Array = new Uint8Array(value.message) 738 let messages = uint8Array[i] 739 let message = String.fromCharCode(messages); 740 messageView += message; 741 } 742 console.log('on message message: ' + JSON.stringify(messageView)); 743 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 744}); 745``` 746 747### off('message') 748 749off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 750 751取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 752 753**系统能力**:SystemCapability.Communication.NetStack 754 755**参数:** 756 757| 参数名 | 类型 | 必填 | 说明 | 758| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 759| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 760| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。返回取消订阅某类事件后UDPSocket连接的状态信息。 | 761 762**示例:** 763 764```ts 765import { socket } from '@kit.NetworkKit'; 766import { BusinessError } from '@kit.BasicServicesKit'; 767 768let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 769let messageView = ''; 770let callback = (value: socket.SocketMessageInfo) => { 771 for (let i: number = 0; i < value.message.byteLength; i++) { 772 let uint8Array = new Uint8Array(value.message) 773 let messages = uint8Array[i] 774 let message = String.fromCharCode(messages); 775 messageView += message; 776 } 777 console.log('on message message: ' + JSON.stringify(messageView)); 778 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 779} 780udp.on('message', callback); 781// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 782udp.off('message', callback); 783udp.off('message'); 784``` 785 786### on('listening' | 'close') 787 788on(type: 'listening' | 'close', callback: Callback\<void\>): void 789 790订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 791 792**系统能力**:SystemCapability.Communication.NetStack 793 794**参数:** 795 796| 参数名 | 类型 | 必填 | 说明 | 797| -------- | ---------------- | ---- | ------------------------------------------------------------ | 798| type | string | 是 | 订阅的事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 799| callback | Callback\<void\> | 是 | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。 | 800 801**示例:** 802 803```ts 804import { socket } from '@kit.NetworkKit'; 805import { BusinessError } from '@kit.BasicServicesKit'; 806 807let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 808udp.on('listening', () => { 809 console.log("on listening success"); 810}); 811udp.on('close', () => { 812 console.log("on close success"); 813}); 814``` 815 816### off('listening' | 'close') 817 818off(type: 'listening' | 'close', callback?: Callback\<void\>): void 819 820取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 821 822**系统能力**:SystemCapability.Communication.NetStack 823 824**参数:** 825 826| 参数名 | 类型 | 必填 | 说明 | 827| -------- | ---------------- | ---- | ------------------------------------------------------------ | 828| type | string | 是 | 订阅事件类型。<br />- 'listening':数据包消息事件。<br />- 'close':关闭事件。 | 829| callback | Callback\<void\> | 否 | 回调函数。取消订阅UDPSocket连接的数据包消息事件或关闭事件后触发回调函数。 | 830 831**示例:** 832 833```ts 834import { socket } from '@kit.NetworkKit'; 835import { BusinessError } from '@kit.BasicServicesKit'; 836 837let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 838let callback1 = () => { 839 console.log("on listening, success"); 840} 841udp.on('listening', callback1); 842// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 843udp.off('listening', callback1); 844udp.off('listening'); 845let callback2 = () => { 846 console.log("on close, success"); 847} 848udp.on('close', callback2); 849// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 850udp.off('close', callback2); 851udp.off('close'); 852``` 853 854### on('error') 855 856on(type: 'error', callback: ErrorCallback): void 857 858订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 859 860**系统能力**:SystemCapability.Communication.NetStack 861 862**参数:** 863 864| 参数名 | 类型 | 必填 | 说明 | 865| -------- | ------------- | ---- | ------------------------------------ | 866| type | string | 是 | 订阅的事件类型。'error':error事件。 | 867| callback | ErrorCallback | 是 | 回调函数。UDPSocket连接发生error事件后触发回调函数。 | 868 869**示例:** 870 871```ts 872import { socket } from '@kit.NetworkKit'; 873import { BusinessError } from '@kit.BasicServicesKit'; 874 875let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 876udp.on('error', (err: BusinessError) => { 877 console.log("on error, err:" + JSON.stringify(err)) 878}); 879``` 880 881### off('error') 882 883off(type: 'error', callback?: ErrorCallback): void 884 885取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 886 887**系统能力**:SystemCapability.Communication.NetStack 888 889**参数:** 890 891| 参数名 | 类型 | 必填 | 说明 | 892| -------- | ------------- | ---- | ------------------------------------ | 893| type | string | 是 | 订阅的事件类型。'error':error事件。 | 894| callback | ErrorCallback | 否 | 回调函数。UDPSocket连接发生error事件后。 | 895 896**示例:** 897 898```ts 899import { socket } from '@kit.NetworkKit'; 900import { BusinessError } from '@kit.BasicServicesKit'; 901 902let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); 903let callback = (err: BusinessError) => { 904 console.log("on error, err:" + JSON.stringify(err)); 905} 906udp.on('error', callback); 907// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 908udp.off('error', callback); 909udp.off('error'); 910``` 911 912## NetAddress 913 914目标地址信息。 915 916**系统能力**:SystemCapability.Communication.NetStack 917 918| 名称 | 类型 | 必填 | 说明 | 919| ------- | ------ | ---- | ------------------------------------------------------------ | 920| address<sup>11+</sup> | string | 是 | 本地绑定的ip地址。 | 921| port | number | 否 | 端口号 ,范围0~65535。如果不指定系统随机分配端口。 | 922| family | number | 否 | 网络协议类型,可选类型:<br />- 1:IPv4。默认为1。<br />- 2:IPv6。地址为IPV6类型,该字段必须被显式指定为2。<br />- 3:Domain<sup>18+</sup>。地址为Domain类型,该字段必须被显式指定为3。| 923 924## ProxyOptions<sup>18+</sup> 925 926Socket代理信息。 927 928**系统能力**:SystemCapability.Communication.NetStack 929 930| 名称 | 类型 | 必填 | 说明 | 931| ------- | ------ | ---- | ------------------------------------------------------------ | 932| type | [ProxyTypes](#proxytypes18) | 是 | 代理类型。 | 933| address | [NetAddress](#netaddress) | 是 | 代理地址信息。 | 934| username | string | 否 | 指定用户名,如果使用用户密码验证方式。 | 935| password | string | 否 | 指定密码,如果使用用户密码验证方式。 | 936 937## ProxyTypes<sup>18+</sup> 938 939Socket代理类型。 940 941**系统能力**:SystemCapability.Communication.NetStack 942 943| 名称 | 值 | 说明 | 944| --------- | --------- |------------------ | 945| NONE | 0 | 不使用代理。 | 946| SOCKS5 | 1 | 使用Socks5代理。 | 947 948## UDPSendOptions 949 950UDPSocket发送参数。 951 952**系统能力**:SystemCapability.Communication.NetStack 953 954| 名称 | 类型 | 必填 | 说明 | 955| ------- | ---------------------------------- | ---- | -------------- | 956| data | string \| ArrayBuffer | 是 | 发送的数据。 | 957| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 958| proxy<sup>18+</sup> | [ProxyOptions](#proxyoptions18) | 否 | 使用的代理信息,默认不使用代理。 | 959 960## UDPExtraOptions 961 962UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 963 964**系统能力**:SystemCapability.Communication.NetStack 965 966| 名称 | 类型 | 必填 | 说明 | 967| ----------------- | ------- | ---- | -------------------------------- | 968| broadcast | boolean | 否 | 是否可以发送广播。默认为false。true:可发送广播;false:不可发送广播。 | 969 970## SocketMessageInfo<sup>11+</sup> 971 972socket连接信息 973 974**系统能力**:SystemCapability.Communication.NetStack 975 976| 名称 | 类型 | 必填 | 说明 | 977| ---------- | ------ | ---- | ------------------------------------- | 978| message | ArrayBuffer | 是 | 接收的事件消息。 | 979| remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是 | socket连接信息。 | 980 981## SocketStateBase 982 983Socket的状态信息。 984 985**系统能力**:SystemCapability.Communication.NetStack 986 987| 名称 | 类型 | 必填 | 说明 | 988| ----------- | ------- | ---- | ---------- | 989| isBound | boolean | 是 | 是否绑定。true:绑定;false:不绑定。 | 990| isClose | boolean | 是 | 是否关闭。true:关闭;false:打开。 | 991| isConnected | boolean | 是 | 是否连接。true:连接;false:断开。 | 992 993## SocketRemoteInfo 994 995Socket的连接信息。 996 997**系统能力**:SystemCapability.Communication.NetStack 998 999| 名称 | 类型 | 必填 | 说明 | 1000| ------- | ------ | ---- | ------------------------------------------------------------ | 1001| address | string | 是 | 本地绑定的ip地址。 | 1002| family | 'IPv4' \| 'IPv6' | 是 | 网络协议类型,可选类型:<br />- IPv4<br />- IPv6<br />默认为IPv4。 | 1003| port | number | 是 | 端口号,范围0~65535。 | 1004| size | number | 是 | 服务器响应信息的字节长度。 | 1005 1006## UDP 错误码说明 1007 1008UDP 其余错误码映射形式为:2301000 + Linux内核错误码。 1009 1010错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 1011 1012## socket.constructMulticastSocketInstance<sup>11+</sup> 1013 1014constructMulticastSocketInstance(): MulticastSocket 1015 1016创建一个MulticastSocket对象。 1017 1018**系统能力**:SystemCapability.Communication.NetStack 1019 1020**返回值:** 1021 1022| 类型 | 说明 | 1023| ----------------------------------- | ----------------------------- | 1024| [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 | 1025 1026**示例:** 1027 1028```ts 1029import { socket } from '@kit.NetworkKit'; 1030let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1031``` 1032## MulticastSocket<sup>11+</sup> 1033 1034MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。 1035 1036### addMembership<sup>11+</sup> 1037 1038addMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void 1039 1040加入多播组。使用callback方法作为异步方法。 1041 1042> **说明:** 1043> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1044> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 1045 1046**需要权限**:ohos.permission.INTERNET 1047 1048**系统能力**:SystemCapability.Communication.NetStack 1049 1050**参数:** 1051 1052| 参数名 | 类型 | 必填 | 说明 | 1053| ----------------- | ----------------------------- | ---- | ----------------------------------------- | 1054| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1055| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1056 1057**错误码:** 1058 1059| 错误码ID | 错误信息 | 1060| ------- | ----------------------- | 1061| 401 | Parameter error. | 1062| 201 | Permission denied. | 1063| 2301022 | Invalid argument. | 1064| 2301088 | Not a socket. | 1065| 2301098 | Address in use. | 1066 1067**示例:** 1068 1069```ts 1070import { socket } from '@kit.NetworkKit'; 1071 1072let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1073let addr: socket.NetAddress = { 1074 address: '239.255.0.1', 1075 port: 8080 1076} 1077multicast.addMembership(addr, (err: Object) => { 1078 if (err) { 1079 console.log('add membership fail, err: ' + JSON.stringify(err)); 1080 return; 1081 } 1082 console.log('add membership success'); 1083}) 1084``` 1085 1086### addMembership<sup>11+</sup> 1087 1088addMembership(multicastAddress: NetAddress): Promise\<void\> 1089 1090加入多播组。使用Promise方法作为异步方法。 1091 1092> **说明:** 1093> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1094> 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 1095 1096**需要权限**:ohos.permission.INTERNET 1097 1098**系统能力**:SystemCapability.Communication.NetStack 1099 1100**参数:** 1101 1102| 参数名 | 类型 | 必填 | 说明 | 1103| ----------------- | ----------------------------- | ---- | -------------------------------------------- | 1104| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1105 1106**返回值:** 1107 1108| 类型 | 说明 | 1109| -------------- | ----------------------------------------------- | 1110| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的行为结果。 | 1111 1112**错误码:** 1113 1114| 错误码ID | 错误信息 | 1115| ------- | ----------------------- | 1116| 401 | Parameter error. | 1117| 201 | Permission denied. | 1118| 2301088 | Not a socket. | 1119| 2301098 | Address in use. | 1120 1121**示例:** 1122 1123```ts 1124import { socket } from '@kit.NetworkKit'; 1125 1126let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1127let addr: socket.NetAddress = { 1128 address: '239.255.0.1', 1129 port: 8080 1130} 1131multicast.addMembership(addr).then(() => { 1132 console.log('addMembership success'); 1133}).catch((err: Object) => { 1134 console.log('addMembership fail'); 1135}); 1136``` 1137 1138### dropMembership<sup>11+</sup> 1139 1140dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\<void\>): void 1141 1142退出多播组。使用callback方法作为异步方法。 1143 1144> **说明:** 1145> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1146> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 1147 1148**需要权限**:ohos.permission.INTERNET 1149 1150**系统能力**:SystemCapability.Communication.NetStack 1151 1152**参数:** 1153 1154| 参数名 | 类型 | 必填 | 说明 | 1155| ----------------- | ----------------------------- | ---- | ------------------------------------------- | 1156| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1157| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。| 1158 1159**错误码:** 1160 1161| 错误码ID | 错误信息 | 1162| ------- | ----------------------- | 1163| 401 | Parameter error. | 1164| 201 | Permission denied. | 1165| 2301088 | Not a socket. | 1166| 2301098 | Address in use. | 1167 1168**示例:** 1169 1170```ts 1171import { socket } from '@kit.NetworkKit'; 1172 1173let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1174let addr: socket.NetAddress = { 1175 address: '239.255.0.1', 1176 port: 8080 1177} 1178multicast.dropMembership(addr, (err: Object) => { 1179 if (err) { 1180 console.log('drop membership fail, err: ' + JSON.stringify(err)); 1181 return; 1182 } 1183 console.log('drop membership success'); 1184}) 1185``` 1186 1187### dropMembership<sup>11+</sup> 1188 1189dropMembership(multicastAddress: NetAddress): Promise\<void\> 1190 1191退出多播组。使用Promise方法作为异步方法。 1192 1193> **说明:** 1194> 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 1195> 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 1196 1197**需要权限**:ohos.permission.INTERNET 1198 1199**系统能力**:SystemCapability.Communication.NetStack 1200 1201**参数:** 1202 1203| 参数名 | 类型 | 必填 | 说明 | 1204| ----------------- | ------------------------------------- | ---- | -------------------------------------------- | 1205| multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1206 1207**返回值:** 1208 1209| 类型 | 说明 | 1210| -------------- | ----------------------------------------------- | 1211| Promise\<void\> | 以Promise形式返回MulticastSocket加入多播组的执行结果。 | 1212 1213**错误码:** 1214 1215| 错误码ID | 错误信息 | 1216| ------- | ----------------------- | 1217| 401 | Parameter error. | 1218| 201 | Permission denied. | 1219| 2301088 | Not a socket. | 1220| 2301098 | Address in use. | 1221 1222**示例:** 1223 1224```ts 1225import { socket } from '@kit.NetworkKit'; 1226 1227let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1228let addr: socket.NetAddress = { 1229 address: '239.255.0.1', 1230 port: 8080 1231} 1232multicast.dropMembership(addr).then(() => { 1233 console.log('drop membership success'); 1234}).catch((err: Object) => { 1235 console.log('drop membership fail'); 1236}); 1237``` 1238 1239### setMulticastTTL<sup>11+</sup> 1240 1241setMulticastTTL(ttl: number, callback: AsyncCallback\<void\>): void 1242 1243设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。 1244 1245> **说明:** 1246> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1247> 范围为 0~255,默认值为 1 。 1248> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1249> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1250 1251**系统能力**:SystemCapability.Communication.NetStack 1252 1253**参数:** 1254 1255| 参数名 | 类型 | 必填 | 说明 | 1256| ------------- | --------------------- | ---- | ----------------------------- | 1257| ttl | number | 是 | ttl设置数值,类型为数字number。 | 1258| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1259 1260**错误码:** 1261 1262| 错误码ID | 错误信息 | 1263| ------- | ----------------------- | 1264| 401 | Parameter error. | 1265| 2301022 | Invalid argument. | 1266| 2301088 | Not a socket. | 1267 1268**示例:** 1269 1270```ts 1271import { socket } from '@kit.NetworkKit'; 1272 1273let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1274let ttl = 8 1275multicast.setMulticastTTL(ttl, (err: Object) => { 1276 if (err) { 1277 console.log('set ttl fail, err: ' + JSON.stringify(err)); 1278 return; 1279 } 1280 console.log('set ttl success'); 1281}) 1282``` 1283 1284### setMulticastTTL<sup>11+</sup> 1285 1286setMulticastTTL(ttl: number): Promise\<void\> 1287 1288设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。 1289 1290> **说明:** 1291> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1292> 范围为 0~255,默认值为 1 。 1293> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1294> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1295 1296**系统能力**:SystemCapability.Communication.NetStack 1297 1298**参数:** 1299 1300| 参数名 | 类型 | 必填 | 说明 | 1301| ------------- | ---------------------- | ---- | ------------------------------ | 1302| ttl | number | 是 | ttl设置数值,类型为数字Number。 | 1303 1304**返回值:** 1305 1306| 类型 | 说明 | 1307| -------------- | ---------------------------------------------- | 1308| Promise\<void\> | 以Promise形式返回MulticastSocket设置TTL数值的结果。 | 1309 1310**错误码:** 1311 1312| 错误码ID | 错误信息 | 1313| ------- | ----------------------- | 1314| 401 | Parameter error. | 1315| 2301022 | Invalid argument. | 1316| 2301088 | Not a socket. | 1317 1318**示例:** 1319 1320```ts 1321import { socket } from '@kit.NetworkKit'; 1322 1323let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1324multicast.setMulticastTTL(8).then(() => { 1325 console.log('set ttl success'); 1326}).catch((err: Object) => { 1327 console.log('set ttl failed'); 1328}); 1329``` 1330 1331### getMulticastTTL<sup>11+</sup> 1332 1333getMulticastTTL(callback: AsyncCallback\<number\>): void 1334 1335获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。 1336 1337> **说明:** 1338> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1339> 范围为 0~255,默认值为 1 。 1340> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1341> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1342 1343**系统能力**:SystemCapability.Communication.NetStack 1344 1345**参数:** 1346 1347| 参数名 | 类型 | 必填 | 说明 | 1348| ------------- | ----------------------- | ---- | --------------------------- | 1349| callback | AsyncCallback\<number\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1350 1351**错误码:** 1352 1353| 错误码ID | 错误信息 | 1354| ------- | ----------------------- | 1355| 401 | Parameter error. | 1356| 2301088 | Not a socket. | 1357 1358**示例:** 1359 1360```ts 1361import { socket } from '@kit.NetworkKit'; 1362 1363let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1364multicast.getMulticastTTL((err: Object, value: Number) => { 1365 if (err) { 1366 console.log('set ttl fail, err: ' + JSON.stringify(err)); 1367 return; 1368 } 1369 console.log('set ttl success, value: ' + JSON.stringify(value)); 1370}) 1371``` 1372 1373### getMulticastTTL<sup>11+</sup> 1374 1375getMulticastTTL(): Promise\<number\> 1376 1377获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。 1378 1379> **说明:** 1380> 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 1381> 范围为 0~255,默认值为 1 。 1382> 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 1383> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1384 1385**系统能力**:SystemCapability.Communication.NetStack 1386 1387**返回值:** 1388 1389| 类型 | 说明 | 1390| ---------------- | --------------------------- | 1391| Promise\<number\> | 以Promise形式返回当前TTL数值。 | 1392 1393**错误码:** 1394 1395| 错误码ID | 错误信息 | 1396| ------- | ----------------------- | 1397| 401 | Parameter error. | 1398| 2301088 | Not a socket. | 1399 1400**示例:** 1401 1402```ts 1403import { socket } from '@kit.NetworkKit'; 1404 1405let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1406multicast.getMulticastTTL().then((value: Number) => { 1407 console.log('ttl: ', JSON.stringify(value)); 1408}).catch((err: Object) => { 1409 console.log('set ttl failed'); 1410}); 1411``` 1412 1413### setLoopbackMode<sup>11+</sup> 1414 1415setLoopbackMode(flag: boolean, callback: AsyncCallback\<void\>): void 1416 1417设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1418 1419> **说明:** 1420> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1421> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1422> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1423 1424**系统能力**:SystemCapability.Communication.NetStack 1425 1426**参数:** 1427 1428| 参数名 | 类型 | 必填 | 说明 | 1429| ------------- | --------------------- | ---- | ---------------------------- | 1430| flag | boolean | 是 | ttl设置数值,类型为boolen 。 | 1431| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1432 1433**错误码:** 1434 1435| 错误码ID | 错误信息 | 1436| ------- | ----------------------- | 1437| 401 | Parameter error. | 1438| 2301088 | Not a socket. | 1439 1440**示例:** 1441 1442```ts 1443import { socket } from '@kit.NetworkKit'; 1444 1445let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1446multicast.setLoopbackMode(false, (err: Object) => { 1447 if (err) { 1448 console.log('set loopback mode fail, err: ' + JSON.stringify(err)); 1449 return; 1450 } 1451 console.log('set loopback mode success'); 1452}) 1453``` 1454 1455### setLoopbackMode<sup>11+</sup> 1456 1457setLoopbackMode(flag: boolean): Promise\<void\> 1458 1459设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 1460 1461> **说明:** 1462> 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 1463> 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 1464> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1465 1466**系统能力**:SystemCapability.Communication.NetStack 1467 1468**参数:** 1469 1470| 参数名 | 类型 | 必填 | 说明 | 1471| ------------- | ---------------------- | ---- | -------------------------------- | 1472| flag | boolean | 是 | 环回模式标志位,类型为数字boolean。| 1473 1474**返回值:** 1475 1476| 类型 | 说明 | 1477| -------------- | ---------------------------------------------- | 1478| Promise\<void\> | 以Promise形式返回MulticastSocket设置环回模式的结果。 | 1479 1480**错误码:** 1481 1482| 错误码ID | 错误信息 | 1483| ------- | ----------------------- | 1484| 401 | Parameter error. | 1485| 2301088 | Not a socket. | 1486 1487**示例:** 1488 1489```ts 1490import { socket } from '@kit.NetworkKit'; 1491 1492let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1493multicast.setLoopbackMode(false).then(() => { 1494 console.log('set loopback mode success'); 1495}).catch((err: Object) => { 1496 console.log('set loopback mode failed'); 1497}); 1498``` 1499 1500### getLoopbackMode<sup>11+</sup> 1501 1502getLoopbackMode(callback: AsyncCallback\<boolean\>): void 1503 1504获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1505 1506> **说明:** 1507> 用于获取当前环回模式开启或关闭的状态。 1508> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1509> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1510 1511**系统能力**:SystemCapability.Communication.NetStack 1512 1513**参数:** 1514 1515| 参数名 | 类型 | 必填 | 说明 | 1516| ------------- | ----------------------- | ---- | --------------------------- | 1517| callback | AsyncCallback\<number\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1518 1519**错误码:** 1520 1521| 错误码ID | 错误信息 | 1522| ------- | ----------------------- | 1523| 401 | Parameter error. | 1524| 2301088 | Not a socket. | 1525 1526**示例:** 1527 1528```ts 1529import { socket } from '@kit.NetworkKit'; 1530 1531let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1532multicast.getLoopbackMode((err: Object, value: Boolean) => { 1533 if (err) { 1534 console.log('get loopback mode fail, err: ' + JSON.stringify(err)); 1535 return; 1536 } 1537 console.log('get loopback mode success, value: ' + JSON.stringify(value)); 1538}) 1539``` 1540 1541### getLoopbackMode<sup>11+</sup> 1542 1543getLoopbackMode(): Promise\<boolean\> 1544 1545获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 1546 1547> **说明:** 1548> 用于获取当前环回模式开启或关闭的状态。 1549> 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 1550> 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 1551 1552**系统能力**:SystemCapability.Communication.NetStack 1553 1554**返回值:** 1555 1556| 类型 | 说明 | 1557| ---------------- | --------------------------- | 1558| Promise\<boolean\> | 以Promise形式返回当前TTL数值。 | 1559 1560**错误码:** 1561 1562| 错误码ID | 错误信息 | 1563| ------- | ----------------------- | 1564| 401 | Parameter error. | 1565| 2301088 | Not a socket. | 1566 1567**示例:** 1568 1569```ts 1570import { socket } from '@kit.NetworkKit'; 1571 1572let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); 1573multicast.getLoopbackMode().then((value: Boolean) => { 1574 console.log('loopback mode: ', JSON.stringify(value)); 1575}).catch((err: Object) => { 1576 console.log('get loopback mode failed'); 1577}); 1578``` 1579 1580## socket.constructTCPSocketInstance<sup>7+</sup> 1581 1582constructTCPSocketInstance(): TCPSocket 1583 1584创建一个TCPSocket对象。 1585 1586**系统能力**:SystemCapability.Communication.NetStack 1587 1588**返回值:** 1589 1590| 类型 | 说明 | 1591| --------------------------------- | ---------------------- | 1592| [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 | 1593 1594**示例:** 1595 1596```ts 1597import { socket } from '@kit.NetworkKit'; 1598let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1599``` 1600 1601## TCPSocket 1602 1603TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。 1604 1605### bind 1606 1607bind(address: NetAddress, callback: AsyncCallback\<void\>): void 1608 1609绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用callback方法作为异步方法。 1610 1611> **说明:** 1612> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1613> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1614> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1615 1616**需要权限**:ohos.permission.INTERNET 1617 1618**系统能力**:SystemCapability.Communication.NetStack 1619 1620**参数:** 1621 1622| 参数名 | 类型 | 必填 | 说明 | 1623| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1624| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1625| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误、错误信息。 | 1626 1627**错误码:** 1628 1629| 错误码ID | 错误信息 | 1630| ------- | ----------------------- | 1631| 401 | Parameter error. | 1632| 201 | Permission denied. | 1633 1634**示例:** 1635 1636```ts 1637import { socket } from '@kit.NetworkKit'; 1638import { BusinessError } from '@kit.BasicServicesKit'; 1639 1640let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1641let bindAddr: socket.NetAddress = { 1642 address: '192.168.xx.xxx', 1643 port: 8080 1644} 1645tcp.bind(bindAddr, (err: BusinessError) => { 1646 if (err) { 1647 console.log('bind fail'); 1648 return; 1649 } 1650 console.log('bind success'); 1651}) 1652``` 1653 1654### bind 1655 1656bind(address: NetAddress): Promise\<void\> 1657 1658绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用Promise方法作为异步方法。 1659 1660> **说明:** 1661> bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 1662> TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 1663> bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 1664 1665**需要权限**:ohos.permission.INTERNET 1666 1667**系统能力**:SystemCapability.Communication.NetStack 1668 1669**参数:** 1670 1671| 参数名 | 类型 | 必填 | 说明 | 1672| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 1673| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 1674 1675**返回值:** 1676 1677| 类型 | 说明 | 1678| --------------- | ------------------------------------------------------- | 1679| Promise\<void\> | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 | 1680 1681**错误码:** 1682 1683| 错误码ID | 错误信息 | 1684| ------- | ----------------------- | 1685| 401 | Parameter error. | 1686| 201 | Permission denied. | 1687 1688**示例:** 1689 1690```ts 1691import { socket } from '@kit.NetworkKit'; 1692import { BusinessError } from '@kit.BasicServicesKit'; 1693 1694let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1695let bindAddr: socket.NetAddress = { 1696 address: '192.168.xx.xxx', 1697 port: 8080 1698} 1699tcp.bind(bindAddr).then(() => { 1700 console.log('bind success'); 1701}).catch((err: BusinessError) => { 1702 console.log('bind fail'); 1703}); 1704``` 1705 1706### connect 1707 1708connect(options: TCPConnectOptions, callback: AsyncCallback\<void\>): void 1709 1710连接到指定的IP地址和端口。使用callback方法作为异步方法。 1711 1712> **说明:** 1713> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接 1714 1715**需要权限**:ohos.permission.INTERNET 1716 1717**系统能力**:SystemCapability.Communication.NetStack 1718 1719**参数:** 1720 1721| 参数名 | 类型 | 必填 | 说明 | 1722| -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1723| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1724| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1725 1726**错误码:** 1727 1728| 错误码ID | 错误信息 | 1729| ------- | ----------------------- | 1730| 401 | Parameter error. | 1731| 201 | Permission denied. | 1732| 2301206 | Socks5 failed to connect to the proxy server. | 1733| 2301207 | Socks5 username or password is invalid. | 1734| 2301208 | Socks5 failed to connect to the remote server. | 1735| 2301209 | Socks5 failed to negotiate the authentication method. | 1736| 2301210 | Socks5 failed to send the message. | 1737| 2301211 | Socks5 failed to receive the message. | 1738| 2301212 | Socks5 serialization error. | 1739| 2301213 | Socks5 deserialization error. | 1740 1741**示例:** 1742 1743```ts 1744import { socket } from '@kit.NetworkKit'; 1745import { BusinessError } from '@kit.BasicServicesKit'; 1746 1747let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1748let netAddress: socket.NetAddress = { 1749 address: '192.168.xx.xxx', 1750 port: 8080 1751} 1752let tcpconnectoptions: socket.TCPConnectOptions = { 1753 address: netAddress, 1754 timeout: 6000 1755} 1756tcp.connect(tcpconnectoptions, (err: BusinessError) => { 1757 if (err) { 1758 console.log('connect fail'); 1759 return; 1760 } 1761 console.log('connect success'); 1762}) 1763``` 1764 1765**示例(设置socket代理):** 1766 1767```ts 1768import { socket } from '@kit.NetworkKit'; 1769import { BusinessError } from '@kit.BasicServicesKit'; 1770 1771let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1772let netAddress: socket.NetAddress = { 1773 address: '192.168.xx.xxx', 1774 port: 8080 1775} 1776let socks5Server: socket.NetAddress = { 1777 address: '192.168.xx.xxx', 1778 port: 8080 1779} 1780let tcpconnectoptions: socket.TCPConnectOptions = { 1781 address: netAddress, 1782 timeout: 6000, 1783 proxy: socket.ProxyOptions = { 1784 type : 1, 1785 address: socks5Server, 1786 username: "xxx", 1787 password: "xxx" 1788 } 1789} 1790tcp.connect(tcpconnectoptions, (err: BusinessError) => { 1791 if (err) { 1792 console.log('connect fail'); 1793 return; 1794 } 1795 console.log('connect success'); 1796}) 1797``` 1798 1799### connect 1800 1801connect(options: TCPConnectOptions): Promise\<void\> 1802 1803连接到指定的IP地址和端口。使用promise方法作为异步方法。 1804 1805> **说明:** 1806> 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。 1807 1808**需要权限**:ohos.permission.INTERNET 1809 1810**系统能力**:SystemCapability.Communication.NetStack 1811 1812**参数:** 1813 1814| 参数名 | 类型 | 必填 | 说明 | 1815| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 1816| options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | 1817 1818**返回值:** 1819 1820| 类型 | 说明 | 1821| -------------- | --------------------------------------------------------- | 1822| Promise\<void\> | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 | 1823 1824**错误码:** 1825 1826| 错误码ID | 错误信息 | 1827| ------- | ----------------------- | 1828| 401 | Parameter error. | 1829| 201 | Permission denied. | 1830| 2301206 | Socks5 failed to connect to the proxy server. | 1831| 2301207 | Socks5 username or password is invalid. | 1832| 2301208 | Socks5 failed to connect to the remote server. | 1833| 2301209 | Socks5 failed to negotiate the authentication method. | 1834| 2301210 | Socks5 failed to send the message. | 1835| 2301211 | Socks5 failed to receive the message. | 1836| 2301212 | Socks5 serialization error. | 1837| 2301213 | Socks5 deserialization error. | 1838 1839**示例:** 1840 1841```ts 1842import { socket } from '@kit.NetworkKit'; 1843import { BusinessError } from '@kit.BasicServicesKit'; 1844 1845let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1846let netAddress: socket.NetAddress = { 1847 address: '192.168.xx.xxx', 1848 port: 8080 1849} 1850let tcpconnectoptions: socket.TCPConnectOptions = { 1851 address: netAddress, 1852 timeout: 6000 1853} 1854tcp.connect(tcpconnectoptions).then(() => { 1855 console.log('connect success') 1856}).catch((err: BusinessError) => { 1857 console.log('connect fail'); 1858}); 1859``` 1860 1861**示例(设置socket代理):** 1862 1863```ts 1864import { socket } from '@kit.NetworkKit'; 1865import { BusinessError } from '@kit.BasicServicesKit'; 1866 1867let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1868let netAddress: socket.NetAddress = { 1869 address: '192.168.xx.xxx', 1870 port: 8080 1871} 1872let socks5Server: socket.NetAddress = { 1873 address: '192.168.xx.xxx', 1874 port: 8080 1875} 1876let tcpconnectoptions: socket.TCPConnectOptions = { 1877 address: netAddress, 1878 timeout: 6000, 1879 proxy: socket.ProxyOptions = { 1880 type : 1, 1881 address: socks5Server, 1882 username: "xxx", 1883 password: "xxx" 1884 } 1885} 1886tcp.connect(tcpconnectoptions).then(() => { 1887 console.log('connect success') 1888}).catch((err: BusinessError) => { 1889 console.log('connect fail'); 1890}); 1891``` 1892 1893### send 1894 1895send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 1896 1897通过TCPSocket连接发送数据。使用callback方式作为异步方法。 1898 1899> **说明:** 1900> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 1901 1902**需要权限**:ohos.permission.INTERNET 1903 1904**系统能力**:SystemCapability.Communication.NetStack 1905 1906**参数:** 1907 1908| 参数名 | 类型 | 必填 | 说明 | 1909| -------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 1910| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 1911| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 1912 1913**错误码:** 1914 1915| 错误码ID | 错误信息 | 1916| ------- | ----------------------- | 1917| 401 | Parameter error. | 1918| 201 | Permission denied. | 1919 1920**示例:** 1921 1922```ts 1923import { socket } from '@kit.NetworkKit'; 1924import { BusinessError } from '@kit.BasicServicesKit'; 1925 1926let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1927let netAddress: socket.NetAddress = { 1928 address: '192.168.xx.xxx', 1929 port: 8080 1930} 1931let tcpconnectoptions: socket.TCPConnectOptions = { 1932 address: netAddress, 1933 timeout: 6000 1934} 1935tcp.connect(tcpconnectoptions, () => { 1936 console.log('connect success'); 1937 let tcpSendOptions: socket.TCPSendOptions = { 1938 data: 'Hello, server!' 1939 } 1940 tcp.send(tcpSendOptions, (err: BusinessError) => { 1941 if (err) { 1942 console.log('send fail'); 1943 return; 1944 } 1945 console.log('send success'); 1946 }) 1947}) 1948``` 1949 1950### send 1951 1952send(options: TCPSendOptions): Promise\<void\> 1953 1954通过TCPSocket连接发送数据。使用Promise方式作为异步方法。 1955 1956> **说明:** 1957> connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 1958 1959**需要权限**:ohos.permission.INTERNET 1960 1961**系统能力**:SystemCapability.Communication.NetStack 1962 1963**参数:** 1964 1965| 参数名 | 类型 | 必填 | 说明 | 1966| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 1967| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | 1968 1969**返回值:** 1970 1971| 类型 | 说明 | 1972| -------------- | ------------------------------------------------- | 1973| Promise\<void\> | 以Promise形式返回通过TCPSocket连接发送数据的结果。 | 1974 1975**错误码:** 1976 1977| 错误码ID | 错误信息 | 1978| ------- | ----------------------- | 1979| 401 | Parameter error. | 1980| 201 | Permission denied. | 1981 1982**示例:** 1983 1984```ts 1985import { socket } from '@kit.NetworkKit'; 1986import { BusinessError } from '@kit.BasicServicesKit'; 1987 1988let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 1989let netAddress: socket.NetAddress = { 1990 address: '192.168.xx.xxx', 1991 port: 8080 1992} 1993let tcpconnectoptions: socket.TCPConnectOptions = { 1994 address: netAddress, 1995 timeout: 6000 1996} 1997tcp.connect(tcpconnectoptions, () => { 1998 console.log('connect success'); 1999 let tcpSendOptions: socket.TCPSendOptions = { 2000 data: 'Hello, server!' 2001 } 2002 tcp.send(tcpSendOptions).then(() => { 2003 console.log('send success'); 2004 }).catch((err: BusinessError) => { 2005 console.log('send fail'); 2006 }); 2007}) 2008``` 2009 2010### close 2011 2012close(callback: AsyncCallback\<void\>): void 2013 2014关闭TCPSocket连接。使用callback方式作为异步方法。 2015 2016**需要权限**:ohos.permission.INTERNET 2017 2018**系统能力**:SystemCapability.Communication.NetStack 2019 2020**参数:** 2021 2022| 参数名 | 类型 | 必填 | 说明 | 2023| -------- | --------------------- | ---- | ---------- | 2024| callback | AsyncCallback\<void\> | 是 | 回调函数。失败返回错误码、错误信息。 | 2025 2026**错误码:** 2027 2028| 错误码ID | 错误信息 | 2029| ------- | ----------------------- | 2030| 201 | Permission denied. | 2031 2032**示例:** 2033 2034```ts 2035import { socket } from '@kit.NetworkKit'; 2036import { BusinessError } from '@kit.BasicServicesKit'; 2037 2038let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2039 2040tcp.close((err: BusinessError) => { 2041 if (err) { 2042 console.log('close fail'); 2043 return; 2044 } 2045 console.log('close success'); 2046}) 2047``` 2048 2049### close 2050 2051close(): Promise\<void\> 2052 2053关闭TCPSocket连接。使用Promise方式作为异步方法。 2054 2055**需要权限**:ohos.permission.INTERNET 2056 2057**系统能力**:SystemCapability.Communication.NetStack 2058 2059**返回值:** 2060 2061| 类型 | 说明 | 2062| -------------- | ----------------------------------------- | 2063| Promise\<void\> | 以Promise形式返回关闭TCPSocket连接的结果。 | 2064 2065**错误码:** 2066 2067| 错误码ID | 错误信息 | 2068| ------- | ----------------------- | 2069| 201 | Permission denied. | 2070 2071**示例:** 2072 2073```ts 2074import { socket } from '@kit.NetworkKit'; 2075 2076let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2077 2078tcp.close().then(() => { 2079 console.log('close success'); 2080}).catch((err: BusinessError) => { 2081 console.log('close fail'); 2082}); 2083``` 2084 2085### getRemoteAddress 2086 2087getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 2088 2089获取对端Socket地址。使用callback方式作为异步方法。 2090 2091> **说明:** 2092> connect方法调用成功后,才可调用此方法。 2093 2094**需要权限**:ohos.permission.INTERNET 2095 2096**系统能力**:SystemCapability.Communication.NetStack 2097 2098**参数:** 2099 2100| 参数名 | 类型 | 必填 | 说明 | 2101| -------- | ------------------------------------------------- | ---- | ---------- | 2102| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 | 2103 2104**错误码:** 2105 2106| 错误码ID | 错误信息 | 2107| ------- | ----------------------- | 2108| 201 | Permission denied. | 2109 2110**示例:** 2111 2112```ts 2113import { socket } from '@kit.NetworkKit'; 2114import { BusinessError } from '@kit.BasicServicesKit'; 2115 2116let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2117let netAddress: socket.NetAddress = { 2118 address: '192.168.xx.xxx', 2119 port: 8080 2120} 2121let tcpconnectoptions: socket.TCPConnectOptions = { 2122 address: netAddress, 2123 timeout: 6000 2124} 2125tcp.connect(tcpconnectoptions, () => { 2126 console.log('connect success'); 2127 tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 2128 if (err) { 2129 console.log('getRemoteAddressfail'); 2130 return; 2131 } 2132 console.log('getRemoteAddresssuccess:' + JSON.stringify(data)); 2133 }) 2134}); 2135``` 2136 2137### getRemoteAddress 2138 2139getRemoteAddress(): Promise\<NetAddress\> 2140 2141获取对端Socket地址。使用Promise方式作为异步方法。 2142 2143> **说明:** 2144> connect方法调用成功后,才可调用此方法。 2145 2146**需要权限**:ohos.permission.INTERNET 2147 2148**系统能力**:SystemCapability.Communication.NetStack 2149 2150**返回值:** 2151 2152| 类型 | 说明 | 2153| ------------------------------------------ | ------------------------------------------ | 2154| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 2155 2156**错误码:** 2157 2158| 错误码ID | 错误信息 | 2159| ------- | ----------------------- | 2160| 201 | Permission denied. | 2161 2162**示例:** 2163 2164```ts 2165import { socket } from '@kit.NetworkKit'; 2166import { BusinessError } from '@kit.BasicServicesKit'; 2167 2168let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2169let netAddress: socket.NetAddress = { 2170 address: '192.168.xx.xxx', 2171 port: 8080 2172} 2173let tcpconnectoptions: socket.TCPConnectOptions = { 2174 address: netAddress, 2175 timeout: 6000 2176} 2177tcp.connect(tcpconnectoptions).then(() => { 2178 console.log('connect success'); 2179 tcp.getRemoteAddress().then(() => { 2180 console.log('getRemoteAddress success'); 2181 }).catch((err: BusinessError) => { 2182 console.log('getRemoteAddressfail'); 2183 }); 2184}).catch((err: BusinessError) => { 2185 console.log('connect fail'); 2186}); 2187``` 2188 2189### getState 2190 2191getState(callback: AsyncCallback\<SocketStateBase\>): void 2192 2193获取TCPSocket状态。使用callback方式作为异步方法。 2194 2195> **说明:** 2196> bind或connect方法调用成功后,才可调用此方法。 2197 2198**需要权限**:ohos.permission.INTERNET 2199 2200**系统能力**:SystemCapability.Communication.NetStack 2201 2202**参数:** 2203 2204| 参数名 | 类型 | 必填 | 说明 | 2205| -------- | ------------------------------------------------------ | ---- | ---------- | 2206| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 | 2207 2208**错误码:** 2209 2210| 错误码ID | 错误信息 | 2211| ------- | ----------------------- | 2212| 201 | Permission denied. | 2213 2214**示例:** 2215 2216```ts 2217import { socket } from '@kit.NetworkKit'; 2218import { BusinessError } from '@kit.BasicServicesKit'; 2219 2220let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2221let netAddress: socket.NetAddress = { 2222 address: '192.168.xx.xxx', 2223 port: 8080 2224} 2225let tcpconnectoptions: socket.TCPConnectOptions = { 2226 address: netAddress, 2227 timeout: 6000 2228} 2229tcp.connect(tcpconnectoptions, () => { 2230 console.log('connect success'); 2231 tcp.getState((err: BusinessError, data: socket.SocketStateBase) => { 2232 if (err) { 2233 console.log('getState fail'); 2234 return; 2235 } 2236 console.log('getState success:' + JSON.stringify(data)); 2237 }); 2238}); 2239``` 2240 2241### getState 2242 2243getState(): Promise\<SocketStateBase\> 2244 2245获取TCPSocket状态。使用Promise方式作为异步方法。 2246 2247> **说明:** 2248> bind或connect方法调用成功后,才可调用此方法。 2249 2250**需要权限**:ohos.permission.INTERNET 2251 2252**系统能力**:SystemCapability.Communication.NetStack 2253 2254**返回值:** 2255 2256| 类型 | 说明 | 2257| ----------------------------------------------- | ----------------------------------------- | 2258| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 2259 2260**错误码:** 2261 2262| 错误码ID | 错误信息 | 2263| ------- | ----------------------- | 2264| 201 | Permission denied. | 2265 2266**示例:** 2267 2268```ts 2269import { socket } from '@kit.NetworkKit'; 2270import { BusinessError } from '@kit.BasicServicesKit'; 2271 2272let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2273let netAddress: socket.NetAddress = { 2274 address: '192.168.xx.xxx', 2275 port: 8080 2276} 2277let tcpconnectoptions: socket.TCPConnectOptions = { 2278 address: netAddress, 2279 timeout: 6000 2280} 2281tcp.connect(tcpconnectoptions).then(() => { 2282 console.log('connect success'); 2283 tcp.getState().then(() => { 2284 console.log('getState success'); 2285 }).catch((err: BusinessError) => { 2286 console.log('getState fail'); 2287 }); 2288}).catch((err: BusinessError) => { 2289 console.log('connect fail'); 2290}); 2291``` 2292 2293### getSocketFd<sup>10+</sup> 2294 2295getSocketFd(callback: AsyncCallback\<number\>): void 2296 2297获取TCPSocket的文件描述符。使用callback方式作为异步方法。 2298 2299> **说明:** 2300> bind或connect方法调用成功后,才可调用此方法。 2301 2302**系统能力**:SystemCapability.Communication.NetStack 2303 2304**参数:** 2305 2306| 参数名 | 类型 | 必填 | 说明 | 2307| -------- | ------------------------------------------------------ | ---- | ---------- | 2308| callback | AsyncCallback\<number\> | 是 | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 | 2309 2310**示例:** 2311 2312```ts 2313import { socket } from '@kit.NetworkKit'; 2314import { BusinessError } from '@kit.BasicServicesKit'; 2315 2316let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2317let bindAddr: socket.NetAddress = { 2318 address: '0.0.0.0' 2319} 2320tcp.bind(bindAddr) 2321let netAddress: socket.NetAddress = { 2322 address: '192.168.xx.xxx', 2323 port: 8080 2324} 2325let tcpconnectoptions: socket.TCPConnectOptions = { 2326 address: netAddress, 2327 timeout: 6000 2328} 2329tcp.connect(tcpconnectoptions) 2330tcp.getSocketFd((err: BusinessError, data: number) => { 2331 console.info("getSocketFd failed: " + err); 2332 console.info("tunenlfd: " + data); 2333}) 2334``` 2335### getSocketFd<sup>10+</sup> 2336 2337getSocketFd(): Promise\<number\> 2338 2339获取TCPSocket的文件描述符。使用Promise方式作为异步方法。 2340 2341> **说明:** 2342> bind或connect方法调用成功后,才可调用此方法。 2343 2344**系统能力**:SystemCapability.Communication.NetStack 2345 2346**返回值:** 2347 2348| 类型 | 说明 | 2349| ----------------------------------------------- | ----------------------------------------- | 2350| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 2351 2352**示例:** 2353 2354```ts 2355import { socket } from '@kit.NetworkKit'; 2356import { BusinessError } from '@kit.BasicServicesKit'; 2357 2358let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2359let bindAddr: socket.NetAddress = { 2360 address: '0.0.0.0' 2361} 2362tcp.bind(bindAddr) 2363let netAddress: socket.NetAddress = { 2364 address: '192.168.xx.xxx', 2365 port: 8080 2366} 2367let tcpconnectoptions: socket.TCPConnectOptions = { 2368 address: netAddress, 2369 timeout: 6000 2370} 2371tcp.connect(tcpconnectoptions) 2372tcp.getSocketFd().then((data: number) => { 2373 console.info("tunenlfd: " + data); 2374}) 2375``` 2376 2377### setExtraOptions 2378 2379setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 2380 2381设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 2382 2383> **说明:** 2384> bind或connect方法调用成功后,才可调用此方法。 2385 2386**需要权限**:ohos.permission.INTERNET 2387 2388**系统能力**:SystemCapability.Communication.NetStack 2389 2390**参数:** 2391 2392| 参数名 | 类型 | 必填 | 说明 | 2393| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2394| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2395| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2396 2397**错误码:** 2398 2399| 错误码ID | 错误信息 | 2400| ------- | ----------------------- | 2401| 401 | Parameter error. | 2402| 201 | Permission denied. | 2403 2404**示例:** 2405 2406```ts 2407import { socket } from '@kit.NetworkKit'; 2408import { BusinessError } from '@kit.BasicServicesKit'; 2409 2410let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2411let netAddress: socket.NetAddress = { 2412 address: '192.168.xx.xxx', 2413 port: 8080 2414} 2415let tcpconnectoptions: socket.TCPConnectOptions = { 2416 address: netAddress, 2417 timeout: 6000 2418} 2419 2420interface SocketLinger { 2421 on: boolean; 2422 linger: number; 2423} 2424 2425tcp.connect(tcpconnectoptions, () => { 2426 console.log('connect success'); 2427 let tcpExtraOptions: socket.TCPExtraOptions = { 2428 keepAlive: true, 2429 OOBInline: true, 2430 TCPNoDelay: true, 2431 socketLinger: { on: true, linger: 10 } as SocketLinger, 2432 receiveBufferSize: 1000, 2433 sendBufferSize: 1000, 2434 reuseAddress: true, 2435 socketTimeout: 3000 2436 } 2437 tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 2438 if (err) { 2439 console.log('setExtraOptions fail'); 2440 return; 2441 } 2442 console.log('setExtraOptions success'); 2443 }); 2444}); 2445``` 2446 2447### setExtraOptions 2448 2449setExtraOptions(options: TCPExtraOptions): Promise\<void\> 2450 2451设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 2452 2453> **说明:** 2454> bind或connect方法调用成功后,才可调用此方法。 2455 2456**需要权限**:ohos.permission.INTERNET 2457 2458**系统能力**:SystemCapability.Communication.NetStack 2459 2460**参数:** 2461 2462| 参数名 | 类型 | 必填 | 说明 | 2463| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 2464| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 2465 2466**返回值:** 2467 2468| 类型 | 说明 | 2469| -------------- | --------------------------------------------------- | 2470| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 | 2471 2472**错误码:** 2473 2474| 错误码ID | 错误信息 | 2475| ------- | ----------------------- | 2476| 401 | Parameter error. | 2477| 201 | Permission denied. | 2478 2479**示例:** 2480 2481```ts 2482import { socket } from '@kit.NetworkKit'; 2483import { BusinessError } from '@kit.BasicServicesKit'; 2484 2485let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2486let netAddress: socket.NetAddress = { 2487 address: '192.168.xx.xxx', 2488 port: 8080 2489} 2490let tcpconnectoptions: socket.TCPConnectOptions = { 2491 address: netAddress, 2492 timeout: 6000 2493} 2494 2495interface SocketLinger { 2496 on: boolean; 2497 linger: number; 2498} 2499 2500tcp.connect(tcpconnectoptions, () => { 2501 console.log('connect success'); 2502 let tcpExtraOptions: socket.TCPExtraOptions = { 2503 keepAlive: true, 2504 OOBInline: true, 2505 TCPNoDelay: true, 2506 socketLinger: { on: true, linger: 10 } as SocketLinger, 2507 receiveBufferSize: 1000, 2508 sendBufferSize: 1000, 2509 reuseAddress: true, 2510 socketTimeout: 3000 2511 } 2512 tcp.setExtraOptions(tcpExtraOptions).then(() => { 2513 console.log('setExtraOptions success'); 2514 }).catch((err: BusinessError) => { 2515 console.log('setExtraOptions fail'); 2516 }); 2517}); 2518``` 2519 2520### getLocalAddress<sup>12+</sup> 2521 2522getLocalAddress(): Promise\<NetAddress\> 2523 2524获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。 2525 2526> **说明:** 2527> bind方法调用成功后,才可调用此方法。 2528 2529**系统能力**:SystemCapability.Communication.NetStack 2530 2531**返回值:** 2532 2533| 类型 | 说明 | 2534| -------------- | --------------------------------------------------- | 2535| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 2536 2537**错误码:** 2538 2539| 错误码ID | 错误信息 | 2540| -------- | ------------------------------------------- | 2541| 2300002 | System internal error. | 2542| 2301009 | Bad file descriptor. | 2543| 2303188 | Socket operation on non-socket. | 2544 2545**示例:** 2546 2547```ts 2548import { socket } from '@kit.NetworkKit'; 2549import { BusinessError } from '@kit.BasicServicesKit'; 2550 2551let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2552let bindAddr: socket.NetAddress = { 2553 address: '192.168.xx.xxx', 2554 family: 1, 2555 port: 8080 2556} 2557tcp.bind(bindAddr).then(() => { 2558 tcp.getLocalAddress().then((localAddress: socket.NetAddress) => { 2559 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 2560 }).catch((err: BusinessError) => { 2561 console.error("FAILED! Error:" + JSON.stringify(err)); 2562 }) 2563}).catch((err: BusinessError) => { 2564 console.error('bind fail'); 2565}); 2566``` 2567 2568### on('message') 2569 2570on(type: 'message', callback: Callback<SocketMessageInfo\>): void 2571 2572订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2573 2574**系统能力**:SystemCapability.Communication.NetStack 2575 2576**参数:** 2577 2578| 参数名 | 类型 | 必填 | 说明 | 2579| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2580| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 2581| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回TCPSocket连接信息。 | 2582 2583**示例:** 2584 2585```ts 2586import { socket } from '@kit.NetworkKit'; 2587import { BusinessError } from '@kit.BasicServicesKit'; 2588 2589let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2590let messageView = ''; 2591tcp.on('message', (value: socket.SocketMessageInfo) => { 2592 for (let i: number = 0; i < value.message.byteLength; i++) { 2593 let uint8Array = new Uint8Array(value.message) 2594 let messages = uint8Array[i] 2595 let message = String.fromCharCode(messages); 2596 messageView += message; 2597 } 2598 console.log('on message message: ' + JSON.stringify(messageView)); 2599 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2600}); 2601``` 2602 2603### off('message') 2604 2605off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 2606 2607取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 2608 2609**系统能力**:SystemCapability.Communication.NetStack 2610 2611**参数:** 2612 2613| 参数名 | 类型 | 必填 | 说明 | 2614| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 2615| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 2616| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。取消订阅TCPSocket连接的接收消息事件时触发回调函数。 | 2617 2618**示例:** 2619 2620```ts 2621import { socket } from '@kit.NetworkKit'; 2622import { BusinessError } from '@kit.BasicServicesKit'; 2623 2624let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2625let messageView = ''; 2626let callback = (value: socket.SocketMessageInfo) => { 2627 for (let i: number = 0; i < value.message.byteLength; i++) { 2628 let uint8Array = new Uint8Array(value.message) 2629 let messages = uint8Array[i] 2630 let message = String.fromCharCode(messages); 2631 messageView += message; 2632 } 2633 console.log('on message message: ' + JSON.stringify(messageView)); 2634 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 2635} 2636tcp.on('message', callback); 2637// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2638tcp.off('message', callback); 2639tcp.off('message'); 2640``` 2641 2642### on('connect' | 'close') 2643 2644on(type: 'connect' | 'close', callback: Callback\<void\>): void 2645 2646订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2647 2648**系统能力**:SystemCapability.Communication.NetStack 2649 2650**参数:** 2651 2652| 参数名 | 类型 | 必填 | 说明 | 2653| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2654| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2655| callback | Callback\<void\> | 是 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | 2656 2657**示例:** 2658 2659```ts 2660import { socket } from '@kit.NetworkKit'; 2661import { BusinessError } from '@kit.BasicServicesKit'; 2662 2663let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2664tcp.on('connect', () => { 2665 console.log("on connect success") 2666}); 2667tcp.on('close', () => { 2668 console.log("on close success") 2669}); 2670``` 2671 2672### off('connect' | 'close') 2673 2674off(type: 'connect' | 'close', callback?: Callback\<void\>): void 2675 2676取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 2677 2678**系统能力**:SystemCapability.Communication.NetStack 2679 2680**参数:** 2681 2682| 参数名 | 类型 | 必填 | 说明 | 2683| -------- | ---------------- | ---- | ------------------------------------------------------------ | 2684| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 2685| callback | Callback\<void\> | 否 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | 2686 2687**示例:** 2688 2689```ts 2690import { socket } from '@kit.NetworkKit'; 2691import { BusinessError } from '@kit.BasicServicesKit'; 2692 2693let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2694let callback1 = () => { 2695 console.log("on connect success"); 2696} 2697tcp.on('connect', callback1); 2698// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2699tcp.off('connect', callback1); 2700tcp.off('connect'); 2701let callback2 = () => { 2702 console.log("on close success"); 2703} 2704tcp.on('close', callback2); 2705// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2706tcp.off('close', callback2); 2707tcp.off('close'); 2708``` 2709 2710### on('error') 2711 2712on(type: 'error', callback: ErrorCallback): void 2713 2714订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2715 2716**系统能力**:SystemCapability.Communication.NetStack 2717 2718**参数:** 2719 2720| 参数名 | 类型 | 必填 | 说明 | 2721| -------- | ------------- | ---- | ------------------------------------ | 2722| type | string | 是 | 订阅的事件类型。'error':error事件。 | 2723| callback | ErrorCallback | 是 | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。 | 2724 2725**示例:** 2726 2727```ts 2728import { socket } from '@kit.NetworkKit'; 2729import { BusinessError } from '@kit.BasicServicesKit'; 2730 2731let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2732tcp.on('error', (err: BusinessError) => { 2733 console.log("on error, err:" + JSON.stringify(err)) 2734}); 2735``` 2736 2737### off('error') 2738 2739off(type: 'error', callback?: ErrorCallback): void 2740 2741取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 2742 2743**系统能力**:SystemCapability.Communication.NetStack 2744 2745**参数:** 2746 2747| 参数名 | 类型 | 必填 | 说明 | 2748| -------- | ------------- | ---- | ------------------------------------ | 2749| type | string | 是 | 订阅的事件类型。'error':error事件。 | 2750| callback | ErrorCallback | 否 | 回调函数。TCPSocket连接取消订阅的某类error事件触发时调用回调函数。 | 2751 2752**示例:** 2753 2754```ts 2755import { socket } from '@kit.NetworkKit'; 2756import { BusinessError } from '@kit.BasicServicesKit'; 2757 2758let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 2759let callback = (err: BusinessError) => { 2760 console.log("on error, err:" + JSON.stringify(err)); 2761} 2762tcp.on('error', callback); 2763// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 2764tcp.off('error', callback); 2765tcp.off('error'); 2766``` 2767 2768## TCPConnectOptions 2769 2770TCPSocket连接的参数。 2771 2772**系统能力**:SystemCapability.Communication.NetStack 2773 2774| 名称 | 类型 | 必填 | 说明 | 2775| ------- | ---------------------------------- | ---- | -------------------------- | 2776| address | [NetAddress](#netaddress) | 是 | 绑定的地址以及端口。 | 2777| timeout | number | 否 | 超时时间,单位毫秒(ms)。 | 2778| proxy<sup>18+</sup> | [ProxyOptions](#proxyoptions18) | 否 | 使用的代理信息,默认不使用代理。 | 2779 2780## TCPSendOptions 2781 2782TCPSocket发送请求的参数。 2783 2784**系统能力**:SystemCapability.Communication.NetStack 2785 2786| 名称 | 类型 | 必填 | 说明 | 2787| -------- | ------ | ---- | ------------------------------------------------------------ | 2788| data | string\| ArrayBuffer | 是 | 发送的数据。 | 2789| encoding | string | 否 | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 | 2790 2791## TCPExtraOptions 2792 2793TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 2794 2795**系统能力**:SystemCapability.Communication.NetStack 2796 2797| 名称 | 类型 | 必填 | 说明 | 2798| ----------------- | ------- | ---- | ------------------------------------------------------------ | 2799| keepAlive | boolean | 否 | 是否保持连接。默认为false。true:保持连接;false:断开连接。 | 2800| OOBInline | boolean | 否 | 是否为OOB内联。默认为false。true:是OOB内联;false:不是OOB内联。 | 2801| TCPNoDelay | boolean | 否 | TCPSocket连接是否无时延。默认为false。true:无时延;false:有时延。 | 2802| socketLinger | \{on:boolean, linger:number\} | 否 | socket是否继续逗留。<br />- on:是否逗留(true:逗留;false:不逗留)。<br />- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。<br />当入参on设置为true时,才需要设置。 | 2803 2804## socket.constructTCPSocketServerInstance<sup>10+</sup> 2805 2806constructTCPSocketServerInstance(): TCPSocketServer 2807 2808创建一个TCPSocketServer对象。 2809 2810**系统能力**:SystemCapability.Communication.NetStack 2811 2812**返回值:** 2813 2814| 类型 | 说明 | 2815| ---------------------------------- | ---------------------------- | 2816| [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 | 2817 2818**示例:** 2819 2820```ts 2821import { socket } from '@kit.NetworkKit'; 2822let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2823``` 2824 2825## TCPSocketServer<sup>10+</sup> 2826 2827TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。 2828 2829### listen<sup>10+</sup> 2830 2831listen(address: NetAddress, callback: AsyncCallback\<void\>): void 2832 2833绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。 2834 2835> **说明:** 2836> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2837 2838**需要权限**:ohos.permission.INTERNET 2839 2840**系统能力**:SystemCapability.Communication.NetStack 2841 2842**参数:** 2843 2844| 参数名 | 类型 | 必填 | 说明 | 2845| -------- | ------------------------- | ---- | --------------------------------------------- | 2846| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2847| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2848 2849**错误码:** 2850 2851| 错误码ID | 错误信息 | 2852| -------- | ------------------------------------------- | 2853| 401 | Parameter error. | 2854| 201 | Permission denied. | 2855| 2300002 | System internal error. | 2856| 2303109 | Bad file number. | 2857| 2303111 | Resource temporarily unavailable. Try again.| 2858| 2303198 | Address already in use. | 2859| 2303199 | Cannot assign requested address. | 2860 2861**示例:** 2862 2863```ts 2864import { socket } from '@kit.NetworkKit'; 2865import { BusinessError } from '@kit.BasicServicesKit'; 2866 2867let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2868let listenAddr: socket.NetAddress = { 2869 address: '192.168.xx.xxx', 2870 port: 8080, 2871 family: 1 2872} 2873tcpServer.listen(listenAddr, (err: BusinessError) => { 2874 if (err) { 2875 console.log("listen fail"); 2876 return; 2877 } 2878 console.log("listen success"); 2879}) 2880``` 2881 2882### listen<sup>10+</sup> 2883 2884listen(address: NetAddress): Promise\<void\> 2885 2886绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 2887 2888> **说明:** 2889> 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 2890 2891**需要权限**:ohos.permission.INTERNET 2892 2893**系统能力**:SystemCapability.Communication.NetStack 2894 2895**参数:** 2896 2897| 参数名 | 类型 | 必填 | 说明 | 2898| ------- | ------------------------- | ---- | --------------------------------------------- | 2899| address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | 2900 2901**返回值:** 2902 2903| 类型 | 说明 | 2904| -------------- | ----------------------------------------------------------- | 2905| Promise\<void\> | 以Promise形式返回, 成功返回空,失败返回错误码错误信息。| 2906 2907**错误码:** 2908 2909| 错误码ID | 错误信息 | 2910| -------- | ------------------------------------------- | 2911| 401 | Parameter error. | 2912| 201 | Permission denied. | 2913| 2300002 | System internal error. | 2914| 2303109 | Bad file number. | 2915| 2303111 | Resource temporarily unavailable. Try again.| 2916| 2303198 | Address already in use. | 2917| 2303199 | Cannot assign requested address. | 2918 2919**示例:** 2920 2921```ts 2922import { socket } from '@kit.NetworkKit'; 2923import { BusinessError } from '@kit.BasicServicesKit'; 2924 2925let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2926let listenAddr: socket.NetAddress = { 2927 address: '192.168.xx.xxx', 2928 port: 8080, 2929 family: 1 2930} 2931tcpServer.listen(listenAddr).then(() => { 2932 console.log('listen success'); 2933}).catch((err: BusinessError) => { 2934 console.log('listen fail'); 2935}); 2936``` 2937 2938### getState<sup>10+</sup> 2939 2940getState(callback: AsyncCallback\<SocketStateBase\>): void 2941 2942获取TCPSocketServer状态。使用callback方式作为异步方法。 2943 2944> **说明:** 2945> listen方法调用成功后,才可调用此方法。 2946 2947**需要权限**:ohos.permission.INTERNET 2948 2949**系统能力**:SystemCapability.Communication.NetStack 2950 2951**参数:** 2952 2953| 参数名 | 类型 | 必填 | 说明 | 2954| -------- | -------------------------------------------------- | ---- | ---------- | 2955| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 2956 2957**错误码:** 2958 2959| 错误码ID | 错误信息 | 2960| -------- | ------------------------------- | 2961| 401 | Parameter error. | 2962| 201 | Permission denied. | 2963| 2300002 | System internal error. | 2964| 2303188 | Socket operation on non-socket. | 2965 2966**示例:** 2967 2968```ts 2969import { socket } from '@kit.NetworkKit'; 2970import { BusinessError } from '@kit.BasicServicesKit'; 2971 2972let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 2973let listenAddr: socket.NetAddress = { 2974 address: '192.168.xx.xxx', 2975 port: 8080, 2976 family: 1 2977} 2978tcpServer.listen(listenAddr, (err: BusinessError) => { 2979 if (err) { 2980 console.log("listen fail"); 2981 return; 2982 } 2983 console.log("listen success"); 2984}) 2985tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 2986 if (err) { 2987 console.log('getState fail'); 2988 return; 2989 } 2990 console.log('getState success:' + JSON.stringify(data)); 2991}) 2992``` 2993 2994### getState<sup>10+</sup> 2995 2996getState(): Promise\<SocketStateBase\> 2997 2998获取TCPSocketServer状态。使用Promise方式作为异步方法。 2999 3000> **说明:** 3001> listen方法调用成功后,才可调用此方法。 3002 3003**需要权限**:ohos.permission.INTERNET 3004 3005**系统能力**:SystemCapability.Communication.NetStack 3006 3007**返回值:** 3008 3009| 类型 | 说明 | 3010| ------------------------------------------- | ----------------------------------------- | 3011| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | 3012 3013**错误码:** 3014 3015| 错误码ID | 错误信息 | 3016| -------- | ------------------------------- | 3017| 201 | Permission denied. | 3018| 2300002 | System internal error. | 3019| 2303188 | Socket operation on non-socket. | 3020 3021**示例:** 3022 3023```ts 3024import { socket } from '@kit.NetworkKit'; 3025import { BusinessError } from '@kit.BasicServicesKit'; 3026 3027let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3028let listenAddr: socket.NetAddress = { 3029 address: '192.168.xx.xxx', 3030 port: 8080, 3031 family: 1 3032} 3033tcpServer.listen(listenAddr, (err: BusinessError) => { 3034 if (err) { 3035 console.log("listen fail"); 3036 return; 3037 } 3038 console.log("listen success"); 3039}) 3040tcpServer.getState().then((data: socket.SocketStateBase) => { 3041 console.log('getState success' + JSON.stringify(data)); 3042}).catch((err: BusinessError) => { 3043 console.log('getState fail'); 3044}); 3045``` 3046 3047### setExtraOptions<sup>10+</sup> 3048 3049setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 3050 3051设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。 3052 3053> **说明:** 3054> listen方法调用成功后,才可调用此方法。 3055 3056**需要权限**:ohos.permission.INTERNET 3057 3058**系统能力**:SystemCapability.Communication.NetStack 3059 3060**参数:** 3061 3062| 参数名 | 类型 | 必填 | 说明 | 3063| -------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 3064| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 3065| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3066 3067**错误码:** 3068 3069| 错误码ID | 错误信息 | 3070| -------- | ------------------------------- | 3071| 401 | Parameter error. | 3072| 201 | Permission denied. | 3073| 2300002 | System internal error. | 3074| 2303188 | Socket operation on non-socket. | 3075 3076**示例:** 3077 3078```ts 3079import { socket } from '@kit.NetworkKit'; 3080import { BusinessError } from '@kit.BasicServicesKit'; 3081 3082let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3083let listenAddr: socket.NetAddress = { 3084 address: '192.168.xx.xxx', 3085 port: 8080, 3086 family: 1 3087} 3088tcpServer.listen(listenAddr, (err: BusinessError) => { 3089 if (err) { 3090 console.log("listen fail"); 3091 return; 3092 } 3093 console.log("listen success"); 3094}) 3095 3096interface SocketLinger { 3097 on: boolean; 3098 linger: number; 3099} 3100 3101let tcpExtraOptions: socket.TCPExtraOptions = { 3102 keepAlive: true, 3103 OOBInline: true, 3104 TCPNoDelay: true, 3105 socketLinger: { on: true, linger: 10 } as SocketLinger, 3106 receiveBufferSize: 1000, 3107 sendBufferSize: 1000, 3108 reuseAddress: true, 3109 socketTimeout: 3000 3110} 3111tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 3112 if (err) { 3113 console.log('setExtraOptions fail'); 3114 return; 3115 } 3116 console.log('setExtraOptions success'); 3117}); 3118``` 3119 3120### setExtraOptions<sup>10+</sup> 3121 3122setExtraOptions(options: TCPExtraOptions): Promise\<void\> 3123 3124设置TCPSocketServer连接的其他属性,使用Promise方式作为异步方法。 3125 3126> **说明:** 3127> listen方法调用成功后,才可调用此方法。 3128 3129**需要权限**:ohos.permission.INTERNET 3130 3131**系统能力**:SystemCapability.Communication.NetStack 3132 3133**参数:** 3134 3135| 参数名 | 类型 | 必填 | 说明 | 3136| ------- | ----------------------------------- | ---- | ------------------------------------------------------------ | 3137| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | 3138 3139**返回值:** 3140 3141| 类型 | 说明 | 3142| -------------- | --------------------------------------------------------- | 3143| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 3144 3145**错误码:** 3146 3147| 错误码ID | 错误信息 | 3148| -------- | ------------------------------- | 3149| 401 | Parameter error. | 3150| 201 | Permission denied. | 3151| 2300002 | System internal error. | 3152| 2303188 | Socket operation on non-socket. | 3153 3154**示例:** 3155 3156```ts 3157import { socket } from '@kit.NetworkKit'; 3158import { BusinessError } from '@kit.BasicServicesKit'; 3159 3160let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3161let listenAddr: socket.NetAddress = { 3162 address: '192.168.xx.xxx', 3163 port: 8080, 3164 family: 1 3165} 3166 3167interface SocketLinger { 3168 on: boolean; 3169 linger: number; 3170} 3171 3172tcpServer.listen(listenAddr, (err: BusinessError) => { 3173 if (err) { 3174 console.log("listen fail"); 3175 return; 3176 } 3177 console.log("listen success"); 3178}) 3179 3180let tcpExtraOptions: socket.TCPExtraOptions = { 3181 keepAlive: true, 3182 OOBInline: true, 3183 TCPNoDelay: true, 3184 socketLinger: { on: true, linger: 10 } as SocketLinger, 3185 receiveBufferSize: 1000, 3186 sendBufferSize: 1000, 3187 reuseAddress: true, 3188 socketTimeout: 3000 3189} 3190tcpServer.setExtraOptions(tcpExtraOptions).then(() => { 3191 console.log('setExtraOptions success'); 3192}).catch((err: BusinessError) => { 3193 console.log('setExtraOptions fail'); 3194}); 3195``` 3196 3197### getLocalAddress<sup>12+</sup> 3198 3199getLocalAddress(): Promise\<NetAddress\> 3200 3201获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。 3202 3203> **说明:** 3204> listen方法调用成功后,才可调用此方法。 3205 3206**系统能力**:SystemCapability.Communication.NetStack 3207 3208**返回值:** 3209 3210| 类型 | 说明 | 3211| -------------- | --------------------------------------------------- | 3212| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 3213 3214**错误码:** 3215 3216| 错误码ID | 错误信息 | 3217| -------- | ------------------------------------------- | 3218| 2300002 | System internal error. | 3219| 2301009 | Bad file descriptor. | 3220| 2303188 | Socket operation on non-socket. | 3221 3222**示例:** 3223 3224```ts 3225import { socket } from '@kit.NetworkKit'; 3226import { BusinessError } from '@kit.BasicServicesKit'; 3227 3228let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3229let listenAddr: socket.NetAddress = { 3230 address: '192.168.xx.xxx', 3231 port: 8080, 3232 family: 1 3233} 3234tcpServer.listen(listenAddr).then(() => { 3235 tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 3236 console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); 3237 }).catch((err: BusinessError) => { 3238 console.error("FerrorAILED! Error:" + JSON.stringify(err)); 3239 }) 3240}).catch((err: BusinessError) => { 3241 console.error('listen fail'); 3242}); 3243``` 3244 3245### on('connect')<sup>10+</sup> 3246 3247on(type: 'connect', callback: Callback\<TCPSocketConnection\>): void 3248 3249订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3250 3251> **说明:** 3252> listen方法调用成功后,才可调用此方法。 3253 3254**系统能力**:SystemCapability.Communication.NetStack 3255 3256**参数:** 3257 3258| 参数名 | 类型 | 必填 | 说明 | 3259| -------- | ------------------------------- | ---- | ------------------------------------- | 3260| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 3261| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3262 3263**错误码:** 3264 3265| 错误码ID | 错误信息 | 3266| -------- | ---------------- | 3267| 401 | Parameter error. | 3268 3269**示例:** 3270 3271```ts 3272import { socket } from '@kit.NetworkKit'; 3273 3274let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3275 3276let listenAddr: socket.NetAddress = { 3277 address: '192.168.xx.xxx', 3278 port: 8080, 3279 family: 1 3280} 3281tcpServer.listen(listenAddr, (err: BusinessError) => { 3282 if (err) { 3283 console.log("listen fail"); 3284 return; 3285 } 3286 console.log("listen success"); 3287 tcpServer.on('connect', (data: socket.TCPSocketConnection) => { 3288 console.log(JSON.stringify(data)) 3289 }); 3290}) 3291``` 3292 3293### off('connect')<sup>10+</sup> 3294 3295off(type: 'connect', callback?: Callback\<TCPSocketConnection\>): void 3296 3297取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 3298 3299**系统能力**:SystemCapability.Communication.NetStack 3300 3301**参数:** 3302 3303| 参数名 | 类型 | 必填 | 说明 | 3304| -------- | ------------------------------- | ---- | ------------------------------------- | 3305| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 3306| callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3307 3308**错误码:** 3309 3310| 错误码ID | 错误信息 | 3311| -------- | ---------------- | 3312| 401 | Parameter error. | 3313 3314**示例:** 3315 3316```ts 3317import { socket } from '@kit.NetworkKit'; 3318 3319let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3320 3321let listenAddr: socket.NetAddress = { 3322 address: '192.168.xx.xxx', 3323 port: 8080, 3324 family: 1 3325} 3326tcpServer.listen(listenAddr, (err: BusinessError) => { 3327 if (err) { 3328 console.log("listen fail"); 3329 return; 3330 } 3331 console.log("listen success"); 3332 let callback = (data: socket.TCPSocketConnection) => { 3333 console.log('on connect message: ' + JSON.stringify(data)); 3334 } 3335 tcpServer.on('connect', callback); 3336 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3337 tcpServer.off('connect', callback); 3338 tcpServer.off('connect'); 3339}) 3340``` 3341 3342### on('error')<sup>10+</sup> 3343 3344on(type: 'error', callback: ErrorCallback): void 3345 3346订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3347 3348> **说明:** 3349> listen方法调用成功后,才可调用此方法。 3350 3351**系统能力**:SystemCapability.Communication.NetStack 3352 3353**参数:** 3354 3355| 参数名 | 类型 | 必填 | 说明 | 3356| -------- | ------------- | ---- | ------------------------------------ | 3357| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3358| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。| 3359 3360**错误码:** 3361 3362| 错误码ID | 错误信息 | 3363| -------- | ---------------- | 3364| 401 | Parameter error. | 3365 3366**示例:** 3367 3368```ts 3369import { socket } from '@kit.NetworkKit'; 3370import { BusinessError } from '@kit.BasicServicesKit'; 3371 3372let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3373 3374let listenAddr: socket.NetAddress = { 3375 address: '192.168.xx.xxx', 3376 port: 8080, 3377 family: 1 3378} 3379tcpServer.listen(listenAddr, (err: BusinessError) => { 3380 if (err) { 3381 console.log("listen fail"); 3382 return; 3383 } 3384 console.log("listen success"); 3385 tcpServer.on('error', (err: BusinessError) => { 3386 console.log("on error, err:" + JSON.stringify(err)) 3387 }); 3388}) 3389``` 3390 3391### off('error')<sup>10+</sup> 3392 3393off(type: 'error', callback?: ErrorCallback): void 3394 3395取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 3396 3397**系统能力**:SystemCapability.Communication.NetStack 3398 3399**参数:** 3400 3401| 参数名 | 类型 | 必填 | 说明 | 3402| -------- | ------------- | ---- | ------------------------------------ | 3403| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3404| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 3405 3406**错误码:** 3407 3408| 错误码ID | 错误信息 | 3409| -------- | ---------------- | 3410| 401 | Parameter error. | 3411 3412**示例:** 3413 3414```ts 3415import { socket } from '@kit.NetworkKit'; 3416import { BusinessError } from '@kit.BasicServicesKit'; 3417 3418let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3419 3420let listenAddr: socket.NetAddress = { 3421 address: '192.168.xx.xxx', 3422 port: 8080, 3423 family: 1 3424} 3425tcpServer.listen(listenAddr, (err: BusinessError) => { 3426 if (err) { 3427 console.log("listen fail"); 3428 return; 3429 } 3430 console.log("listen success"); 3431 let callback = (err: BusinessError) => { 3432 console.log("on error, err:" + JSON.stringify(err)); 3433 } 3434 tcpServer.on('error', callback); 3435 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3436 tcpServer.off('error', callback); 3437 tcpServer.off('error'); 3438}) 3439``` 3440 3441## TCPSocketConnection<sup>10+</sup> 3442 3443TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。 3444 3445> **说明:** 3446> 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。 3447 3448**系统能力**:SystemCapability.Communication.NetStack 3449 3450### 属性 3451 3452| 名称 | 类型 | 必填 | 说明 | 3453| -------- | ------ | ---- | ----------------------------------------- | 3454| clientId | number | 是 | 客户端与TCPSocketServer建立连接的id。 | 3455 3456### send<sup>10+</sup> 3457 3458send(options: TCPSendOptions, callback: AsyncCallback\<void\>): void 3459 3460通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。 3461 3462> **说明:** 3463> 与客户端建立连接后,才可调用此方法。 3464 3465**需要权限**:ohos.permission.INTERNET 3466 3467**系统能力**:SystemCapability.Communication.NetStack 3468 3469**参数:** 3470 3471| 参数名 | 类型 | 必填 | 说明 | 3472| -------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3473| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3474| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3475 3476**错误码:** 3477 3478| 错误码ID | 错误信息 | 3479| -------- | ---------------------- | 3480| 401 | Parameter error. | 3481| 201 | Permission denied. | 3482| 2300002 | System internal error. | 3483 3484**示例:** 3485 3486```ts 3487import { socket } from '@kit.NetworkKit'; 3488 3489let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3490 3491tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3492 let tcpSendOption: socket.TCPSendOptions = { 3493 data: 'Hello, client!' 3494 } 3495 client.send(tcpSendOption, () => { 3496 console.log('send success'); 3497 }); 3498}); 3499``` 3500 3501### send<sup>10+</sup> 3502 3503send(options: TCPSendOptions): Promise\<void\> 3504 3505通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。 3506 3507> **说明:** 3508> 与客户端建立连接后,才可调用此方法。 3509 3510**需要权限**:ohos.permission.INTERNET 3511 3512**系统能力**:SystemCapability.Communication.NetStack 3513 3514**参数:** 3515 3516| 参数名 | 类型 | 必填 | 说明 | 3517| ------- | --------------------------------- | ---- | ------------------------------------------------------------ | 3518| options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | 3519 3520**返回值:** 3521 3522| 类型 | 说明 | 3523| -------------- | ----------------------------------------------------------- | 3524| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 3525 3526**错误码:** 3527 3528| 错误码ID | 错误信息 | 3529| -------- | ---------------------- | 3530| 401 | Parameter error. | 3531| 201 | Permission denied. | 3532| 2300002 | System internal error. | 3533 3534**示例:** 3535 3536```ts 3537import { socket } from '@kit.NetworkKit'; 3538import { BusinessError } from '@kit.BasicServicesKit'; 3539 3540let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3541 3542tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3543 let tcpSendOption: socket.TCPSendOptions = { 3544 data: 'Hello, client!' 3545 } 3546 client.send(tcpSendOption).then(() => { 3547 console.log('send success'); 3548 }).catch((err: BusinessError) => { 3549 console.log('send fail'); 3550 }); 3551}); 3552``` 3553 3554### close<sup>10+</sup> 3555 3556close(callback: AsyncCallback\<void\>): void 3557 3558关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。 3559 3560**需要权限**:ohos.permission.INTERNET 3561 3562**系统能力**:SystemCapability.Communication.NetStack 3563 3564**参数:** 3565 3566| 参数名 | 类型 | 必填 | 说明 | 3567| -------- | --------------------- | ---- | ---------- | 3568| callback | AsyncCallback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3569 3570**错误码:** 3571 3572| 错误码ID | 错误信息 | 3573| -------- | ---------------------- | 3574| 401 | Parameter error. | 3575| 201 | Permission denied. | 3576| 2300002 | System internal error. | 3577 3578**示例:** 3579 3580```ts 3581import { socket } from '@kit.NetworkKit'; 3582import { BusinessError } from '@kit.BasicServicesKit'; 3583 3584let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3585 3586tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3587 client.close((err: BusinessError) => { 3588 if (err) { 3589 console.log('close fail'); 3590 return; 3591 } 3592 console.log('close success'); 3593 }); 3594}); 3595``` 3596 3597### close<sup>10+</sup> 3598 3599close(): Promise\<void\> 3600 3601关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。 3602 3603**需要权限**:ohos.permission.INTERNET 3604 3605**系统能力**:SystemCapability.Communication.NetStack 3606 3607**返回值:** 3608 3609| 类型 | 说明 | 3610| -------------- | ------------------------------------------- | 3611| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 3612 3613**错误码:** 3614 3615| 错误码ID | 错误信息 | 3616| -------- | ---------------------- | 3617| 201 | Permission denied. | 3618| 2300002 | System internal error. | 3619 3620**示例:** 3621 3622```ts 3623import { socket } from '@kit.NetworkKit'; 3624 3625let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3626tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3627 client.close().then(() => { 3628 console.log('close success'); 3629 }).catch((err: BusinessError) => { 3630 console.log('close fail'); 3631 }); 3632}); 3633``` 3634 3635### getRemoteAddress<sup>10+</sup> 3636 3637getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 3638 3639获取对端Socket地址。使用callback方式作为异步方法。 3640 3641> **说明:** 3642> 与客户端建立连接后,才可调用此方法。 3643 3644**需要权限**:ohos.permission.INTERNET 3645 3646**系统能力**:SystemCapability.Communication.NetStack 3647 3648**参数:** 3649 3650| 参数名 | 类型 | 必填 | 说明 | 3651| -------- | ---------------------------------------- | ---- | ---------- | 3652| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3653 3654**错误码:** 3655 3656| 错误码ID | 错误信息 | 3657| -------- | ------------------------------- | 3658| 401 | Parameter error. | 3659| 201 | Permission denied. | 3660| 2300002 | System internal error. | 3661| 2303188 | Socket operation on non-socket. | 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.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 3672 if (err) { 3673 console.log('getRemoteAddress fail'); 3674 return; 3675 } 3676 console.log('getRemoteAddress success:' + JSON.stringify(data)); 3677 }); 3678}); 3679``` 3680 3681### getRemoteAddress<sup>10+</sup> 3682 3683getRemoteAddress(): Promise\<NetAddress\> 3684 3685获取对端Socket地址。使用Promise方式作为异步方法。 3686 3687> **说明:** 3688> 与客户端建立连接后,才可调用此方法。 3689 3690**需要权限**:ohos.permission.INTERNET 3691 3692**系统能力**:SystemCapability.Communication.NetStack 3693 3694**返回值:** 3695 3696| 类型 | 说明 | 3697| --------------------------------- | ------------------------------------------ | 3698| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | 3699 3700**错误码:** 3701 3702| 错误码ID | 错误信息 | 3703| -------- | ------------------------------- | 3704| 201 | Permission denied. | 3705| 2300002 | System internal error. | 3706| 2303188 | Socket operation on non-socket. | 3707 3708**示例:** 3709 3710```ts 3711import { socket } from '@kit.NetworkKit'; 3712import { BusinessError } from '@kit.BasicServicesKit'; 3713 3714let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3715tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3716 client.getRemoteAddress().then(() => { 3717 console.log('getRemoteAddress success'); 3718 }).catch((err: BusinessError) => { 3719 console.log('getRemoteAddress fail'); 3720 }); 3721}); 3722``` 3723 3724### getLocalAddress<sup>12+</sup> 3725 3726getLocalAddress(): Promise\<NetAddress\> 3727 3728获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 3729 3730**系统能力**:SystemCapability.Communication.NetStack 3731 3732**返回值:** 3733 3734| 类型 | 说明 | 3735| -------------- | --------------------------------------------------- | 3736| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 3737 3738**错误码:** 3739 3740| 错误码ID | 错误信息 | 3741| -------- | ------------------------------------------- | 3742| 2300002 | System internal error. | 3743| 2301009 | Bad file descriptor. | 3744| 2303188 | Socket operation on non-socket. | 3745 3746**示例:** 3747 3748```ts 3749import { socket } from '@kit.NetworkKit'; 3750import { BusinessError } from '@kit.BasicServicesKit'; 3751 3752let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3753let listenAddr: socket.NetAddress = { 3754 address: "192.168.xx.xx", 3755 port: 8080, 3756 family: 1 3757} 3758tcpServer.listen(listenAddr, (err: BusinessError) => { 3759 let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 3760 let netAddress: socket.NetAddress = { 3761 address: "192.168.xx.xx", 3762 port: 8080 3763 } 3764 let options: socket.TCPConnectOptions = { 3765 address: netAddress, 3766 timeout: 6000 3767 } 3768 tcp.connect(options, (err: BusinessError) => { 3769 if (err) { 3770 console.error('connect fail'); 3771 return; 3772 } 3773 console.info('connect success!'); 3774 }) 3775 tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3776 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 3777 console.info("Family IP Port: " + JSON.stringify(localAddress)); 3778 }).catch((err: BusinessError) => { 3779 console.error('Error:' + JSON.stringify(err)); 3780 }); 3781 }) 3782}) 3783``` 3784 3785### on('message')<sup>10+</sup> 3786 3787on(type: 'message', callback: Callback<SocketMessageInfo\>): void 3788 3789订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 3790 3791**系统能力**:SystemCapability.Communication.NetStack 3792 3793**参数:** 3794 3795| 参数名 | 类型 | 必填 | 说明 | 3796| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 3797| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 3798| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3799 3800**错误码:** 3801 3802| 错误码ID | 错误信息 | 3803| -------- | ---------------- | 3804| 401 | Parameter error. | 3805 3806**示例:** 3807 3808```ts 3809import { socket } from '@kit.NetworkKit'; 3810import { BusinessError } from '@kit.BasicServicesKit'; 3811 3812let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3813 3814tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3815 client.on('message', (value: socket.SocketMessageInfo) => { 3816 let messageView = ''; 3817 for (let i: number = 0; i < value.message.byteLength; i++) { 3818 let uint8Array = new Uint8Array(value.message) 3819 let messages = uint8Array[i] 3820 let message = String.fromCharCode(messages); 3821 messageView += message; 3822 } 3823 console.log('on message message: ' + JSON.stringify(messageView)); 3824 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 3825 }); 3826}); 3827``` 3828 3829### off('message')<sup>10+</sup> 3830 3831off(type: 'message', callback?: Callback<SocketMessageInfo\>): void 3832 3833取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 3834 3835**系统能力**:SystemCapability.Communication.NetStack 3836 3837**参数:** 3838 3839| 参数名 | 类型 | 必填 | 说明 | 3840| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 3841| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 3842| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3843 3844**错误码:** 3845 3846| 错误码ID | 错误信息 | 3847| -------- | ---------------- | 3848| 401 | Parameter error. | 3849 3850**示例:** 3851 3852```ts 3853import { socket } from '@kit.NetworkKit'; 3854import { BusinessError } from '@kit.BasicServicesKit'; 3855 3856let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3857let callback = (value: socket.SocketMessageInfo) => { 3858 let messageView = ''; 3859 for (let i: number = 0; i < value.message.byteLength; i++) { 3860 let uint8Array = new Uint8Array(value.message) 3861 let messages = uint8Array[i] 3862 let message = String.fromCharCode(messages); 3863 messageView += message; 3864 } 3865 console.log('on message message: ' + JSON.stringify(messageView)); 3866 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 3867} 3868tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3869 client.on('message', callback); 3870 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3871 client.off('message', callback); 3872 client.off('message'); 3873}); 3874``` 3875 3876### on('close')<sup>10+</sup> 3877 3878on(type: 'close', callback: Callback\<void\>): void 3879 3880订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 3881 3882**系统能力**:SystemCapability.Communication.NetStack 3883 3884**参数:** 3885 3886| 参数名 | 类型 | 必填 | 说明 | 3887| -------- | ---------------- | ---- | ----------------------------------- | 3888| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 3889| callback | Callback\<void\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 3890 3891**错误码:** 3892 3893| 错误码ID | 错误信息 | 3894| -------- | ---------------- | 3895| 401 | Parameter error. | 3896 3897**示例:** 3898 3899```ts 3900import { socket } from '@kit.NetworkKit'; 3901import { BusinessError } from '@kit.BasicServicesKit'; 3902 3903let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3904tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3905 client.on('close', () => { 3906 console.log("on close success") 3907 }); 3908}); 3909``` 3910 3911### off('close')<sup>10+</sup> 3912 3913off(type: 'close', callback?: Callback\<void\>): void 3914 3915取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 3916 3917**系统能力**:SystemCapability.Communication.NetStack 3918 3919**参数:** 3920 3921| 参数名 | 类型 | 必填 | 说明 | 3922| -------- | ---------------- | ---- | ----------------------------------- | 3923| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 3924| callback | Callback\<void\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 3925 3926**错误码:** 3927 3928| 错误码ID | 错误信息 | 3929| -------- | ---------------- | 3930| 401 | Parameter error. | 3931 3932**示例:** 3933 3934```ts 3935import { socket } from '@kit.NetworkKit'; 3936 3937let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3938let callback = () => { 3939 console.log("on close success"); 3940} 3941tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3942 client.on('close', callback); 3943 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 3944 client.off('close', callback); 3945 client.off('close'); 3946}); 3947``` 3948 3949### on('error')<sup>10+</sup> 3950 3951on(type: 'error', callback: ErrorCallback): void 3952 3953订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 3954 3955**系统能力**:SystemCapability.Communication.NetStack 3956 3957**参数:** 3958 3959| 参数名 | 类型 | 必填 | 说明 | 3960| -------- | ------------- | ---- | ------------------------------------ | 3961| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3962| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 3963 3964**错误码:** 3965 3966| 错误码ID | 错误信息 | 3967| -------- | ---------------- | 3968| 401 | Parameter error. | 3969 3970**示例:** 3971 3972```ts 3973import { socket } from '@kit.NetworkKit'; 3974import { BusinessError } from '@kit.BasicServicesKit'; 3975 3976let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 3977tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 3978 client.on('error', (err: BusinessError) => { 3979 console.log("on error, err:" + JSON.stringify(err)) 3980 }); 3981}); 3982``` 3983 3984### off('error')<sup>10+</sup> 3985 3986off(type: 'error', callback?: ErrorCallback): void 3987 3988取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 3989 3990**系统能力**:SystemCapability.Communication.NetStack 3991 3992**参数:** 3993 3994| 参数名 | 类型 | 必填 | 说明 | 3995| -------- | ------------- | ---- | ------------------------------------ | 3996| type | string | 是 | 订阅的事件类型。'error':error事件。 | 3997| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 3998 3999**错误码:** 4000 4001| 错误码ID | 错误信息 | 4002| -------- | ---------------- | 4003| 401 | Parameter error. | 4004 4005**示例:** 4006 4007```ts 4008import { socket } from '@kit.NetworkKit'; 4009import { BusinessError } from '@kit.BasicServicesKit'; 4010 4011let callback = (err: BusinessError) => { 4012 console.log("on error, err:" + JSON.stringify(err)); 4013} 4014let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); 4015tcpServer.on('connect', (client: socket.TCPSocketConnection) => { 4016 client.on('error', callback); 4017 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4018 client.off('error', callback); 4019 client.off('error'); 4020}); 4021``` 4022 4023## TCP 错误码说明 4024 4025TCP 其余错误码映射形式为:2301000 + Linux内核错误码。 4026 4027错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 4028 4029## socket.constructLocalSocketInstance<sup>11+</sup> 4030 4031constructLocalSocketInstance(): LocalSocket 4032 4033创建一个LocalSocket对象。 4034 4035**系统能力**:SystemCapability.Communication.NetStack 4036 4037**返回值:** 4038 4039| 类型 | 说明 | 4040| :--------------------------------- | :---------------------- | 4041| [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 | 4042 4043**示例:** 4044 4045```ts 4046import { socket } from '@kit.NetworkKit'; 4047let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4048``` 4049 4050## LocalSocket<sup>11+</sup> 4051 4052LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。 4053 4054### bind<sup>11+</sup> 4055 4056bind(address: LocalAddress): Promise\<void\>; 4057 4058绑定本地套接字文件的路径。使用promise方法作为异步方法。 4059 4060> **说明:** 4061> bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。 4062> bind方法在本地套接字通信中非必须。 4063 4064**系统能力**:SystemCapability.Communication.NetStack 4065 4066**参数:** 4067 4068| 参数名 | 类型 | 必填 | 说明 | 4069| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 4070| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息,参考[LocalAddress](#localaddress11)。 | 4071 4072**错误码:** 4073 4074| 错误码ID | 错误信息 | 4075| ------- | -------------------------- | 4076| 401 | Parameter error. | 4077| 2301013 | Insufficient permissions. | 4078| 2301022 | Invalid argument. | 4079| 2301098 | Address already in use. | 4080 4081**示例:** 4082 4083**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4084 4085```ts 4086import { socket } from '@kit.NetworkKit'; 4087import { common } from '@kit.AbilityKit'; 4088 4089let client: socket.LocalSocket = socket.constructLocalSocketInstance() 4090let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4091let sandboxPath: string = context.filesDir + '/testSocket'; 4092let address : socket.LocalAddress = { 4093 address: sandboxPath 4094} 4095client.bind(address).then(() => { 4096 console.log('bind success') 4097}).catch((err: Object) => { 4098 console.error('failed to bind: ' + JSON.stringify(err)) 4099}) 4100``` 4101 4102### connect<sup>11+</sup> 4103 4104connect(options: LocalConnectOptions): Promise\<void\> 4105 4106连接到指定的套接字文件。使用promise方法作为异步方法。 4107 4108> **说明:** 4109> 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。 4110 4111**系统能力**:SystemCapability.Communication.NetStack 4112 4113**参数:** 4114 4115| 参数名 | 类型 | 必填 | 说明 | 4116| ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | 4117| options | [LocalConnectOptions](#localconnectoptions11) | 是 | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 | 4118 4119**返回值:** 4120 4121| 类型 | 说明 | 4122| :-------------- | :---------------------------------------- | 4123| Promise\<void\> | 以Promise形式返回LocalSocket连接服务端的结果。 | 4124 4125**错误码:** 4126 4127| 错误码ID | 错误信息 | 4128| ------- | ----------------------- | 4129| 401 | Parameter error. | 4130| 2301013 | Insufficient permissions. | 4131| 2301022 | Invalid argument. | 4132| 2301111 | Connection refused. | 4133| 2301099 | Cannot assign requested address. | 4134 4135**示例:** 4136 4137**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4138 4139```ts 4140import { socket } from '@kit.NetworkKit'; 4141import { common } from '@kit.AbilityKit'; 4142 4143let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4144let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4145let sandboxPath: string = context.filesDir + '/testSocket'; 4146let localAddress : socket.LocalAddress = { 4147 address: sandboxPath 4148} 4149let connectOpt: socket.LocalConnectOptions = { 4150 address: localAddress, 4151 timeout: 6000 4152} 4153client.connect(connectOpt).then(() => { 4154 console.log('connect success') 4155}).catch((err: Object) => { 4156 console.error('connect fail: ' + JSON.stringify(err)); 4157}); 4158``` 4159 4160### send<sup>11+</sup> 4161 4162send(options: LocalSendOptions): Promise\<void\> 4163 4164通过LocalSocket连接发送数据。使用Promise方式作为异步方法。 4165 4166> **说明:** 4167> connect方法调用成功后,才可调用此方法。 4168 4169**系统能力**:SystemCapability.Communication.NetStack 4170 4171**参数:** 4172 4173| 参数名 | 类型 | 必填 | 说明 | 4174| ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | 4175| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 | 4176 4177**返回值:** 4178 4179| 类型 | 说明 | 4180| :-------------- | :------------------------------------------ | 4181| Promise\<void\> | 以Promise形式返回通过LocalSocket发送数据的结果。 | 4182 4183**错误码:** 4184 4185| 错误码ID | 错误信息 | 4186| ------- | ----------------------- | 4187| 401 | Parameter error. | 4188| 2301011 | Operation would block. | 4189 4190**示例:** 4191 4192**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4193 4194```ts 4195import { socket } from '@kit.NetworkKit'; 4196import { common } from '@kit.AbilityKit'; 4197 4198let client: socket.LocalSocket = socket.constructLocalSocketInstance() 4199let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4200let sandboxPath: string = context.filesDir + '/testSocket'; 4201let localAddress : socket.LocalAddress = { 4202 address: sandboxPath 4203} 4204let connectOpt: socket.LocalConnectOptions = { 4205 address: localAddress, 4206 timeout: 6000 4207} 4208client.connect(connectOpt).then(() => { 4209 console.log('connect success') 4210}).catch((err: Object) => { 4211 console.error('connect failed: ' + JSON.stringify(err)) 4212}) 4213let sendOpt: socket.LocalSendOptions = { 4214 data: 'Hello world!' 4215} 4216client.send(sendOpt).then(() => { 4217 console.log('send success') 4218}).catch((err: Object) => { 4219 console.error('send fail: ' + JSON.stringify(err)) 4220}) 4221``` 4222 4223### close<sup>11+</sup> 4224 4225close(): Promise\<void\> 4226 4227关闭LocalSocket连接。使用Promise方式作为异步方法。 4228 4229**系统能力**:SystemCapability.Communication.NetStack 4230 4231**返回值:** 4232 4233| 类型 | 说明 | 4234| :-------------- | :----------------------------------------- | 4235| Promise\<void\> | 以Promise形式返回关闭LocalSocket连接的结果。 | 4236 4237**错误码:** 4238 4239| 错误码ID | 错误信息 | 4240| ------- | ----------------------- | 4241| 2301009 | Bad file descriptor. | 4242 4243**示例:** 4244 4245```ts 4246import { socket } from '@kit.NetworkKit'; 4247 4248let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4249 4250client.close().then(() => { 4251 console.log('close success'); 4252}).catch((err: Object) => { 4253 console.error('close fail: ' + JSON.stringify(err)); 4254}); 4255``` 4256 4257### getState<sup>11+</sup> 4258 4259getState(): Promise\<SocketStateBase\> 4260 4261获取LocalSocket状态。使用Promise方式作为异步方法。 4262 4263> **说明:** 4264> bind或connect方法调用成功后,才可调用此方法。 4265 4266**系统能力**:SystemCapability.Communication.NetStack 4267 4268**返回值:** 4269 4270| 类型 | 说明 | 4271| :------------------------------------------- | :--------------------------------------- | 4272| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 | 4273 4274**示例:** 4275 4276**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4277 4278```ts 4279import { socket } from '@kit.NetworkKit'; 4280import { common } from '@kit.AbilityKit'; 4281 4282let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4283let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4284let sandboxPath: string = context.filesDir + '/testSocket'; 4285let localAddress : socket.LocalAddress = { 4286 address: sandboxPath 4287} 4288let connectOpt: socket.LocalConnectOptions = { 4289 address: localAddress, 4290 timeout: 6000 4291} 4292client.connect(connectOpt).then(() => { 4293 console.log('connect success'); 4294 client.getState().then(() => { 4295 console.log('getState success'); 4296 }).catch((err: Object) => { 4297 console.error('getState fail: ' + JSON.stringify(err)) 4298 }); 4299}).catch((err: Object) => { 4300 console.error('connect fail: ' + JSON.stringify(err)); 4301}); 4302``` 4303 4304### getSocketFd<sup>11+</sup> 4305 4306getSocketFd(): Promise\<number\> 4307 4308获取LocalSocket的文件描述符。使用Promise方式作为异步方法。 4309 4310> **说明:** 4311> bind或connect方法调用成功后,才可调用此方法。 4312> 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。 4313 4314**系统能力**:SystemCapability.Communication.NetStack 4315 4316**返回值:** 4317 4318| 类型 | 说明 | 4319| :---------------- | :-------------------------------- | 4320| Promise\<number\> | 以Promise形式返回socket的文件描述符。 | 4321 4322**示例:** 4323 4324**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4325 4326```ts 4327import { socket } from '@kit.NetworkKit'; 4328import { common } from '@kit.AbilityKit'; 4329 4330let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4331let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4332let sandboxPath: string = context.filesDir + '/testSocket'; 4333let localAddress : socket.LocalAddress = { 4334 address: sandboxPath 4335} 4336let connectOpt: socket.LocalConnectOptions = { 4337 address: localAddress, 4338 timeout: 6000 4339} 4340client.connect(connectOpt).then(() => { 4341 console.log('connect ok') 4342}).catch((err: Object) => { 4343 console.error('connect fail: ' + JSON.stringify(err)) 4344}) 4345client.getSocketFd().then((data: number) => { 4346 console.info("fd: " + data); 4347}).catch((err: Object) => { 4348 console.error("getSocketFd faile: " + JSON.stringify(err)); 4349}) 4350``` 4351 4352### setExtraOptions<sup>11+</sup> 4353 4354setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 4355 4356设置LocalSocket的套接字属性,使用Promise方式作为异步方法。 4357 4358> **说明:** 4359> bind或connect方法调用成功后,才可调用此方法。 4360 4361**系统能力**:SystemCapability.Communication.NetStack 4362 4363**参数:** 4364 4365| 参数名 | 类型 | 必填 | 说明 | 4366| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 4367| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 | 4368 4369**返回值:** 4370 4371| 类型 | 说明 | 4372| :-------------- | :-------------------------------------------- | 4373| Promise\<void\> | 以Promise形式返回设置LocalSocket套接字属性的结果。 | 4374 4375**错误码:** 4376 4377| 错误码ID | 错误信息 | 4378| ------- | ----------------------- | 4379| 401 | Parameter error. | 4380| 2301009 | Bad file descriptor. | 4381 4382**示例:** 4383 4384**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4385 4386```ts 4387import { socket } from '@kit.NetworkKit'; 4388import { common } from '@kit.AbilityKit'; 4389 4390let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4391let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4392let sandboxPath: string = context.filesDir + '/testSocket'; 4393let localAddress : socket.LocalAddress = { 4394 address: sandboxPath 4395} 4396let connectOpt: socket.LocalConnectOptions = { 4397 address: localAddress, 4398 timeout: 6000 4399} 4400client.connect(connectOpt).then(() => { 4401 console.log('connect success'); 4402 let options: socket.ExtraOptionsBase = { 4403 receiveBufferSize: 8000, 4404 sendBufferSize: 8000, 4405 socketTimeout: 3000 4406 } 4407 client.setExtraOptions(options).then(() => { 4408 console.log('setExtraOptions success'); 4409 }).catch((err: Object) => { 4410 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4411 }); 4412}).catch((err: Object) => { 4413 console.error('connect fail: ' + JSON.stringify(err)); 4414}); 4415``` 4416 4417### getExtraOptions<sup>11+</sup> 4418 4419getExtraOptions(): Promise\<ExtraOptionsBase\>; 4420 4421获取LocalSocket的套接字属性,使用Promise方式作为异步方法。 4422 4423> **说明:** 4424> bind或connect方法调用成功后,才可调用此方法。 4425 4426**系统能力**:SystemCapability.Communication.NetStack 4427 4428**返回值:** 4429 4430| 类型 | 说明 | 4431| :-------------------------- | :---------------------------------------- | 4432| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 | 4433 4434**错误码:** 4435 4436| 错误码ID | 错误信息 | 4437| ------- | ----------------------- | 4438| 2301009 | Bad file descriptor. | 4439 4440**示例:** 4441 4442**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4443 4444```ts 4445import { socket } from '@kit.NetworkKit'; 4446import { common } from '@kit.AbilityKit'; 4447 4448let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4449let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4450let sandboxPath: string = context.filesDir + '/testSocket'; 4451let localAddress : socket.LocalAddress = { 4452 address: sandboxPath 4453} 4454let connectOpt: socket.LocalConnectOptions = { 4455 address: localAddress, 4456 timeout: 6000 4457} 4458client.connect(connectOpt).then(() => { 4459 console.log('connect success'); 4460 client.getExtraOptions().then((options : socket.ExtraOptionsBase) => { 4461 console.log('options: ' + JSON.stringify(options)); 4462 }).catch((err: Object) => { 4463 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 4464 }); 4465}).catch((err: Object) => { 4466 console.error('connect fail: ' + JSON.stringify(err)); 4467}); 4468``` 4469 4470### getLocalAddress<sup>12+</sup> 4471 4472getLocalAddress(): Promise\<string\> 4473 4474获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。 4475 4476> **说明:** 4477> bind方法调用成功后,才可调用此方法。 4478 4479**系统能力**:SystemCapability.Communication.NetStack 4480 4481**返回值:** 4482 4483| 类型 | 说明 | 4484| -------------- | --------------------------------------------------- | 4485| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 4486 4487**错误码:** 4488 4489| 错误码ID | 错误信息 | 4490| -------- | ------------------------------------------- | 4491| 2300002 | System internal error. | 4492| 2301009 | Bad file descriptor. | 4493| 2303188 | Socket operation on non-socket. | 4494 4495**示例:** 4496 4497**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4498 4499```ts 4500import { common } from '@kit.AbilityKit'; 4501 4502let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4503let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4504let sandboxPath: string = context.filesDir + '/testSocket'; 4505let address : socket.LocalAddress = { 4506 address: sandboxPath 4507} 4508client.bind(address).then(() => { 4509 console.error('bind success'); 4510 client.getLocalAddress().then((localPath: string) => { 4511 console.info("SUCCESS " + JSON.stringify(localPath)); 4512 }).catch((err: BusinessError) => { 4513 console.error("FAIL " + JSON.stringify(err)); 4514 }) 4515}).catch((err: Object) => { 4516 console.info('failed to bind: ' + JSON.stringify(err)); 4517}) 4518``` 4519 4520### on('message')<sup>11+</sup> 4521 4522on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void 4523 4524订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4525 4526**系统能力**:SystemCapability.Communication.NetStack 4527 4528**参数:** 4529 4530| 参数名 | 类型 | 必填 | 说明 | 4531| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 4532| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 4533| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收的消息。| 4534 4535**错误码:** 4536 4537| 错误码ID | 错误信息 | 4538| ------- | ----------------------- | 4539| 401 | Parameter error. | 4540 4541**示例:** 4542 4543```ts 4544import { socket } from '@kit.NetworkKit'; 4545 4546let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4547client.on('message', (value: socket.LocalSocketMessageInfo) => { 4548 const uintArray = new Uint8Array(value.message) 4549 let messageView = ''; 4550 for (let i = 0; i < uintArray.length; i++) { 4551 messageView += String.fromCharCode(uintArray[i]); 4552 } 4553 console.log('total: ' + JSON.stringify(value)); 4554 console.log('message infomation: ' + messageView); 4555}); 4556``` 4557 4558### off('message')<sup>11+</sup> 4559 4560off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 4561 4562取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 4563 4564**系统能力**:SystemCapability.Communication.NetStack 4565 4566**参数:** 4567 4568| 参数名 | 类型 | 必填 | 说明 | 4569| -------- | ------------------------------------------------ | ---- | ----------------------------------- | 4570| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 4571| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on中的callback取消一个订阅。| 4572 4573**错误码:** 4574 4575| 错误码ID | 错误信息 | 4576| ------- | ----------------------- | 4577| 401 | Parameter error. | 4578 4579**示例:** 4580 4581```ts 4582import { socket } from '@kit.NetworkKit'; 4583 4584let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4585let messageView = ''; 4586let callback = (value: socket.LocalSocketMessageInfo) => { 4587 const uintArray = new Uint8Array(value.message) 4588 let messageView = ''; 4589 for (let i = 0; i < uintArray.length; i++) { 4590 messageView += String.fromCharCode(uintArray[i]); 4591 } 4592 console.log('total: ' + JSON.stringify(value)); 4593 console.log('message infomation: ' + messageView); 4594} 4595client.on('message', callback); 4596client.off('message'); 4597``` 4598 4599### on('connect')<sup>11+</sup> 4600 4601on(type: 'connect', callback: Callback\<void\>): void 4602 4603订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4604 4605**系统能力**:SystemCapability.Communication.NetStack 4606 4607**参数:** 4608 4609| 参数名 | 类型 | 必填 | 说明 | 4610| -------- | ---------------- | ---- | --------------------------------------------------------- | 4611| type | string | 是 | 订阅的事件类型。 | 4612| callback | Callback\<void\> | 是 | 以callback的形式异步返回与服务端连接的结果。 | 4613 4614**错误码:** 4615 4616| 错误码ID | 错误信息 | 4617| ------- | ----------------------- | 4618| 401 | Parameter error. | 4619 4620**示例:** 4621 4622```ts 4623import { socket } from '@kit.NetworkKit'; 4624 4625let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4626client.on('connect', () => { 4627 console.log("on connect success") 4628}); 4629``` 4630 4631### off('connect')<sup>11+</sup> 4632 4633off(type: 'connect', callback?: Callback\<void\>): void 4634 4635取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。 4636 4637**系统能力**:SystemCapability.Communication.NetStack 4638 4639**参数:** 4640 4641| 参数名 | 类型 | 必填 | 说明 | 4642| -------- | ---------------- | ---- | --------------------------------------------------------- | 4643| type | string | 是 | 订阅的事件类型。 | 4644| callback | Callback\<void\> | 否 | 指定传入on中的callback取消一个订阅。 | 4645 4646**错误码:** 4647 4648| 错误码ID | 错误信息 | 4649| ------- | ----------------------- | 4650| 401 | Parameter error. | 4651 4652**示例:** 4653 4654```ts 4655import { socket } from '@kit.NetworkKit'; 4656 4657let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4658let callback = () => { 4659 console.log("on connect success"); 4660} 4661client.on('connect', callback); 4662// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4663client.off('connect', callback); 4664client.off('connect'); 4665``` 4666 4667### on('close')<sup>11+</sup> 4668 4669on(type: 'close', callback: Callback\<void\>): void 4670 4671订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4672 4673**系统能力**:SystemCapability.Communication.NetStack 4674 4675**参数:** 4676 4677| 参数名 | 类型 | 必填 | 说明 | 4678| -------- | ---------------- | ---- | ------------------------ | 4679| type | string | 是 | 订阅LocalSocket的关闭事件。 | 4680| callback | Callback\<void\> | 是 | 以callback的形式异步返回关闭localsocket的结果。| 4681 4682**错误码:** 4683 4684| 错误码ID | 错误信息 | 4685| ------- | ----------------------- | 4686| 401 | Parameter error. | 4687 4688**示例:** 4689 4690```ts 4691import { socket } from '@kit.NetworkKit'; 4692 4693let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4694let callback = () => { 4695 console.log("on close success"); 4696} 4697client.on('close', callback); 4698``` 4699 4700### off('close')<sup>11+</sup> 4701 4702off(type: 'close', callback?: Callback\<void\>): void 4703 4704订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 4705 4706**系统能力**:SystemCapability.Communication.NetStack 4707 4708**参数:** 4709 4710| 参数名 | 类型 | 必填 | 说明 | 4711| -------- | ---------------- | ---- | ------------------------ | 4712| type | string | 是 | 订阅LocalSocket的关闭事件。 | 4713| callback | Callback\<void\> | 否 | 取消指定传入on中的callback取消一个订阅。| 4714 4715**错误码:** 4716 4717| 错误码ID | 错误信息 | 4718| ------- | ----------------------- | 4719| 401 | Parameter error. | 4720 4721**示例:** 4722 4723```ts 4724import { socket } from '@kit.NetworkKit'; 4725 4726let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4727let callback = () => { 4728 console.log("on close success"); 4729} 4730client.on('close', callback); 4731// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4732client.off('close', callback); 4733client.off('close'); 4734``` 4735 4736### on('error')<sup>11+</sup> 4737 4738on(type: 'error', callback: ErrorCallback): void 4739 4740订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 4741 4742**系统能力**:SystemCapability.Communication.NetStack 4743 4744**参数:** 4745 4746| 参数名 | 类型 | 必填 | 说明 | 4747| -------- | ------------- | ---- | ---------------------------- | 4748| type | string | 是 | 订阅LocalSocket的error事件。 | 4749| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 4750 4751**错误码:** 4752 4753| 错误码ID | 错误信息 | 4754| ------- | ----------------------- | 4755| 401 | Parameter error. | 4756 4757**示例:** 4758 4759```ts 4760import { socket } from '@kit.NetworkKit'; 4761 4762let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4763client.on('error', (err: Object) => { 4764 console.log("on error, err:" + JSON.stringify(err)) 4765}); 4766``` 4767 4768### off('error')<sup>11+</sup> 4769 4770off(type: 'error', callback?: ErrorCallback): void 4771 4772取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 4773 4774**系统能力**:SystemCapability.Communication.NetStack 4775 4776**参数:** 4777 4778| 参数名 | 类型 | 必填 | 说明 | 4779| -------- | ------------- | ---- | ----------------------------- | 4780| type | string | 是 | 取消订阅LocalSocket的error事件。 | 4781| callback | ErrorCallback | 否 | 指定传入on中的callback取消一个订阅。| 4782 4783**错误码:** 4784 4785| 错误码ID | 错误信息 | 4786| ------- | ----------------------- | 4787| 401 | Parameter error. | 4788 4789**示例:** 4790 4791```ts 4792import { socket } from '@kit.NetworkKit'; 4793 4794let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 4795let callback = (err: Object) => { 4796 console.log("on error, err:" + JSON.stringify(err)); 4797} 4798client.on('error', callback); 4799// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 4800client.off('error', callback); 4801client.off('error'); 4802``` 4803 4804## LocalSocketMessageInfo<sup>11+</sup> 4805 4806LocalSocket客户端与服务端通信时接收的数据。 4807 4808**系统能力**:SystemCapability.Communication.NetStack 4809 4810| 名称 | 类型 | 必填 | 说明 | 4811| ------- | --------------- | --- | ------------------ | 4812| message | ArrayBuffer | 是 | 收到的消息数据。 | 4813| address | string | 是 | 使用的本地套接字路径。| 4814| size | number | 是 | 数据长度。 | 4815 4816## LocalAddress<sup>11+</sup> 4817 4818LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。 4819 4820**系统能力**:SystemCapability.Communication.NetStack 4821 4822| 名称 | 类型 | 必填 | 说明 | 4823| ------- | ---------- | --- | ------------------ | 4824| address | string | 是 | 本地套接字路径。 | 4825 4826## LocalConnectOptions<sup>11+</sup> 4827 4828LocalSocket客户端在连接服务端时传入的参数信息。 4829 4830**系统能力**:SystemCapability.Communication.NetStack 4831 4832| 名称 | 类型 | 必填 | 说明 | 4833| ------- | ---------- | --- | ------------------------------ | 4834| address | [LocalAddress](#localaddress11) | 是 | 指定的本地套接字路径。 | 4835| timeout | number | 否 | 连接服务端的超时时间,单位为毫秒。 | 4836 4837## LocalSendOptions<sup>11+</sup> 4838 4839LocalSocket发送请求的参数。 4840 4841**系统能力**:SystemCapability.Communication.NetStack 4842 4843| 名称 | 类型 | 必填 | 说明 | 4844| ------- | ---------- | --- | ------------------- | 4845| data | string \| ArrayBuffer | 是 | 需要发送的数据。 | 4846| encoding | string | 否 | 字符编码。 | 4847 4848## ExtraOptionsBase<sup>7+</sup> 4849 4850Socket套接字的基础属性。 4851 4852**系统能力**:SystemCapability.Communication.NetStack 4853 4854| 名称 | 类型 | 必填 | 说明 | 4855| ----------------- | ------- | ---- | ----------------------------- | 4856| receiveBufferSize | number | 否 | 接收缓冲区大小(单位:Byte)。 | 4857| sendBufferSize | number | 否 | 发送缓冲区大小(单位:Byte)。 | 4858| reuseAddress | boolean | 否 | 是否重用地址。true:重用地址;false:不重用地址。 | 4859| socketTimeout | number | 否 | 套接字超时时间,单位毫秒(ms)。 | 4860 4861## socket.constructLocalSocketServerInstance<sup>11+</sup> 4862 4863constructLocalSocketServerInstance(): LocalSocketServer 4864 4865创建一个LocalSocketServer对象。 4866 4867**系统能力**:SystemCapability.Communication.NetStack 4868 4869**返回值:** 4870 4871| 类型 | 说明 | 4872| :---------------------------------- | :---------------------------- | 4873| [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 | 4874 4875**示例:** 4876 4877```ts 4878import { socket } from '@kit.NetworkKit'; 4879let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4880``` 4881 4882## LocalSocketServer<sup>11+</sup> 4883 4884LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。 4885 4886### listen<sup>11+</sup> 4887 4888listen(address: LocalAddress): Promise\<void\> 4889 4890绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 4891 4892> **说明:** 4893> 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。 4894 4895**系统能力**:SystemCapability.Communication.NetStack 4896 4897**参数:** 4898 4899| 参数名 | 类型 | 必填 | 说明 | 4900| ------- | ------------------------- | ---- | --------------------------------------------- | 4901| address | [LocalAddress](#localaddress11) | 是 | 目标地址信息。 | 4902 4903**返回值:** 4904 4905| 类型 | 说明 | 4906| :-------------- | :---------------------------------------------------- | 4907| Promise\<void\> | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。| 4908 4909**错误码:** 4910 4911| 错误码ID | 错误信息 | 4912| -------- | --------------------------- | 4913| 401 | Parameter error. | 4914| 2303109 | Bad file number. | 4915| 2301013 | Insufficient permissions. | 4916| 2301022 | Invalid argument. | 4917| 2301098 | Address already in use. | 4918 4919**示例:** 4920 4921**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4922 4923```ts 4924import { socket } from '@kit.NetworkKit'; 4925import { common } from '@kit.AbilityKit'; 4926 4927let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4928let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4929let sandboxPath: string = context.filesDir + '/testSocket'; 4930let addr: socket.LocalAddress = { 4931 address: sandboxPath 4932} 4933server.listen(addr).then(() => { 4934 console.log('listen success'); 4935}).catch((err: Object) => { 4936 console.error('listen fail: ' + JSON.stringify(err)); 4937}); 4938``` 4939 4940### getState<sup>11+</sup> 4941 4942getState(): Promise\<SocketStateBase\> 4943 4944获取LocalSocketServer状态。使用Promise方式作为异步方法。 4945 4946> **说明:** 4947> listen方法调用成功后,才可调用此方法。 4948 4949**系统能力**:SystemCapability.Communication.NetStack 4950 4951**返回值:** 4952 4953| 类型 | 说明 | 4954| :------------------------------------------- | :--------------------------------------------- | 4955| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 | 4956 4957**示例:** 4958 4959**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 4960 4961```ts 4962import { socket } from '@kit.NetworkKit'; 4963import { common } from '@kit.AbilityKit'; 4964 4965let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 4966let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 4967let sandboxPath: string = context.filesDir + '/testSocket'; 4968let listenAddr: socket.LocalAddress = { 4969 address: sandboxPath 4970} 4971server.listen(listenAddr).then(() => { 4972 console.log("listen success"); 4973}).catch((err: Object) => { 4974 console.error("listen fail: " + JSON.stringify(err)); 4975}) 4976server.getState().then((data: socket.SocketStateBase) => { 4977 console.log('getState success: ' + JSON.stringify(data)); 4978}).catch((err: Object) => { 4979 console.error('getState fail: ' + JSON.stringify(err)); 4980}); 4981``` 4982 4983### setExtraOptions<sup>11+</sup> 4984 4985setExtraOptions(options: ExtraOptionsBase): Promise\<void\> 4986 4987设置LocalSocketServer连接的套接字属性,使用Promise方式作为异步方法。 4988 4989> **说明:** 4990> listen方法调用成功后,才可调用此方法。 4991 4992**系统能力**:SystemCapability.Communication.NetStack 4993 4994**参数:** 4995 4996| 参数名 | 类型 | 必填 | 说明 | 4997| ------- | --------------------------------------- | ---- | ------------------------------ | 4998| options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocketServer连接的其他属性。 | 4999 5000**返回值:** 5001 5002| 类型 | 说明 | 5003| :-------------- | :---------------------------------------------- | 5004| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 5005 5006**错误码:** 5007 5008| 错误码ID | 错误信息 | 5009| -------- | ------------------------------- | 5010| 401 | Parameter error. | 5011| 2301009 | Bad file descriptor. | 5012 5013**示例:** 5014 5015**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 5016 5017```ts 5018import { socket } from '@kit.NetworkKit'; 5019import { common } from '@kit.AbilityKit'; 5020 5021 5022let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5023let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5024let sandboxPath: string = context.filesDir + '/testSocket'; 5025let listenAddr: socket.NetAddress = { 5026 address: sandboxPath 5027} 5028server.listen(listenAddr).then(() => { 5029 console.log("listen success"); 5030}).catch((err: Object) => { 5031 console.error("listen fail: " + JSON.stringify(err)); 5032}) 5033 5034let options: socket.ExtraOptionsBase = { 5035 receiveBufferSize: 6000, 5036 sendBufferSize: 6000, 5037 socketTimeout: 3000 5038} 5039server.setExtraOptions(options).then(() => { 5040 console.log('setExtraOptions success'); 5041}).catch((err: Object) => { 5042 console.error('setExtraOptions fail: ' + JSON.stringify(err)); 5043}); 5044``` 5045 5046### getExtraOptions<sup>11+</sup> 5047 5048getExtraOptions(): Promise\<ExtraOptionsBase\>; 5049 5050获取LocalSocketServer中连接的套接字的属性,使用Promise方式作为异步方法。 5051 5052> **说明:** 5053> listen方法调用成功后,才可调用此方法。 5054 5055**系统能力**:SystemCapability.Communication.NetStack 5056 5057**返回值:** 5058 5059| 类型 | 说明 | 5060| :-------------------------- | :-------------------------- | 5061| Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 | 5062 5063**错误码:** 5064 5065| 错误码ID | 错误信息 | 5066| -------- | -------------------- | 5067| 401 | Parameter error. | 5068 5069**示例:** 5070 5071**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 5072 5073```ts 5074import { socket } from '@kit.NetworkKit'; 5075import { common } from '@kit.AbilityKit'; 5076 5077let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5078let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5079let sandboxPath: string = context.filesDir + '/testSocket'; 5080let listenAddr: socket.LocalAddress = { 5081 address: sandboxPath 5082} 5083server.listen(listenAddr).then(() => { 5084 console.log("listen success"); 5085}).catch((err: Object) => { 5086 console.error("listen fail: " + JSON.stringify(err)); 5087}) 5088server.getExtraOptions().then((options: socket.ExtraOptionsBase) => { 5089 console.log('options: ' + JSON.stringify(options)); 5090}).catch((err: Object) => { 5091 console.error('getExtraOptions fail: ' + JSON.stringify(err)); 5092}); 5093``` 5094 5095### getLocalAddress<sup>12+</sup> 5096 5097getLocalAddress(): Promise\<string\> 5098 5099获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。 5100 5101> **说明:** 5102> listen方法调用成功后,才可调用此方法。 5103 5104**系统能力**:SystemCapability.Communication.NetStack 5105 5106**返回值:** 5107 5108| 类型 | 说明 | 5109| -------------- | --------------------------------------------------- | 5110| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 5111 5112**错误码:** 5113 5114| 错误码ID | 错误信息 | 5115| -------- | ------------------------------------------- | 5116| 2300002 | System internal error. | 5117| 2301009 | Bad file descriptor. | 5118| 2303188 | Socket operation on non-socket. | 5119 5120**示例:** 5121 5122**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 5123 5124```ts 5125import { common } from '@kit.AbilityKit'; 5126 5127let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5128let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5129let sandboxPath: string = context.filesDir + '/testSocket'; 5130let listenAddr: socket.LocalAddress = { 5131 address: sandboxPath 5132} 5133server.listen(listenAddr).then(() => { 5134 console.info("listen success"); 5135 server.getLocalAddress().then((localPath: string) => { 5136 console.info("SUCCESS " + JSON.stringify(localPath)); 5137 }).catch((err: BusinessError) => { 5138 console.error("FAIL " + JSON.stringify(err)); 5139 }) 5140}).catch((err: Object) => { 5141 console.error("listen fail: " + JSON.stringify(err)); 5142}) 5143 5144``` 5145 5146### on('connect')<sup>11+</sup> 5147 5148on(type: 'connect', callback: Callback\<LocalSocketConnection\>): void 5149 5150订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 5151 5152> **说明:** 5153> listen方法调用成功后,才可调用此方法。 5154 5155**系统能力**:SystemCapability.Communication.NetStack 5156 5157**参数:** 5158 5159| 参数名 | 类型 | 必填 | 说明 | 5160| -------- | ------------------------------- | ---- | ------------------------------------- | 5161| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 5162| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是 | 以callback的形式异步返回接收到客户端连接的结果。| 5163 5164**错误码:** 5165 5166| 错误码ID | 错误信息 | 5167| -------- | ---------------- | 5168| 401 | Parameter error. | 5169 5170**示例:** 5171 5172```ts 5173import { socket } from '@kit.NetworkKit'; 5174 5175let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5176server.on('connect', (connection: socket.LocalSocketConnection) => { 5177 if (connection) { 5178 console.log('accept a client') 5179 } 5180}); 5181``` 5182 5183### off('connect')<sup>11+</sup> 5184 5185off(type: 'connect', callback?: Callback\<LocalSocketConnection\>): void 5186 5187取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 5188 5189**系统能力**:SystemCapability.Communication.NetStack 5190 5191**参数:** 5192 5193| 参数名 | 类型 | 必填 | 说明 | 5194| -------- | ------------------------------- | ---- | ------------------------------------- | 5195| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 5196| callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否 | 指定传入on的一个callback取消注册。| 5197 5198**错误码:** 5199 5200| 错误码ID | 错误信息 | 5201| -------- | ---------------- | 5202| 401 | Parameter error. | 5203 5204**示例:** 5205 5206```ts 5207import { socket } from '@kit.NetworkKit'; 5208 5209let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5210let callback = (connection: socket.LocalSocketConnection) => { 5211 if (connection) { 5212 console.log('accept a client') 5213 } 5214} 5215server.on('connect', callback); 5216// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5217server.off('connect', callback); 5218server.off('connect'); 5219``` 5220 5221### on('error')<sup>11+</sup> 5222 5223on(type: 'error', callback: ErrorCallback): void 5224 5225订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 5226 5227> **说明:** 5228> listen方法调用成功后,才可调用此方法。 5229 5230**系统能力**:SystemCapability.Communication.NetStack 5231 5232**参数:** 5233 5234| 参数名 | 类型 | 必填 | 说明 | 5235| -------- | ------------- | ---- | ------------------------------------ | 5236| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5237| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 5238 5239**错误码:** 5240 5241| 错误码ID | 错误信息 | 5242| -------- | ---------------- | 5243| 401 | Parameter error. | 5244 5245**示例:** 5246 5247```ts 5248import { socket } from '@kit.NetworkKit'; 5249 5250let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5251server.on('error', (err: Object) => { 5252 console.error("on error, err:" + JSON.stringify(err)) 5253}); 5254``` 5255 5256### off('error')<sup>11+</sup> 5257 5258off(type: 'error', callback?: ErrorCallback): void 5259 5260取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 5261 5262**系统能力**:SystemCapability.Communication.NetStack 5263 5264**参数:** 5265 5266| 参数名 | 类型 | 必填 | 说明 | 5267| -------- | ------------- | ---- | ------------------------------------ | 5268| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5269| callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | 5270 5271**错误码:** 5272 5273| 错误码ID | 错误信息 | 5274| -------- | ---------------- | 5275| 401 | Parameter error. | 5276 5277**示例:** 5278 5279```ts 5280import { socket } from '@kit.NetworkKit'; 5281 5282let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5283let callback = (err: Object) => { 5284 console.error("on error, err:" + JSON.stringify(err)); 5285} 5286server.on('error', callback); 5287// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5288server.off('error', callback); 5289server.off('error'); 5290``` 5291 5292 5293## LocalSocketConnection<sup>11+</sup> 5294 5295LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。 5296 5297> **说明:** 5298> 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。 5299 5300**系统能力**:SystemCapability.Communication.NetStack 5301 5302### 属性 5303 5304| 名称 | 类型 | 必填 | 说明 | 5305| -------- | ------ | ---- | ---------------------------- | 5306| clientId | number | 是 | 客户端与服务端建立的会话连接的id。 | 5307 5308### send<sup>11+</sup> 5309 5310send(options: LocalSendOptions): Promise\<void\> 5311 5312通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。 5313 5314> **说明:** 5315> 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。 5316 5317**系统能力**:SystemCapability.Communication.NetStack 5318 5319**参数:** 5320 5321| 参数名 | 类型 | 必填 | 说明 | 5322| ------- | --------------------------------- | ---- | -------------------------------------- | 5323| options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocketConnection发送请求的参数。 | 5324 5325**返回值:** 5326 5327| 类型 | 说明 | 5328| :-------------- | :---------------------------------------------- | 5329| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 5330 5331**错误码:** 5332 5333| 错误码ID | 错误信息 | 5334| -------- | ---------------------- | 5335| 401 | Parameter error. | 5336| 2301011 | Operation would block. | 5337 5338**示例:** 5339 5340```ts 5341import { socket } from '@kit.NetworkKit'; 5342 5343let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5344 5345server.on('connect', (connection: socket.LocalSocketConnection) => { 5346 let sendOptions: socket.LocalSendOptions = { 5347 data: 'Hello, client!' 5348 } 5349 connection.send(sendOptions).then(() => { 5350 console.log('send success'); 5351 }).catch((err: Object) => { 5352 console.error('send fail: ' + JSON.stringify(err)); 5353 }); 5354}); 5355``` 5356 5357### close<sup>11+</sup> 5358 5359close(): Promise\<void\> 5360 5361关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。 5362 5363**系统能力**:SystemCapability.Communication.NetStack 5364 5365**返回值:** 5366 5367| 类型 | 说明 | 5368| :-------------- | :------------------------------------------- | 5369| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | 5370 5371**错误码:** 5372 5373| 错误码ID | 错误信息 | 5374| -------- | -------------------- | 5375| 2301009 | Bad file descriptor. | 5376 5377**示例:** 5378 5379```ts 5380import { socket } from '@kit.NetworkKit'; 5381 5382let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5383server.on('connect', (connection: socket.LocalSocketConnection) => { 5384 connection.close().then(() => { 5385 console.log('close success'); 5386 }).catch((err: Object) => { 5387 console.error('close fail: ' + JSON.stringify(err)); 5388 }); 5389}); 5390``` 5391 5392### getLocalAddress<sup>12+</sup> 5393 5394getLocalAddress(): Promise\<string\> 5395 5396获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。 5397 5398**系统能力**:SystemCapability.Communication.NetStack 5399 5400**返回值:** 5401 5402| 类型 | 说明 | 5403| -------------- | --------------------------------------------------- | 5404| Promise\<string\> | 以Promise形式返回获取本地socket地址的结果。 | 5405 5406**错误码:** 5407 5408| 错误码ID | 错误信息 | 5409| -------- | ------------------------------------------- | 5410| 2300002 | System internal error. | 5411| 2301009 | Bad file descriptor. | 5412| 2303188 | Socket operation on non-socket. | 5413 5414**示例:** 5415 5416**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 5417 5418```ts 5419import { common } from '@kit.AbilityKit'; 5420 5421let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5422let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5423let sandboxPath: string = context.filesDir + '/testSocket'; 5424let localAddr: socket.LocalAddress = { 5425 address: sandboxPath 5426} 5427server.listen(localAddr).then(() => { 5428 console.info('listen success'); 5429 let client: socket.LocalSocket = socket.constructLocalSocketInstance(); 5430 let connectOpt: socket.LocalConnectOptions = { 5431 address: localAddr, 5432 timeout: 6000 5433 } 5434 client.connect(connectOpt).then(() => { 5435 server.getLocalAddress().then((localPath: string) => { 5436 console.info("success, localPath is" + JSON.stringify(localPath)); 5437 }).catch((err: BusinessError) => { 5438 console.error("FAIL " + JSON.stringify(err)); 5439 }) 5440 }).catch((err: Object) => { 5441 console.error('connect fail: ' + JSON.stringify(err)); 5442 }); 5443}); 5444``` 5445 5446### on('message')<sup>11+</sup> 5447 5448on(type: 'message', callback: Callback\<LocalSocketMessageInfo\>): void 5449 5450订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5451 5452**系统能力**:SystemCapability.Communication.NetStack 5453 5454**参数:** 5455 5456| 参数名 | 类型 | 必填 | 说明 | 5457| -------- | ----------------------------------------------- | ---- | --------------------------------------- | 5458| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5459| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收到的来自客户端的消息。 | 5460 5461**错误码:** 5462 5463| 错误码ID | 错误信息 | 5464| -------- | ---------------- | 5465| 401 | Parameter error. | 5466 5467**示例:** 5468 5469**注意:** 关于示例代码中this的说明:在本文档的示例中,通过this.context来获取UIAbilityContext,其中this代表继承自UIAbility的UIAbility实例。如需在页面中使用UIAbilityContext提供的能力,[请参见获取UIAbility的上下文消息](http://gitee.com/openharmony/docs/blob/222f8d93e6f0056409aac096e041df3fdd8ae5ec/zh-cn/application-dev/application-models/uiability-usage.md)。 5470 5471```ts 5472import { socket } from '@kit.NetworkKit'; 5473import { common } from '@kit.AbilityKit'; 5474 5475let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5476let context: common.UIAbilityContext = this.getUIContext().getHostContext() as common.UIAbilityContext; 5477let sandboxPath: string = context.filesDir + '/testSocket'; 5478let listenAddr: socket.LocalAddress = { 5479 address: sandboxPath 5480} 5481server.listen(listenAddr).then(() => { 5482 console.log("listen success"); 5483}).catch((err: Object) => { 5484 console.error("listen fail: " + JSON.stringify(err)); 5485}); 5486server.on('connect', (connection: socket.LocalSocketConnection) => { 5487 connection.on('message', (value: socket.LocalSocketMessageInfo) => { 5488 const uintArray = new Uint8Array(value.message); 5489 let messageView = ''; 5490 for (let i = 0; i < uintArray.length; i++) { 5491 messageView += String.fromCharCode(uintArray[i]); 5492 } 5493 console.log('total: ' + JSON.stringify(value)); 5494 console.log('message infomation: ' + messageView); 5495 }); 5496}); 5497``` 5498 5499### off('message')<sup>11+</sup> 5500 5501off(type: 'message', callback?: Callback\<LocalSocketMessageInfo\>): void 5502 5503取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 5504 5505**系统能力**:SystemCapability.Communication.NetStack 5506 5507**参数:** 5508 5509| 参数名 | 类型 | 必填 | 说明 | 5510| -------- | ----------------------------------------------- | ---- | ----------------------------------- | 5511| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 5512| callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on的一个callback取消注册。 | 5513 5514**错误码:** 5515 5516| 错误码ID | 错误信息 | 5517| -------- | ---------------- | 5518| 401 | Parameter error. | 5519 5520**示例:** 5521 5522```ts 5523import { socket } from '@kit.NetworkKit'; 5524 5525let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5526let callback = (value: socket.LocalSocketMessageInfo) => { 5527 const uintArray = new Uint8Array(value.message) 5528 let messageView = ''; 5529 for (let i = 0; i < uintArray.length; i++) { 5530 messageView += String.fromCharCode(uintArray[i]); 5531 } 5532 console.log('total: ' + JSON.stringify(value)); 5533 console.log('message infomation: ' + messageView); 5534} 5535server.on('connect', (connection: socket.LocalSocketConnection) => { 5536 connection.on('message', callback); 5537 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5538 connection.off('message', callback); 5539 connection.off('message'); 5540}); 5541``` 5542 5543### on('close')<sup>11+</sup> 5544 5545on(type: 'close', callback: Callback\<void\>): void 5546 5547订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5548 5549**系统能力**:SystemCapability.Communication.NetStack 5550 5551**参数:** 5552 5553| 参数名 | 类型 | 必填 | 说明 | 5554| -------- | ---------------- | ---- | ----------------------------------- | 5555| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 5556| callback | Callback\<void\> | 是 | 以callback的形式异步返回会话关闭的结果。 | 5557 5558**错误码:** 5559 5560| 错误码ID | 错误信息 | 5561| -------- | ---------------- | 5562| 401 | Parameter error. | 5563 5564**示例:** 5565 5566```ts 5567import { socket } from '@kit.NetworkKit'; 5568 5569let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5570server.on('connect', (connection: socket.LocalSocketConnection) => { 5571 connection.on('close', () => { 5572 console.log("on close success") 5573 }); 5574}); 5575``` 5576 5577### off('close')<sup>11+</sup> 5578 5579off(type: 'close', callback?: Callback\<void\>): void 5580 5581取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 5582 5583**系统能力**:SystemCapability.Communication.NetStack 5584 5585**参数:** 5586 5587| 参数名 | 类型 | 必填 | 说明 | 5588| -------- | ---------------- | ---- | ----------------------------------- | 5589| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 5590| callback | Callback\<void\> | 否 | 指定传入on的一个callback取消订阅。 | 5591 5592**错误码:** 5593 5594| 错误码ID | 错误信息 | 5595| -------- | ---------------- | 5596| 401 | Parameter error. | 5597 5598**示例:** 5599 5600```ts 5601import { socket } from '@kit.NetworkKit'; 5602 5603let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5604let callback = () => { 5605 console.log("on close success"); 5606} 5607server.on('connect', (connection: socket.LocalSocketConnection) => { 5608 connection.on('close', callback); 5609 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5610 connection.off('close', callback); 5611 connection.off('close'); 5612}); 5613``` 5614 5615### on('error')<sup>11+</sup> 5616 5617on(type: 'error', callback: ErrorCallback): void 5618 5619订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 5620 5621**系统能力**:SystemCapability.Communication.NetStack 5622 5623**参数:** 5624 5625| 参数名 | 类型 | 必填 | 说明 | 5626| -------- | ------------- | ---- | ------------------------------------ | 5627| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5628| callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| 5629 5630**错误码:** 5631 5632| 错误码ID | 错误信息 | 5633| -------- | ---------------- | 5634| 401 | Parameter error. | 5635 5636**示例:** 5637 5638```ts 5639import { socket } from '@kit.NetworkKit'; 5640 5641let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5642server.on('connect', (connection: socket.LocalSocketConnection) => { 5643 connection.on('error', (err: Object) => { 5644 console.error("on error, err:" + JSON.stringify(err)) 5645 }); 5646}); 5647``` 5648 5649### off('error')<sup>11+</sup> 5650 5651off(type: 'error', callback?: ErrorCallback): void 5652 5653取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 5654 5655**系统能力**:SystemCapability.Communication.NetStack 5656 5657**参数:** 5658 5659| 参数名 | 类型 | 必填 | 说明 | 5660| -------- | ------------- | ---- | ------------------------------------ | 5661| type | string | 是 | 订阅的事件类型。'error':error事件。 | 5662| callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | 5663 5664**错误码:** 5665 5666| 错误码ID | 错误信息 | 5667| -------- | ---------------- | 5668| 401 | Parameter error. | 5669 5670**示例:** 5671 5672```ts 5673import { socket } from '@kit.NetworkKit'; 5674 5675let callback = (err: Object) => { 5676 console.error("on error, err: " + JSON.stringify(err)); 5677} 5678let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); 5679server.on('connect', (connection: socket.LocalSocketConnection) => { 5680 connection.on('error', callback); 5681 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 5682 connection.off('error', callback); 5683 connection.off('error'); 5684}); 5685``` 5686 5687## LocalSocket 错误码说明 5688 5689LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。 5690 5691错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) 5692 5693## socket.constructTLSSocketInstance<sup>9+</sup> 5694 5695constructTLSSocketInstance(): TLSSocket 5696 5697创建并返回一个TLSSocket对象。 5698 5699**系统能力**:SystemCapability.Communication.NetStack 5700 5701**返回值:** 5702 5703| 类型 | 说明 | 5704| --------------------------------- | ---------------------- | 5705| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 5706 5707**示例:** 5708 5709```ts 5710import { socket } from '@kit.NetworkKit'; 5711 5712let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5713``` 5714 5715## socket.constructTLSSocketInstance<sup>12+</sup> 5716 5717constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket 5718 5719将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。 5720 5721> **说明:** 5722> 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。 5723 5724**系统能力**:SystemCapability.Communication.NetStack 5725 5726**参数:** 5727 5728| 参数名 | 类型 | 必填 | 说明 | 5729|-----------|----| ---- |------------------------| 5730| tcpSocket | [TCPSocket](#tcpsocket) | 是 | 需要进行升级的TCPSocket对象。 | 5731 5732**返回值:** 5733 5734| 类型 | 说明 | 5735| --------------------------------- | ---------------------- | 5736| [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | 5737 5738**错误码:** 5739 5740| 错误码ID | 错误信息 | 5741|---------|----------------------------------| 5742| 401 | Parameter error. | 5743| 2300002 | System internal error. | 5744| 2303601 | Invalid socket FD. | 5745| 2303602 | Socket is not connected. | 5746 5747**示例:** 5748 5749```ts 5750import { socket } from '@kit.NetworkKit'; 5751import { BusinessError } from '@kit.BasicServicesKit'; 5752 5753let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); 5754let connAddress: socket.TCPConnectOptions = { 5755 address: '192.168.xx.xxx', 5756 port: 8080 5757}; 5758let tcpconnectoptions: socket.TCPConnectOptions = { 5759 address: connAddress, 5760 timeout: 6000 5761} 5762 5763tcp.connect(tcpconnectoptions, (err: BusinessError) => { 5764 if (err) { 5765 console.log('connect fail'); 5766 return; 5767 } 5768 console.log('connect success'); 5769 5770 // 确保TCPSocket已连接后,再升级TLSSocket 5771 let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp); 5772}) 5773``` 5774 5775## TLSSocket<sup>9+</sup> 5776 5777TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。 5778 5779### bind<sup>9+</sup> 5780 5781bind(address: NetAddress, callback: AsyncCallback\<void\>): void 5782 5783绑定IP地址和端口。使用callback方法作为异步方法。 5784 5785> **说明:** 5786> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 5787 5788**需要权限**:ohos.permission.INTERNET 5789 5790**系统能力**:SystemCapability.Communication.NetStack 5791 5792**参数:** 5793 5794| 参数名 | 类型 | 必填 | 说明 | 5795| -------- | ---------------------------------- | ---- | ------------------------------------------------------ | 5796| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 5797| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。| 5798 5799**错误码:** 5800 5801| 错误码ID | 错误信息 | 5802| ------- | ----------------------- | 5803| 401 | Parameter error. | 5804| 201 | Permission denied. | 5805| 2303198 | Address already in use. | 5806| 2300002 | System internal error. | 5807 5808**示例:** 5809 5810```ts 5811import { socket } from '@kit.NetworkKit'; 5812import { BusinessError } from '@kit.BasicServicesKit'; 5813 5814let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5815let bindAddr: socket.NetAddress = { 5816 address: '192.168.xx.xxx', 5817 port: 8080 5818} 5819tls.bind(bindAddr, (err: BusinessError) => { 5820 if (err) { 5821 console.log('bind fail'); 5822 return; 5823 } 5824 console.log('bind success'); 5825}); 5826``` 5827 5828### bind<sup>9+</sup> 5829 5830bind(address: NetAddress): Promise\<void\> 5831 5832绑定IP地址和端口。使用Promise方法作为异步方法。 5833 5834> **说明:** 5835> 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 5836 5837**需要权限**:ohos.permission.INTERNET 5838 5839**系统能力**:SystemCapability.Communication.NetStack 5840 5841**参数:** 5842 5843| 参数名 | 类型 | 必填 | 说明 | 5844| ------- | ---------------------------------- | ---- | ------------------------------------------------------ | 5845| address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | 5846 5847**返回值:** 5848 5849| 类型 | 说明 | 5850| -------------- | ------------------------------------------------------- | 5851| Promise\<void\> | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 | 5852 5853**错误码:** 5854 5855| 错误码ID | 错误信息 | 5856| ------- | ----------------------- | 5857| 401 | Parameter error. | 5858| 201 | Permission denied. | 5859| 2303198 | Address already in use. | 5860| 2300002 | System internal error. | 5861 5862**示例:** 5863 5864```ts 5865import { socket } from '@kit.NetworkKit'; 5866import { BusinessError } from '@kit.BasicServicesKit'; 5867 5868let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5869let bindAddr: socket.NetAddress = { 5870 address: '192.168.xx.xxx', 5871 port: 8080 5872} 5873tls.bind(bindAddr).then(() => { 5874 console.log('bind success'); 5875}).catch((err: BusinessError) => { 5876 console.log('bind fail'); 5877}); 5878``` 5879 5880### getState<sup>9+</sup> 5881 5882getState(callback: AsyncCallback\<SocketStateBase\>): void 5883 5884在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。 5885 5886**系统能力**:SystemCapability.Communication.NetStack 5887 5888**参数:** 5889 5890| 参数名 | 类型 | 必填 | 说明 | 5891| -------- | ------------------------------------------------------ | ---- | ---------- | 5892| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 | 5893 5894**错误码:** 5895 5896| 错误码ID | 错误信息 | 5897| ------- | ------------------------------ | 5898| 2303188 | Socket operation on non-socket.| 5899| 2300002 | System internal error. | 5900 5901**示例:** 5902 5903```ts 5904import { socket } from '@kit.NetworkKit'; 5905import { BusinessError } from '@kit.BasicServicesKit'; 5906 5907let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5908let bindAddr: socket.NetAddress = { 5909 address: '192.168.xx.xxx', 5910 port: 8080 5911} 5912tls.bind(bindAddr, (err: BusinessError) => { 5913 if (err) { 5914 console.log('bind fail'); 5915 return; 5916 } 5917 console.log('bind success'); 5918}); 5919tls.getState((err: BusinessError, data: socket.SocketStateBase) => { 5920 if (err) { 5921 console.log('getState fail'); 5922 return; 5923 } 5924 console.log('getState success:' + JSON.stringify(data)); 5925}); 5926``` 5927 5928### getState<sup>9+</sup> 5929 5930getState(): Promise\<SocketStateBase\> 5931 5932在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。 5933 5934**系统能力**:SystemCapability.Communication.NetStack 5935 5936**返回值:** 5937 5938| 类型 | 说明 | 5939| ----------------------------------------------- | ----------------------------------------- | 5940| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。| 5941 5942**错误码:** 5943 5944| 错误码ID | 错误信息 | 5945| ------- | ------------------------------ | 5946| 2303188 | Socket operation on non-socket.| 5947| 2300002 | System internal error. | 5948 5949**示例:** 5950 5951```ts 5952import { socket } from '@kit.NetworkKit'; 5953import { BusinessError } from '@kit.BasicServicesKit'; 5954 5955let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 5956let bindAddr: socket.NetAddress = { 5957 address: '192.168.xx.xxx', 5958 port: 8080 5959} 5960tls.bind(bindAddr, (err: BusinessError) => { 5961 if (err) { 5962 console.log('bind fail'); 5963 return; 5964 } 5965 console.log('bind success'); 5966}); 5967tls.getState().then(() => { 5968 console.log('getState success'); 5969}).catch((err: BusinessError) => { 5970 console.log('getState fail'); 5971}); 5972``` 5973 5974### setExtraOptions<sup>9+</sup> 5975 5976setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 5977 5978在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 5979 5980**系统能力**:SystemCapability.Communication.NetStack 5981 5982**参数:** 5983 5984| 参数名 | 类型 | 必填 | 说明 | 5985| -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 5986| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 5987| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。| 5988 5989**错误码:** 5990 5991| 错误码ID | 错误信息 | 5992| ------- | ----------------------------- | 5993| 401 | Parameter error. | 5994| 2303188 | Socket operation on non-socket.| 5995| 2300002 | System internal error. | 5996 5997**示例:** 5998 5999```ts 6000import { socket } from '@kit.NetworkKit'; 6001import { BusinessError } from '@kit.BasicServicesKit'; 6002 6003let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6004let bindAddr: socket.NetAddress = { 6005 address: '192.168.xx.xxx', 6006 port: 8080 6007} 6008tls.bind(bindAddr, (err: BusinessError) => { 6009 if (err) { 6010 console.log('bind fail'); 6011 return; 6012 } 6013 console.log('bind success'); 6014}); 6015 6016interface SocketLinger { 6017 on: boolean; 6018 linger: number; 6019} 6020 6021let tcpExtraOptions: socket.TCPExtraOptions = { 6022 keepAlive: true, 6023 OOBInline: true, 6024 TCPNoDelay: true, 6025 socketLinger: { on: true, linger: 10 } as SocketLinger, 6026 receiveBufferSize: 1000, 6027 sendBufferSize: 1000, 6028 reuseAddress: true, 6029 socketTimeout: 3000 6030} 6031tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 6032 if (err) { 6033 console.log('setExtraOptions fail'); 6034 return; 6035 } 6036 console.log('setExtraOptions success'); 6037}); 6038``` 6039 6040### setExtraOptions<sup>9+</sup> 6041 6042setExtraOptions(options: TCPExtraOptions): Promise\<void\> 6043 6044在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 6045 6046**系统能力**:SystemCapability.Communication.NetStack 6047 6048**参数:** 6049 6050| 参数名 | 类型 | 必填 | 说明 | 6051| ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | 6052| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | 6053 6054**返回值:** 6055 6056| 类型 | 说明 | 6057| -------------- | --------------------------------------------------- | 6058| Promise\<void\> | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 | 6059 6060**错误码:** 6061 6062| 错误码ID | 错误信息 | 6063| ------- | ------------------------------ | 6064| 401 | Parameter error. | 6065| 2303188 | Socket operation on non-socket.| 6066| 2300002 | System internal error. | 6067 6068**示例:** 6069 6070```ts 6071import { socket } from '@kit.NetworkKit'; 6072import { BusinessError } from '@kit.BasicServicesKit'; 6073 6074let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6075let bindAddr: socket.NetAddress = { 6076 address: '192.168.xx.xxx', 6077 port: 8080 6078} 6079tls.bind(bindAddr, (err: BusinessError) => { 6080 if (err) { 6081 console.log('bind fail'); 6082 return; 6083 } 6084 console.log('bind success'); 6085}); 6086 6087interface SocketLinger { 6088 on: boolean; 6089 linger: number; 6090} 6091 6092let tcpExtraOptions: socket.TCPExtraOptions = { 6093 keepAlive: true, 6094 OOBInline: true, 6095 TCPNoDelay: true, 6096 socketLinger: { on: true, linger: 10 } as SocketLinger, 6097 receiveBufferSize: 1000, 6098 sendBufferSize: 1000, 6099 reuseAddress: true, 6100 socketTimeout: 3000 6101} 6102tls.setExtraOptions(tcpExtraOptions).then(() => { 6103 console.log('setExtraOptions success'); 6104}).catch((err: BusinessError) => { 6105 console.log('setExtraOptions fail'); 6106}); 6107``` 6108 6109### on('message')<sup>9+</sup> 6110 6111on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 6112 6113订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 6114 6115**系统能力**:SystemCapability.Communication.NetStack 6116 6117**参数:** 6118 6119| 参数名 | 类型 | 必填 | 说明 | 6120| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 6121| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 6122| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 6123 6124**错误码:** 6125 6126| 错误码ID | 错误信息 | 6127| ------- | ------------------------------ | 6128| 401 | Parameter error. | 6129 6130**示例:** 6131 6132```ts 6133import { socket } from '@kit.NetworkKit'; 6134import { BusinessError } from '@kit.BasicServicesKit'; 6135 6136let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6137let messageView = ''; 6138tls.on('message', (value: socket.SocketMessageInfo) => { 6139 for (let i: number = 0; i < value.message.byteLength; i++) { 6140 let uint8Array = new Uint8Array(value.message) 6141 let messages = uint8Array[i] 6142 let message = String.fromCharCode(messages); 6143 messageView += message; 6144 } 6145 console.log('on message message: ' + JSON.stringify(messageView)); 6146 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 6147}); 6148``` 6149 6150### off('message')<sup>9+</sup> 6151 6152off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 6153 6154取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 6155 6156**系统能力**:SystemCapability.Communication.NetStack 6157 6158**参数:** 6159 6160| 参数名 | 类型 | 必填 | 说明 | 6161| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 6162| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 6163| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | 6164 6165**错误码:** 6166 6167| 错误码ID | 错误信息 | 6168| ------- | ------------------------------ | 6169| 401 | Parameter error. | 6170 6171**示例:** 6172 6173```ts 6174import { socket } from '@kit.NetworkKit'; 6175import { BusinessError } from '@kit.BasicServicesKit'; 6176 6177let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6178let messageView = ''; 6179let callback = (value: socket.SocketMessageInfo) => { 6180 for (let i: number = 0; i < value.message.byteLength; i++) { 6181 let uint8Array = new Uint8Array(value.message) 6182 let messages = uint8Array[i] 6183 let message = String.fromCharCode(messages); 6184 messageView += message; 6185 } 6186 console.log('on message message: ' + JSON.stringify(messageView)); 6187 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 6188} 6189tls.on('message', callback); 6190// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6191tls.off('message', callback); 6192``` 6193### on('connect' | 'close')<sup>9+</sup> 6194 6195on(type: 'connect' | 'close', callback: Callback\<void\>): void 6196 6197订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 6198 6199**系统能力**:SystemCapability.Communication.NetStack 6200 6201**参数:** 6202 6203| 参数名 | 类型 | 必填 | 说明 | 6204| -------- | ---------------- | ---- | ------------------------------------------------------------ | 6205| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 6206| callback | Callback\<void\> | 是 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 6207 6208**错误码:** 6209 6210| 错误码ID | 错误信息 | 6211| ------- | ------------------------------ | 6212| 401 | Parameter error. | 6213 6214**示例:** 6215 6216```ts 6217import { socket } from '@kit.NetworkKit'; 6218import { BusinessError } from '@kit.BasicServicesKit'; 6219 6220let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6221tls.on('connect', () => { 6222 console.log("on connect success") 6223}); 6224tls.on('close', () => { 6225 console.log("on close success") 6226}); 6227``` 6228 6229### off('connect' | 'close')<sup>9+</sup> 6230 6231off(type: 'connect' | 'close', callback?: Callback\<void\>): void 6232 6233取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 6234 6235**系统能力**:SystemCapability.Communication.NetStack 6236 6237**参数:** 6238 6239| 参数名 | 类型 | 必填 | 说明 | 6240| -------- | ---------------- | ---- | ------------------------------------------------------------ | 6241| type | string | 是 | 订阅的事件类型。<br />- 'connect':连接事件。<br />- 'close':关闭事件。 | 6242| callback | Callback\<void\> | 否 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | 6243 6244**错误码:** 6245 6246| 错误码ID | 错误信息 | 6247| ------- | ------------------------------ | 6248| 401 | Parameter error. | 6249 6250**示例:** 6251 6252```ts 6253import { socket } from '@kit.NetworkKit'; 6254import { BusinessError } from '@kit.BasicServicesKit'; 6255 6256let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6257let callback1 = () => { 6258 console.log("on connect success"); 6259} 6260tls.on('connect', callback1); 6261// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6262tls.off('connect', callback1); 6263tls.off('connect'); 6264let callback2 = () => { 6265 console.log("on close success"); 6266} 6267tls.on('close', callback2); 6268// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6269tls.off('close', callback2); 6270``` 6271 6272### on('error')<sup>9+</sup> 6273 6274on(type: 'error', callback: ErrorCallback): void 6275 6276订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 6277 6278**系统能力**:SystemCapability.Communication.NetStack 6279 6280**参数:** 6281 6282| 参数名 | 类型 | 必填 | 说明 | 6283| -------- | ------------- | ---- | ------------------------------------ | 6284| type | string | 是 | 订阅的事件类型。'error':error事件。 | 6285| callback | ErrorCallback | 是 | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。 | 6286 6287**错误码:** 6288 6289| 错误码ID | 错误信息 | 6290| ------- | ------------------------------ | 6291| 401 | Parameter error. | 6292 6293**示例:** 6294 6295```ts 6296import { socket } from '@kit.NetworkKit'; 6297import { BusinessError } from '@kit.BasicServicesKit'; 6298 6299let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6300tls.on('error', (err: BusinessError) => { 6301 console.log("on error, err:" + JSON.stringify(err)) 6302}); 6303``` 6304 6305### off('error')<sup>9+</sup> 6306 6307off(type: 'error', callback?: ErrorCallback): void 6308 6309取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 6310 6311**系统能力**:SystemCapability.Communication.NetStack 6312 6313**参数:** 6314 6315| 参数名 | 类型 | 必填 | 说明 | 6316| -------- | ------------- | ---- | ------------------------------------ | 6317| type | string | 是 | 订阅的事件类型。'error':error事件。 | 6318| callback | ErrorCallback | 否 | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。 | 6319 6320**错误码:** 6321 6322| 错误码ID | 错误信息 | 6323| ------- | ------------------------------ | 6324| 401 | Parameter error. | 6325 6326**示例:** 6327 6328```ts 6329import { socket } from '@kit.NetworkKit'; 6330import { BusinessError } from '@kit.BasicServicesKit'; 6331 6332let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6333let callback = (err: BusinessError) => { 6334 console.log("on error, err:" + JSON.stringify(err)); 6335} 6336tls.on('error', callback); 6337// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 6338tls.off('error', callback); 6339``` 6340 6341### connect<sup>9+</sup> 6342 6343connect(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 6344 6345在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。 6346 6347**系统能力**:SystemCapability.Communication.NetStack 6348 6349**参数:** 6350 6351| 参数名 | 类型 | 必填 | 说明 | 6352| -------- | ---------------------------------------| ----| --------------- | 6353| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocket连接所需要的参数。| 6354| callback | AsyncCallback\<void\> | 是 | 回调函数,成功无返回,失败返回错误码、错误信息。| 6355 6356**错误码:** 6357 6358| 错误码ID | 错误信息 | 6359| ------- | -------------------------------------------- | 6360| 401 | Parameter error. | 6361| 2303104 | Interrupted system call. | 6362| 2303109 | Bad file number. | 6363| 2303111 | Resource temporarily unavailable. Try again. | 6364| 2303188 | Socket operation on non-socket. | 6365| 2303191 | Incorrect socket protocol type. | 6366| 2303198 | Address already in use. | 6367| 2303199 | Cannot assign requested address. | 6368| 2303210 | Connection timed out. | 6369| 2303501 | SSL is null. | 6370| 2303502 | An error occurred when reading data on the TLS socket.| 6371| 2303503 | An error occurred when writing data on the TLS socket.| 6372| 2303505 | An error occurred in the TLS system call. | 6373| 2303506 | Failed to close the TLS connection. | 6374| 2300002 | System internal error. | 6375| 2301206 | Socks5 failed to connect to the proxy server. | 6376| 2301207 | Socks5 username or password is invalid. | 6377| 2301208 | Socks5 failed to connect to the remote server. | 6378| 2301209 | Socks5 failed to negotiate the authentication method. | 6379| 2301210 | Socks5 failed to send the message. | 6380| 2301211 | Socks5 failed to receive the message. | 6381| 2301212 | Socks5 serialization error. | 6382| 2301213 | Socks5 deserialization error. | 6383 6384**示例:** 6385 6386```ts 6387import { socket } from '@kit.NetworkKit'; 6388import { BusinessError } from '@kit.BasicServicesKit'; 6389 6390let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 6391let bindAddr: socket.NetAddress = { 6392 address: '0.0.0.0', 6393} 6394tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6395 if (err) { 6396 console.log('bind fail'); 6397 return; 6398 } 6399 console.log('bind success'); 6400}); 6401let twoWayNetAddr: socket.NetAddress = { 6402 address: '192.168.xx.xxx', 6403 port: 8080 6404} 6405let twoWaySecureOptions: socket.TLSSecureOptions = { 6406 key: "xxxx", 6407 cert: "xxxx", 6408 ca: ["xxxx"], 6409 password: "xxxx", 6410 protocols: socket.Protocol.TLSv12, 6411 useRemoteCipherPrefer: true, 6412 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6413 cipherSuite: "AES256-SHA256" 6414} 6415let tlsConnectOptions: socket.TLSConnectOptions = { 6416 address: twoWayNetAddr, 6417 secureOptions: twoWaySecureOptions, 6418 ALPNProtocols: ["spdy/1", "http/1.1"] 6419} 6420 6421tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => { 6422 console.error("connect callback error" + err); 6423}); 6424 6425let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 6426tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6427 if (err) { 6428 console.log('bind fail'); 6429 return; 6430 } 6431 console.log('bind success'); 6432}); 6433let oneWayNetAddr: socket.NetAddress = { 6434 address: '192.168.xx.xxx', 6435 port: 8080 6436} 6437let oneWaySecureOptions: socket.TLSSecureOptions = { 6438 ca: ["xxxx", "xxxx"], 6439 cipherSuite: "AES256-SHA256" 6440} 6441let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6442 address: oneWayNetAddr, 6443 secureOptions: oneWaySecureOptions 6444} 6445tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => { 6446 console.error("connect callback error" + err); 6447}); 6448``` 6449 6450**示例(设置socket代理):** 6451 6452```ts 6453import { socket } from '@kit.NetworkKit'; 6454import { BusinessError } from '@kit.BasicServicesKit'; 6455 6456let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 双向认证 6457let bindAddr: socket.NetAddress = { 6458 address: '0.0.0.0', 6459} 6460tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6461 if (err) { 6462 console.log('bind fail'); 6463 return; 6464 } 6465 console.log('bind success'); 6466}); 6467let twoWayNetAddr: socket.NetAddress = { 6468 address: '192.168.xx.xxx', 6469 port: 8080 6470} 6471let socks5Server: socket.NetAddress = { 6472 address: '192.168.xx.xxx', 6473 port: 8080 6474} 6475let twoWaySecureOptions: socket.TLSSecureOptions = { 6476 key: "xxxx", 6477 cert: "xxxx", 6478 ca: ["xxxx"], 6479 password: "xxxx", 6480 protocols: socket.Protocol.TLSv12, 6481 useRemoteCipherPrefer: true, 6482 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6483 cipherSuite: "AES256-SHA256" 6484} 6485let tlsConnectOptions: socket.TLSConnectOptions = { 6486 address: twoWayNetAddr, 6487 secureOptions: twoWaySecureOptions, 6488 ALPNProtocols: ["spdy/1", "http/1.1"], 6489 proxy: socket.ProxyOptions = { 6490 type : 1, 6491 address: socks5Server, 6492 username: "xxx", 6493 password: "xxx" 6494 } 6495} 6496 6497tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => { 6498 console.error("connect callback error" + err); 6499}); 6500 6501let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证 6502tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6503 if (err) { 6504 console.log('bind fail'); 6505 return; 6506 } 6507 console.log('bind success'); 6508}); 6509let oneWayNetAddr: socket.NetAddress = { 6510 address: '192.168.xx.xxx', 6511 port: 8080 6512} 6513let oneWaySecureOptions: socket.TLSSecureOptions = { 6514 ca: ["xxxx", "xxxx"], 6515 cipherSuite: "AES256-SHA256" 6516} 6517let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6518 address: oneWayNetAddr, 6519 secureOptions: oneWaySecureOptions, 6520 proxy: socket.ProxyOptions = { 6521 type : 1, 6522 address: socks5Server, 6523 username: "xxx", 6524 password: "xxx" 6525 } 6526} 6527tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => { 6528 console.error("connect callback error" + err); 6529}); 6530``` 6531 6532### connect<sup>9+</sup> 6533 6534connect(options: TLSConnectOptions): Promise\<void\> 6535 6536在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca在API11及之前的版本为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾,自API12开始,为非必填项。 6537 6538**系统能力**:SystemCapability.Communication.NetStack 6539 6540**参数:** 6541 6542| 参数名 | 类型 | 必填 | 说明 | 6543| -------- | --------------------------------------| ----| --------------- | 6544| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。| 6545 6546**返回值:** 6547 6548| 类型 | 说明 | 6549| ------------------------------------------- | ----------------------------- | 6550| Promise\<void\> | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。| 6551 6552**错误码:** 6553 6554| 错误码ID | 错误信息 | 6555| ------- | -------------------------------------------- | 6556| 401 | Parameter error. | 6557| 2303104 | Interrupted system call. | 6558| 2303109 | Bad file number. | 6559| 2303111 | Resource temporarily unavailable. Try again. | 6560| 2303188 | Socket operation on non-socket. | 6561| 2303191 | Incorrect socket protocol type. | 6562| 2303198 | Address already in use. | 6563| 2303199 | Cannot assign requested address. | 6564| 2303210 | Connection timed out. | 6565| 2303501 | SSL is null. | 6566| 2303502 | An error occurred when reading data on the TLS socket.| 6567| 2303503 | An error occurred when writing data on the TLS socket.| 6568| 2303505 | An error occurred in the TLS system call. | 6569| 2303506 | Failed to close the TLS connection. | 6570| 2300002 | System internal error. | 6571| 2301206 | Socks5 failed to connect to the proxy server. | 6572| 2301207 | Socks5 username or password is invalid. | 6573| 2301208 | Socks5 failed to connect to the remote server. | 6574| 2301209 | Socks5 failed to negotiate the authentication method. | 6575| 2301210 | Socks5 failed to send the message. | 6576| 2301211 | Socks5 failed to receive the message. | 6577| 2301212 | Socks5 serialization error. | 6578| 2301213 | Socks5 deserialization error. | 6579 6580**示例:** 6581 6582```ts 6583import { socket } from '@kit.NetworkKit'; 6584import { BusinessError } from '@kit.BasicServicesKit'; 6585 6586let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication 6587let bindAddr: socket.NetAddress = { 6588 address: '0.0.0.0', 6589} 6590tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6591 if (err) { 6592 console.log('bind fail'); 6593 return; 6594 } 6595 console.log('bind success'); 6596}); 6597let twoWayNetAddr: socket.NetAddress = { 6598 address: '192.168.xx.xxx', 6599 port: 8080 6600} 6601let twoWaySecureOptions: socket.TLSSecureOptions = { 6602 key: "xxxx", 6603 cert: "xxxx", 6604 ca: ["xxxx"], 6605 password: "xxxx", 6606 protocols: socket.Protocol.TLSv12, 6607 useRemoteCipherPrefer: true, 6608 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6609 cipherSuite: "AES256-SHA256" 6610} 6611let tlsConnectOptions: socket.TLSConnectOptions = { 6612 address: twoWayNetAddr, 6613 secureOptions: twoWaySecureOptions, 6614 ALPNProtocols: ["spdy/1", "http/1.1"] 6615} 6616 6617tlsTwoWay.connect(tlsConnectOptions).then(() => { 6618 console.log("connect successfully"); 6619}).catch((err: BusinessError) => { 6620 console.log("connect failed " + JSON.stringify(err)); 6621}); 6622 6623let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication 6624tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6625 if (err) { 6626 console.log('bind fail'); 6627 return; 6628 } 6629 console.log('bind success'); 6630}); 6631let oneWayNetAddr: socket.NetAddress = { 6632 address: '192.168.xx.xxx', 6633 port: 8080 6634} 6635let oneWaySecureOptions: socket.TLSSecureOptions = { 6636 ca: ["xxxx", "xxxx"], 6637 cipherSuite: "AES256-SHA256" 6638} 6639let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6640 address: oneWayNetAddr, 6641 secureOptions: oneWaySecureOptions 6642} 6643tlsOneWay.connect(tlsOneWayConnectOptions).then(() => { 6644 console.log("connect successfully"); 6645}).catch((err: BusinessError) => { 6646 console.log("connect failed " + JSON.stringify(err)); 6647}); 6648``` 6649 6650**示例(设置socket代理):** 6651 6652```ts 6653import { socket } from '@kit.NetworkKit'; 6654import { BusinessError } from '@kit.BasicServicesKit'; 6655 6656let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 双向认证 6657let bindAddr: socket.NetAddress = { 6658 address: '0.0.0.0', 6659} 6660tlsTwoWay.bind(bindAddr, (err: BusinessError) => { 6661 if (err) { 6662 console.log('bind fail'); 6663 return; 6664 } 6665 console.log('bind success'); 6666}); 6667let twoWayNetAddr: socket.NetAddress = { 6668 address: '192.168.xx.xxx', 6669 port: 8080 6670} 6671let socks5Server: socket.NetAddress = { 6672 address: '192.168.xx.xxx', 6673 port: 8080 6674} 6675let twoWaySecureOptions: socket.TLSSecureOptions = { 6676 key: "xxxx", 6677 cert: "xxxx", 6678 ca: ["xxxx"], 6679 password: "xxxx", 6680 protocols: socket.Protocol.TLSv12, 6681 useRemoteCipherPrefer: true, 6682 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 6683 cipherSuite: "AES256-SHA256" 6684} 6685let tlsConnectOptions: socket.TLSConnectOptions = { 6686 address: twoWayNetAddr, 6687 secureOptions: twoWaySecureOptions, 6688 ALPNProtocols: ["spdy/1", "http/1.1"], 6689 proxy: socket.ProxyOptions = { 6690 type : 1, 6691 address: socks5Server, 6692 username: "xxx", 6693 password: "xxx" 6694 } 6695} 6696 6697tlsTwoWay.connect(tlsConnectOptions).then(() => { 6698 console.log("connect successfully"); 6699}).catch((err: BusinessError) => { 6700 console.log("connect failed " + JSON.stringify(err)); 6701}); 6702 6703let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // 单向认证 6704tlsOneWay.bind(bindAddr, (err: BusinessError) => { 6705 if (err) { 6706 console.log('bind fail'); 6707 return; 6708 } 6709 console.log('bind success'); 6710}); 6711let oneWayNetAddr: socket.NetAddress = { 6712 address: '192.168.xx.xxx', 6713 port: 8080 6714} 6715let oneWaySecureOptions: socket.TLSSecureOptions = { 6716 ca: ["xxxx", "xxxx"], 6717 cipherSuite: "AES256-SHA256" 6718} 6719let tlsOneWayConnectOptions: socket.TLSConnectOptions = { 6720 address: oneWayNetAddr, 6721 secureOptions: oneWaySecureOptions, 6722 proxy: socket.ProxyOptions = { 6723 type : 1, 6724 address: socks5Server, 6725 username: "xxx", 6726 password: "xxx" 6727 } 6728} 6729tlsOneWay.connect(tlsOneWayConnectOptions).then(() => { 6730 console.log("connect successfully"); 6731}).catch((err: BusinessError) => { 6732 console.log("connect failed " + JSON.stringify(err)); 6733}); 6734``` 6735 6736### getRemoteAddress<sup>9+</sup> 6737 6738getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 6739 6740在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 6741 6742**系统能力**:SystemCapability.Communication.NetStack 6743 6744**参数:** 6745 6746| 参数名 | 类型 | 必填 | 说明 | 6747| -------- | ------------------------------------------------- | ---- | ---------- | 6748| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 6749 6750**错误码:** 6751 6752| 错误码ID | 错误信息 | 6753| ------- | ----------------------------- | 6754| 2303188 | Socket operation on non-socket.| 6755| 2300002 | System internal error. | 6756 6757**示例:** 6758 6759```ts 6760import { socket } from '@kit.NetworkKit'; 6761import { BusinessError } from '@kit.BasicServicesKit'; 6762 6763let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6764tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 6765 if (err) { 6766 console.log('getRemoteAddress fail'); 6767 return; 6768 } 6769 console.log('getRemoteAddress success:' + JSON.stringify(data)); 6770}); 6771``` 6772 6773### getRemoteAddress<sup>9+</sup> 6774 6775getRemoteAddress(): Promise\<NetAddress\> 6776 6777在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 6778 6779**系统能力**:SystemCapability.Communication.NetStack 6780 6781**返回值:** 6782 6783| 类型 | 说明 | 6784| ------------------------------------------ | ------------------------------------------ | 6785| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 6786 6787**错误码:** 6788 6789| 错误码ID | 错误信息 | 6790| ------- | ------------------------------ | 6791| 2303188 | Socket operation on non-socket.| 6792| 2300002 | System internal error. | 6793 6794**示例:** 6795 6796```ts 6797import { socket } from '@kit.NetworkKit'; 6798import { BusinessError } from '@kit.BasicServicesKit'; 6799 6800let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6801tls.getRemoteAddress().then(() => { 6802 console.log('getRemoteAddress success'); 6803}).catch((err: BusinessError) => { 6804 console.log('getRemoteAddress fail'); 6805}); 6806``` 6807 6808### getCertificate<sup>9+</sup> 6809 6810getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 6811 6812在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。 6813 6814**系统能力**:SystemCapability.Communication.NetStack 6815 6816**参数:** 6817 6818| 参数名 | 类型 | 必填 | 说明 | 6819| -------- | ----------------------------------------| ---- | ---------------| 6820| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。| 6821 6822**错误码:** 6823 6824| 错误码ID | 错误信息 | 6825| ------- | ------------------------------ | 6826| 2303501 | SSL is null. | 6827| 2303504 | An error occurred when verifying the X.509 certificate.| 6828| 2300002 | System internal error. | 6829 6830**示例:** 6831 6832```ts 6833import { socket } from '@kit.NetworkKit'; 6834import { BusinessError } from '@kit.BasicServicesKit'; 6835 6836let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6837tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 6838 if (err) { 6839 console.log("getCertificate callback error = " + err); 6840 } else { 6841 console.log("getCertificate callback = " + data); 6842 } 6843}); 6844``` 6845 6846### getCertificate<sup>9+</sup> 6847 6848getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 6849 6850在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。 6851 6852**系统能力**:SystemCapability.Communication.NetStack 6853 6854**返回值:** 6855 6856| 类型 | 说明 | 6857| -------------- | -------------------- | 6858| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 6859 6860**错误码:** 6861 6862| 错误码ID | 错误信息 | 6863| ------- | ------------------------------ | 6864| 2303501 | SSL is null. | 6865| 2303504 | An error occurred when verifying the X.509 certificate.| 6866| 2300002 | System internal error. | 6867 6868**示例:** 6869 6870```ts 6871import { socket } from '@kit.NetworkKit'; 6872import { BusinessError } from '@kit.BasicServicesKit'; 6873import { util } from '@kit.ArkTS'; 6874 6875let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6876tls.getCertificate().then((data: socket.X509CertRawData) => { 6877 const decoder = util.TextDecoder.create(); 6878 const str = decoder.decodeToString(data.data); 6879 console.log("getCertificate: " + str); 6880}).catch((err: BusinessError) => { 6881 console.error("failed" + err); 6882}); 6883``` 6884 6885### getRemoteCertificate<sup>9+</sup> 6886 6887getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 6888 6889在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。 6890 6891**系统能力**:SystemCapability.Communication.NetStack 6892 6893**参数:** 6894 6895| 参数名 | 类型 | 必填 | 说明 | 6896| -------- | ----------------------------------------| ---- | ---------------| 6897| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 | 6898 6899**错误码:** 6900 6901| 错误码ID | 错误信息 | 6902| ------- | ------------------------------ | 6903| 2303501 | SSL is null. | 6904| 2300002 | System internal error. | 6905 6906**示例:** 6907 6908```ts 6909import { socket } from '@kit.NetworkKit'; 6910import { BusinessError } from '@kit.BasicServicesKit'; 6911import { util } from '@kit.ArkTS'; 6912 6913let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6914tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 6915 if (err) { 6916 console.log("getRemoteCertificate callback error = " + err); 6917 } else { 6918 const decoder = util.TextDecoder.create(); 6919 const str = decoder.decodeToString(data.data); 6920 console.log("getRemoteCertificate callback = " + str); 6921 } 6922}); 6923``` 6924 6925### getRemoteCertificate<sup>9+</sup> 6926 6927getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 6928 6929在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。 6930 6931**系统能力**:SystemCapability.Communication.NetStack 6932 6933**返回值:** 6934 6935| 类型 | 说明 | 6936| -------------- | -------------------- | 6937| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 | 6938 6939**错误码:** 6940 6941| 错误码ID | 错误信息 | 6942| ------- | ------------------------------ | 6943| 2303501 | SSL is null. | 6944| 2300002 | System internal error. | 6945 6946**示例:** 6947 6948```ts 6949import { socket } from '@kit.NetworkKit'; 6950import { BusinessError } from '@kit.BasicServicesKit'; 6951import { util } from '@kit.ArkTS'; 6952 6953let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6954tls.getRemoteCertificate().then((data: socket.X509CertRawData) => { 6955 const decoder = util.TextDecoder.create(); 6956 const str = decoder.decodeToString(data.data); 6957 console.log("getRemoteCertificate:" + str); 6958}).catch((err: BusinessError) => { 6959 console.error("failed" + err); 6960}); 6961``` 6962 6963### getProtocol<sup>9+</sup> 6964 6965getProtocol(callback: AsyncCallback\<string\>): void 6966 6967在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 6968 6969**系统能力**:SystemCapability.Communication.NetStack 6970 6971**参数:** 6972 6973| 参数名 | 类型 | 必填 | 说明 | 6974| -------- | ----------------------------------------| ---- | ---------------| 6975| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。| 6976 6977**错误码:** 6978 6979| 错误码ID | 错误信息 | 6980| ------- | ----------------------------- | 6981| 2303501 | SSL is null. | 6982| 2303505 | An error occurred in the TLS system call. | 6983| 2300002 | System internal error. | 6984 6985**示例:** 6986 6987```ts 6988import { socket } from '@kit.NetworkKit'; 6989import { BusinessError } from '@kit.BasicServicesKit'; 6990 6991let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 6992tls.getProtocol((err: BusinessError, data: string) => { 6993 if (err) { 6994 console.log("getProtocol callback error = " + err); 6995 } else { 6996 console.log("getProtocol callback = " + data); 6997 } 6998}); 6999``` 7000 7001### getProtocol<sup>9+</sup> 7002 7003getProtocol():Promise\<string\> 7004 7005在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 7006 7007**系统能力**:SystemCapability.Communication.NetStack 7008 7009**返回值:** 7010 7011| 类型 | 说明 | 7012| -------------- | -------------------- | 7013| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 7014 7015**错误码:** 7016 7017| 错误码ID | 错误信息 | 7018| ------- | ------------------------------ | 7019| 2303501 | SSL is null. | 7020| 2303505 | An error occurred in the TLS system call. | 7021| 2300002 | System internal error. | 7022 7023**示例:** 7024 7025```ts 7026import { socket } from '@kit.NetworkKit'; 7027import { BusinessError } from '@kit.BasicServicesKit'; 7028 7029let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7030tls.getProtocol().then((data: string) => { 7031 console.log(data); 7032}).catch((err: BusinessError) => { 7033 console.error("failed" + err); 7034}); 7035``` 7036 7037### getCipherSuite<sup>9+</sup> 7038 7039getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 7040 7041在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 7042 7043**系统能力**:SystemCapability.Communication.NetStack 7044 7045**参数:** 7046 7047| 参数名 | 类型 | 必填 | 说明 | 7048| -------- | ----------------------------------------| ---- | ---------------| 7049| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 7050 7051**错误码:** 7052 7053| 错误码ID | 错误信息 | 7054| ------- | ------------------------------ | 7055| 2303501 | SSL is null. | 7056| 2303502 | An error occurred when reading data on the TLS socket.| 7057| 2303505 | An error occurred in the TLS system call. | 7058| 2300002 | System internal error. | 7059 7060**示例:** 7061 7062```ts 7063import { socket } from '@kit.NetworkKit'; 7064import { BusinessError } from '@kit.BasicServicesKit'; 7065 7066let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7067tls.getCipherSuite((err: BusinessError, data: Array<string>) => { 7068 if (err) { 7069 console.log("getCipherSuite callback error = " + err); 7070 } else { 7071 console.log("getCipherSuite callback = " + data); 7072 } 7073}); 7074``` 7075 7076### getCipherSuite<sup>9+</sup> 7077 7078getCipherSuite(): Promise\<Array\<string\>\> 7079 7080在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 7081 7082**系统能力**:SystemCapability.Communication.NetStack 7083 7084**返回值:** 7085 7086| 类型 | 说明 | 7087| ---------------------- | --------------------- | 7088| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 7089 7090**错误码:** 7091 7092| 错误码ID | 错误信息 | 7093| ------- | ------------------------------ | 7094| 2303501 | SSL is null. | 7095| 2303502 | An error occurred when reading data on the TLS socket.| 7096| 2303505 | An error occurred in the TLS system call. | 7097| 2300002 | System internal error. | 7098 7099**示例:** 7100 7101```ts 7102import { socket } from '@kit.NetworkKit'; 7103import { BusinessError } from '@kit.BasicServicesKit'; 7104 7105let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7106tls.getCipherSuite().then((data: Array<string>) => { 7107 console.log('getCipherSuite success:' + JSON.stringify(data)); 7108}).catch((err: BusinessError) => { 7109 console.error("failed" + err); 7110}); 7111``` 7112 7113### getSignatureAlgorithms<sup>9+</sup> 7114 7115getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 7116 7117在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。 7118 7119**系统能力**:SystemCapability.Communication.NetStack 7120 7121**参数:** 7122 7123| 参数名 | 类型 | 必填 | 说明 | 7124| -------- | -------------------------------------| ---- | ---------------| 7125| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 7126 7127**错误码:** 7128 7129| 错误码ID | 错误信息 | 7130| ------- | ------------------------------ | 7131| 2303501 | SSL is null. | 7132| 2300002 | System internal error. | 7133 7134**示例:** 7135 7136```ts 7137import { socket } from '@kit.NetworkKit'; 7138import { BusinessError } from '@kit.BasicServicesKit'; 7139 7140let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7141tls.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 7142 if (err) { 7143 console.log("getSignatureAlgorithms callback error = " + err); 7144 } else { 7145 console.log("getSignatureAlgorithms callback = " + data); 7146 } 7147}); 7148``` 7149 7150### getSignatureAlgorithms<sup>9+</sup> 7151 7152getSignatureAlgorithms(): Promise\<Array\<string\>\> 7153 7154在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。 7155 7156**系统能力**:SystemCapability.Communication.NetStack 7157 7158**返回值:** 7159 7160| 类型 | 说明 | 7161| ---------------------- | -------------------- | 7162| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 7163 7164**错误码:** 7165 7166| 错误码ID | 错误信息 | 7167| ------- | ------------------------------ | 7168| 2303501 | SSL is null. | 7169| 2300002 | System internal error. | 7170 7171**示例:** 7172 7173```ts 7174import { socket } from '@kit.NetworkKit'; 7175import { BusinessError } from '@kit.BasicServicesKit'; 7176 7177let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7178tls.getSignatureAlgorithms().then((data: Array<string>) => { 7179 console.log("getSignatureAlgorithms success" + data); 7180}).catch((err: BusinessError) => { 7181 console.error("failed" + err); 7182}); 7183``` 7184 7185### getLocalAddress<sup>12+</sup> 7186 7187getLocalAddress(): Promise\<NetAddress\> 7188 7189获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。 7190 7191> **说明:** 7192> 在TLSSocketServer通信连接成功之后,才可调用此方法。 7193 7194**系统能力**:SystemCapability.Communication.NetStack 7195 7196**返回值:** 7197 7198| 类型 | 说明 | 7199| -------------- | --------------------------------------------------- | 7200| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 7201 7202**错误码:** 7203 7204| 错误码ID | 错误信息 | 7205| -------- | ------------------------------------------- | 7206| 2300002 | System internal error. | 7207| 2301009 | Bad file descriptor. | 7208| 2303188 | Socket operation on non-socket. | 7209 7210**示例:** 7211 7212```ts 7213import { socket } from '@kit.NetworkKit'; 7214import { BusinessError } from '@kit.BasicServicesKit'; 7215 7216let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7217tls.getLocalAddress().then((localAddress: socket.NetAddress) => { 7218 console.info("Get success: " + JSON.stringify(localAddress)); 7219}).catch((err: BusinessError) => { 7220 console.error("Get failed, error: " + JSON.stringify(err)); 7221}) 7222``` 7223 7224### send<sup>9+</sup> 7225 7226send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 7227 7228在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。 7229 7230**系统能力**:SystemCapability.Communication.NetStack 7231 7232**参数:** 7233 7234| 参数名 | 类型 | 必填 | 说明 | 7235| -------- | -----------------------------| ---- | ---------------| 7236| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 7237| callback | AsyncCallback\<void\> | 是 | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 | 7238 7239**错误码:** 7240 7241| 错误码ID | 错误信息 | 7242| ------- | -------------------------------------------- | 7243| 401 | Parameter error. | 7244| 2303501 | SSL is null. | 7245| 2303503 | An error occurred when writing data on the TLS socket.| 7246| 2303505 | An error occurred in the TLS system call. | 7247| 2303506 | Failed to close the TLS connection. | 7248| 2300002 | System internal error. | 7249 7250**示例:** 7251 7252```ts 7253import { socket } from '@kit.NetworkKit'; 7254import { BusinessError } from '@kit.BasicServicesKit'; 7255 7256let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7257tls.send("xxxx", (err: BusinessError) => { 7258 if (err) { 7259 console.log("send callback error = " + err); 7260 } else { 7261 console.log("send success"); 7262 } 7263}); 7264``` 7265 7266### send<sup>9+</sup> 7267 7268send(data: string \| ArrayBuffer): Promise\<void\> 7269 7270在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 7271 7272**系统能力**:SystemCapability.Communication.NetStack 7273 7274**参数:** 7275 7276| 参数名 | 类型 | 必填 | 说明 | 7277| -------- | -----------------------------| ---- | ---------------| 7278| data | string \| ArrayBuffer | 是 | 发送的数据内容。 | 7279 7280**错误码:** 7281 7282| 错误码ID | 错误信息 | 7283| ------- | -------------------------------------------- | 7284| 401 | Parameter error. | 7285| 2303501 | SSL is null. | 7286| 2303503 | An error occurred when writing data on the TLS socket.| 7287| 2303505 | An error occurred in the TLS system call. | 7288| 2303506 | Failed to close the TLS connection. | 7289| 2300002 | System internal error. | 7290 7291**返回值:** 7292 7293| 类型 | 说明 | 7294| -------------- | -------------------- | 7295| Promise\<void\> | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 | 7296 7297**示例:** 7298 7299```ts 7300import { socket } from '@kit.NetworkKit'; 7301import { BusinessError } from '@kit.BasicServicesKit'; 7302 7303let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7304tls.send("xxxx").then(() => { 7305 console.log("send success"); 7306}).catch((err: BusinessError) => { 7307 console.error("failed" + err); 7308}); 7309``` 7310 7311### close<sup>9+</sup> 7312 7313close(callback: AsyncCallback\<void\>): void 7314 7315在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。 7316 7317**系统能力**:SystemCapability.Communication.NetStack 7318 7319**参数:** 7320 7321| 参数名 | 类型 | 必填 | 说明 | 7322| -------- | -----------------------------| ---- | ---------------| 7323| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 | 7324 7325**错误码:** 7326 7327| 错误码ID | 错误信息 | 7328| ------- | -------------------------------------------- | 7329| 401 | Parameter error. | 7330| 2303501 | SSL is null. | 7331| 2303505 | An error occurred in the TLS system call. | 7332| 2303506 | Failed to close the TLS connection. | 7333| 2300002 | System internal error. | 7334 7335**示例:** 7336 7337```ts 7338import { socket } from '@kit.NetworkKit'; 7339import { BusinessError } from '@kit.BasicServicesKit'; 7340 7341let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7342tls.close((err: BusinessError) => { 7343 if (err) { 7344 console.log("close callback error = " + err); 7345 } else { 7346 console.log("close success"); 7347 } 7348}); 7349``` 7350 7351### close<sup>9+</sup> 7352 7353close(): Promise\<void\> 7354 7355在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。 7356 7357**系统能力**:SystemCapability.Communication.NetStack 7358 7359**返回值:** 7360 7361| 类型 | 说明 | 7362| -------------- | -------------------- | 7363| Promise\<void\> | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 | 7364 7365**错误码:** 7366 7367| 错误码ID | 错误信息 | 7368| ------- | -------------------------------------------- | 7369| 401 | Parameter error. | 7370| 2303501 | SSL is null. | 7371| 2303505 | An error occurred in the TLS system call. | 7372| 2303506 | Failed to close the TLS connection. | 7373| 2300002 | System internal error. | 7374 7375**示例:** 7376 7377```ts 7378import { socket } from '@kit.NetworkKit'; 7379import { BusinessError } from '@kit.BasicServicesKit'; 7380 7381let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); 7382tls.close().then(() => { 7383 console.log("close success"); 7384}).catch((err: BusinessError) => { 7385 console.error("failed" + err); 7386}); 7387``` 7388 7389## TLSConnectOptions<sup>9+</sup> 7390 7391TLS连接的操作。 7392 7393**系统能力**:SystemCapability.Communication.NetStack 7394 7395| 名称 | 类型 | 必填 | 说明 | 7396| -------------- | ------------------------------------- | --- |-------------- | 7397| address | [NetAddress](#netaddress) | 是 | 网关地址。 | 7398| secureOptions | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。| 7399| ALPNProtocols | Array\<string\> | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。 | 7400| skipRemoteValidation<sup>12+</sup> | boolean | 否 | 是否跳过对服务端进行证书认证,默认为false。true:跳过对服务端进行证书认证;false:不跳过对服务端进行证书认证。 | 7401| proxy<sup>18+</sup> | [ProxyOptions](#proxyoptions18) | 否 | 使用的代理信息,默认不使用代理。 | 7402 7403## TLSSecureOptions<sup>9+</sup> 7404 7405TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。 7406 7407**系统能力**:SystemCapability.Communication.NetStack 7408 7409| 名称 | 类型 | 必填 | 说明 | 7410| --------------------- | ------------------------------------------------------ | --- |----------------------------------- | 7411| ca | string \| Array\<string\> | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书<sup>12+</sup>。 | 7412| cert | string | 否 | 本地客户端的数字证书。 | 7413| key | string | 否 | 本地数字证书的私钥。 | 7414| password | string | 否 | 读取私钥的密码。 | 7415| protocols | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。 | 7416| useRemoteCipherPrefer | boolean | 否 | 优先使用对等方的密码套件。true:优先使用对等方的密码套件;false:不优先使用对等方的密码套件。 | 7417| signatureAlgorithms | string | 否 | 通信过程中的签名算法,默认为"" 。 | 7418| cipherSuite | string | 否 | 通信过程中的加密套件,默认为"" 。 | 7419| isBidirectionalAuthentication<sup>12+</sup> | boolean | 否 | 用于设置双向认证,默认为false。true:设置双向认证;false:不设置双向认证。 | 7420 7421## Protocol<sup>9+</sup> 7422 7423TLS通信的协议版本。 7424 7425**系统能力**:SystemCapability.Communication.NetStack 7426 7427| 名称 | 值 | 说明 | 7428| --------- | --------- |------------------ | 7429| TLSv12 | "TLSv1.2" | 使用TLSv1.2协议通信。 | 7430| TLSv13 | "TLSv1.3" | 使用TLSv1.3协议通信。 | 7431 7432## X509CertRawData<sup>9+</sup> 7433 7434type X509CertRawData = cert.EncodingBlob 7435 7436存储证书的数据。 7437 7438**系统能力**:SystemCapability.Communication.NetStack 7439 7440| 类型 | 说明 | 7441| ---------------- | --------------------------- | 7442| cert.EncodingBlob | 提供证书编码blob类型。 | 7443 7444## socket.constructTLSSocketServerInstance<sup>10+</sup> 7445 7446constructTLSSocketServerInstance(): TLSSocketServer 7447 7448创建并返回一个TLSSocketServer对象。 7449 7450**系统能力**:SystemCapability.Communication.NetStack 7451 7452**返回值:** 7453 7454| 类型 | 说明 | 7455| ------------------------------------ | ---------------------------- | 7456| [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 | 7457 7458**示例:** 7459 7460```ts 7461import { socket } from '@kit.NetworkKit'; 7462import { BusinessError } from '@kit.BasicServicesKit'; 7463 7464let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7465``` 7466 7467## TLSSocketServer<sup>10+</sup> 7468 7469TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。 7470 7471### listen<sup>10+</sup> 7472 7473listen(options: TLSConnectOptions, callback: AsyncCallback\<void\>): void 7474 7475绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。 7476 7477**注意:**IP地址设置为0.0.0.0时,可以监听本机所有地址。 7478 7479**需要权限**:ohos.permission.INTERNET 7480 7481**系统能力**:SystemCapability.Communication.NetStack 7482 7483**参数:** 7484 7485| 参数名 | 类型 | 必填 | 说明 | 7486| -------- | ---------------------------------------- | ---- | ------------------------------------------------ | 7487| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocketServer连接所需要的参数。 | 7488| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 7489 7490**错误码:** 7491 7492| 错误码ID | 错误信息 | 7493| -------- | ------------------------------------------- | 7494| 401 | Parameter error. | 7495| 201 | Permission denied. | 7496| 2300002 | System internal error. | 7497| 2303109 | Bad file number. | 7498| 2303111 | Resource temporarily unavailable. Try again.| 7499| 2303198 | Address already in use. | 7500| 2303199 | Cannot assign requested address. | 7501| 2303501 | SSL is null. | 7502| 2303502 | An error occurred when reading data on the TLS socket.| 7503| 2303503 | An error occurred when writing data on the TLS socket.| 7504| 2303505 | An error occurred in the TLS system call. | 7505| 2303506 | Failed to close the TLS connection. | 7506 7507**示例:** 7508 7509```ts 7510import { socket } from '@kit.NetworkKit'; 7511import { BusinessError } from '@kit.BasicServicesKit'; 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 skipRemoteValidation: false 7533} 7534tlsServer.listen(tlsConnectOptions, (err: BusinessError) => { 7535 console.log("listen callback error" + err); 7536}); 7537``` 7538 7539### listen<sup>10+</sup> 7540 7541listen(options: TLSConnectOptions): Promise\<void\> 7542 7543绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。 7544 7545**需要权限**:ohos.permission.INTERNET 7546 7547**系统能力**:SystemCapability.Communication.NetStack 7548 7549**参数:** 7550 7551| 参数名 | 类型 | 必填 | 说明 | 7552| ------- | ---------------------------------------- | ---- | ------------------ | 7553| options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。 | 7554 7555**返回值:** 7556 7557| 类型 | 说明 | 7558| --------------- | --------------------------------------------------------- | 7559| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 7560 7561**错误码:** 7562 7563| 错误码ID | 错误信息 | 7564| -------- | ------------------------------------------- | 7565| 401 | Parameter error. | 7566| 201 | Permission denied. | 7567| 2300002 | System internal error. | 7568| 2303109 | Bad file number. | 7569| 2303111 | Resource temporarily unavailable. Try again.| 7570| 2303198 | Address already in use. | 7571| 2303199 | Cannot assign requested address. | 7572| 2303501 | SSL is null. | 7573| 2303502 | An error occurred when reading data on the TLS socket.| 7574| 2303503 | An error occurred when writing data on the TLS socket.| 7575| 2303505 | An error occurred in the TLS system call. | 7576| 2303506 | Failed to close the TLS connection. | 7577 7578**示例:** 7579 7580```ts 7581import { socket } from '@kit.NetworkKit'; 7582import { BusinessError } from '@kit.BasicServicesKit'; 7583 7584let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7585let netAddress: socket.NetAddress = { 7586 address: '192.168.xx.xxx', 7587 port: 8080 7588} 7589let tlsSecureOptions: socket.TLSSecureOptions = { 7590 key: "xxxx", 7591 cert: "xxxx", 7592 ca: ["xxxx"], 7593 password: "xxxx", 7594 protocols: socket.Protocol.TLSv12, 7595 useRemoteCipherPrefer: true, 7596 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7597 cipherSuite: "AES256-SHA256" 7598} 7599let tlsConnectOptions: socket.TLSConnectOptions = { 7600 address: netAddress, 7601 secureOptions: tlsSecureOptions, 7602 ALPNProtocols: ["spdy/1", "http/1.1"], 7603 skipRemoteValidation: false 7604} 7605tlsServer.listen(tlsConnectOptions).then(() => { 7606 console.log("listen callback success"); 7607}).catch((err: BusinessError) => { 7608 console.log("failed: " + JSON.stringify(err)); 7609}); 7610``` 7611 7612### getState<sup>10+</sup> 7613 7614getState(callback: AsyncCallback\<SocketStateBase\>): void 7615 7616在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。 7617 7618> **说明:** 7619> listen方法调用成功后,才可调用此方法。 7620 7621**系统能力**:SystemCapability.Communication.NetStack 7622 7623**参数:** 7624 7625| 参数名 | 类型 | 必填 | 说明 | 7626| -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | 7627| callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 | 7628 7629**错误码:** 7630 7631| 错误码ID | 错误信息 | 7632| -------- | ------------------------------- | 7633| 401 | Parameter error. | 7634| 2303188 | Socket operation on non-socket. | 7635| 2300002 | System internal error. | 7636 7637**示例:** 7638 7639```ts 7640import { socket } from '@kit.NetworkKit'; 7641import { BusinessError } from '@kit.BasicServicesKit'; 7642 7643let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7644let netAddress: socket.NetAddress = { 7645 address: '192.168.xx.xxx', 7646 port: 8080 7647} 7648let tlsSecureOptions: socket.TLSSecureOptions = { 7649 key: "xxxx", 7650 cert: "xxxx", 7651 ca: ["xxxx"], 7652 password: "xxxx", 7653 protocols: socket.Protocol.TLSv12, 7654 useRemoteCipherPrefer: true, 7655 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7656 cipherSuite: "AES256-SHA256" 7657} 7658let tlsConnectOptions: socket.TLSConnectOptions = { 7659 address: netAddress, 7660 secureOptions: tlsSecureOptions, 7661 ALPNProtocols: ["spdy/1", "http/1.1"] 7662} 7663tlsServer.listen(tlsConnectOptions).then(() => { 7664 console.log("listen callback success"); 7665}).catch((err: BusinessError) => { 7666 console.log("failed: " + JSON.stringify(err)); 7667}); 7668tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => { 7669 if (err) { 7670 console.log('getState fail'); 7671 return; 7672 } 7673 console.log('getState success:' + JSON.stringify(data)); 7674}); 7675``` 7676 7677### getState<sup>10+</sup> 7678 7679getState(): Promise\<SocketStateBase\> 7680 7681在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。 7682 7683> **说明:** 7684> listen方法调用成功后,才可调用此方法。 7685 7686**系统能力**:SystemCapability.Communication.NetStack 7687 7688**返回值:** 7689 7690| 类型 | 说明 | 7691| --------------------------------------------- | ----------------------------------------------------------- | 7692| Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 | 7693 7694**错误码:** 7695 7696| 错误码ID | 错误信息 | 7697| -------- | ------------------------------- | 7698| 2303188 | Socket operation on non-socket. | 7699| 2300002 | System internal error. | 7700 7701**示例:** 7702 7703```ts 7704import { socket } from '@kit.NetworkKit'; 7705import { BusinessError } from '@kit.BasicServicesKit'; 7706 7707let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7708let netAddress: socket.NetAddress = { 7709 address: '192.168.xx.xxx', 7710 port: 8080 7711} 7712let tlsSecureOptions: socket.TLSSecureOptions = { 7713 key: "xxxx", 7714 cert: "xxxx", 7715 ca: ["xxxx"], 7716 password: "xxxx", 7717 protocols: socket.Protocol.TLSv12, 7718 useRemoteCipherPrefer: true, 7719 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7720 cipherSuite: "AES256-SHA256" 7721} 7722let tlsConnectOptions: socket.TLSConnectOptions = { 7723 address: netAddress, 7724 secureOptions: tlsSecureOptions, 7725 ALPNProtocols: ["spdy/1", "http/1.1"] 7726} 7727tlsServer.listen(tlsConnectOptions).then(() => { 7728 console.log("listen callback success"); 7729}).catch((err: BusinessError) => { 7730 console.log("failed: " + JSON.stringify(err)); 7731}); 7732tlsServer.getState().then(() => { 7733 console.log('getState success'); 7734}).catch((err: BusinessError) => { 7735 console.log('getState fail'); 7736}); 7737``` 7738 7739### setExtraOptions<sup>10+</sup> 7740 7741setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\<void\>): void 7742 7743在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。 7744 7745> **说明:** 7746> listen方法调用成功后,才可调用此方法。 7747 7748**系统能力**:SystemCapability.Communication.NetStack 7749 7750**参数:** 7751 7752| 参数名 | 类型 | 必填 | 说明 | 7753| -------- | ------------------------------------ | ---- | ------------------------------------------------ | 7754| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 7755| callback | AsyncCallback\<void\> | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | 7756 7757**错误码:** 7758 7759| 错误码ID | 错误信息 | 7760| -------- | ------------------------------- | 7761| 401 | Parameter error. | 7762| 2303188 | Socket operation on non-socket. | 7763| 2300002 | System internal error. | 7764 7765**示例:** 7766 7767```ts 7768import { socket } from '@kit.NetworkKit'; 7769import { BusinessError } from '@kit.BasicServicesKit'; 7770 7771let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7772let netAddress: socket.NetAddress = { 7773 address: '192.168.xx.xxx', 7774 port: 8080 7775} 7776let tlsSecureOptions: socket.TLSSecureOptions = { 7777 key: "xxxx", 7778 cert: "xxxx", 7779 ca: ["xxxx"], 7780 password: "xxxx", 7781 protocols: socket.Protocol.TLSv12, 7782 useRemoteCipherPrefer: true, 7783 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7784 cipherSuite: "AES256-SHA256" 7785} 7786let tlsConnectOptions: socket.TLSConnectOptions = { 7787 address: netAddress, 7788 secureOptions: tlsSecureOptions, 7789 ALPNProtocols: ["spdy/1", "http/1.1"] 7790} 7791tlsServer.listen(tlsConnectOptions).then(() => { 7792 console.log("listen callback success"); 7793}).catch((err: BusinessError) => { 7794 console.log("failed: " + JSON.stringify(err)); 7795}); 7796 7797interface SocketLinger { 7798 on: boolean; 7799 linger: number; 7800} 7801 7802let tcpExtraOptions: socket.TCPExtraOptions = { 7803 keepAlive: true, 7804 OOBInline: true, 7805 TCPNoDelay: true, 7806 socketLinger: { on: true, linger: 10 } as SocketLinger, 7807 receiveBufferSize: 1000, 7808 sendBufferSize: 1000, 7809 reuseAddress: true, 7810 socketTimeout: 3000 7811} 7812tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { 7813 if (err) { 7814 console.log('setExtraOptions fail'); 7815 return; 7816 } 7817 console.log('setExtraOptions success'); 7818}); 7819``` 7820 7821### setExtraOptions<sup>10+</sup> 7822 7823setExtraOptions(options: TCPExtraOptions): Promise\<void\> 7824 7825在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。 7826 7827> **说明:** 7828> listen方法调用成功后,才可调用此方法。 7829 7830**系统能力**:SystemCapability.Communication.NetStack 7831 7832**参数:** 7833 7834| 参数名 | 类型 | 必填 | 说明 | 7835| ------- | ------------------------------------ | ---- | ------------------------------- | 7836| options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | 7837 7838**返回值:** 7839 7840| 类型 | 说明 | 7841| -------------- | -------------------------------------------------------- | 7842| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 7843 7844**错误码:** 7845 7846| 错误码ID | 错误信息 | 7847| -------- | ------------------------------- | 7848| 401 | Parameter error. | 7849| 2303188 | Socket operation on non-socket. | 7850| 2300002 | System internal error. | 7851 7852**示例:** 7853 7854```ts 7855import { socket } from '@kit.NetworkKit'; 7856import { BusinessError } from '@kit.BasicServicesKit'; 7857 7858let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7859let netAddress: socket.NetAddress = { 7860 address: '192.168.xx.xxx', 7861 port: 8080 7862} 7863let tlsSecureOptions: socket.TLSSecureOptions = { 7864 key: "xxxx", 7865 cert: "xxxx", 7866 ca: ["xxxx"], 7867 password: "xxxx", 7868 protocols: socket.Protocol.TLSv12, 7869 useRemoteCipherPrefer: true, 7870 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7871 cipherSuite: "AES256-SHA256" 7872} 7873let tlsConnectOptions: socket.TLSConnectOptions = { 7874 address: netAddress, 7875 secureOptions: tlsSecureOptions, 7876 ALPNProtocols: ["spdy/1", "http/1.1"] 7877} 7878tlsServer.listen(tlsConnectOptions).then(() => { 7879 console.log("listen callback success"); 7880}).catch((err: BusinessError) => { 7881 console.log("failed: " + JSON.stringify(err)); 7882}); 7883 7884interface SocketLinger { 7885 on: boolean; 7886 linger: number; 7887} 7888 7889let tcpExtraOptions: socket.TCPExtraOptions = { 7890 keepAlive: true, 7891 OOBInline: true, 7892 TCPNoDelay: true, 7893 socketLinger: { on: true, linger: 10 } as SocketLinger, 7894 receiveBufferSize: 1000, 7895 sendBufferSize: 1000, 7896 reuseAddress: true, 7897 socketTimeout: 3000 7898} 7899tlsServer.setExtraOptions(tcpExtraOptions).then(() => { 7900 console.log('setExtraOptions success'); 7901}).catch((err: BusinessError) => { 7902 console.log('setExtraOptions fail'); 7903}); 7904``` 7905 7906### getCertificate<sup>10+</sup> 7907 7908getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 7909 7910在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。 7911 7912> **说明:** 7913> listen方法调用成功后,才可调用此方法。 7914 7915**系统能力**:SystemCapability.Communication.NetStack 7916 7917**参数:** 7918 7919| 参数名 | 类型 | 必填 | 说明 | 7920| -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- | 7921| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 | 7922 7923**错误码:** 7924 7925| 错误码ID | 错误信息 | 7926| -------- | ---------------------- | 7927| 401 | Parameter error. | 7928| 2303501 | SSL is null. | 7929| 2303504 | An error occurred when verifying the X.509 certificate. | 7930| 2300002 | System internal error. | 7931 7932**示例:** 7933 7934```ts 7935import { socket } from '@kit.NetworkKit'; 7936import { BusinessError } from '@kit.BasicServicesKit'; 7937import { util } from '@kit.ArkTS'; 7938 7939let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 7940let netAddress: socket.NetAddress = { 7941 address: '192.168.xx.xxx', 7942 port: 8080 7943} 7944let tlsSecureOptions: socket.TLSSecureOptions = { 7945 key: "xxxx", 7946 cert: "xxxx", 7947 ca: ["xxxx"], 7948 password: "xxxx", 7949 protocols: socket.Protocol.TLSv12, 7950 useRemoteCipherPrefer: true, 7951 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 7952 cipherSuite: "AES256-SHA256" 7953} 7954let tlsConnectOptions: socket.TLSConnectOptions = { 7955 address: netAddress, 7956 secureOptions: tlsSecureOptions, 7957 ALPNProtocols: ["spdy/1", "http/1.1"] 7958} 7959tlsServer.listen(tlsConnectOptions).then(() => { 7960 console.log("listen callback success"); 7961}).catch((err: BusinessError) => { 7962 console.log("failed: " + JSON.stringify(err)); 7963}); 7964tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { 7965 if (err) { 7966 console.log("getCertificate callback error = " + err); 7967 } else { 7968 const decoder = util.TextDecoder.create(); 7969 const str = decoder.decodeToString(data.data); 7970 console.log("getCertificate callback: " + str); 7971 } 7972}); 7973``` 7974 7975### getCertificate<sup>10+</sup> 7976 7977getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 7978 7979在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。 7980 7981> **说明:** 7982> listen方法调用成功后,才可调用此方法。 7983 7984**系统能力**:SystemCapability.Communication.NetStack 7985 7986**返回值:** 7987 7988| 类型 | 说明 | 7989| ----------------------------------------------- | ------------------------------------------------------------ | 7990| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | 7991 7992**错误码:** 7993 7994| 错误码ID | 错误信息 | 7995| -------- | ---------------------- | 7996| 2303501 | SSL is null. | 7997| 2303504 | An error occurred when verifying the X.509 certificate. | 7998| 2300002 | System internal error. | 7999 8000**示例:** 8001 8002```ts 8003import { socket } from '@kit.NetworkKit'; 8004import { BusinessError } from '@kit.BasicServicesKit'; 8005import { util } from '@kit.ArkTS'; 8006 8007let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8008let netAddress: socket.NetAddress = { 8009 address: '192.168.xx.xxx', 8010 port: 8080 8011} 8012let tlsSecureOptions: socket.TLSSecureOptions = { 8013 key: "xxxx", 8014 cert: "xxxx", 8015 ca: ["xxxx"], 8016 password: "xxxx", 8017 protocols: socket.Protocol.TLSv12, 8018 useRemoteCipherPrefer: true, 8019 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8020 cipherSuite: "AES256-SHA256" 8021} 8022let tlsConnectOptions: socket.TLSConnectOptions = { 8023 address: netAddress, 8024 secureOptions: tlsSecureOptions, 8025 ALPNProtocols: ["spdy/1", "http/1.1"] 8026} 8027tlsServer.listen(tlsConnectOptions).then(() => { 8028 console.log("listen callback success"); 8029}).catch((err: BusinessError) => { 8030 console.log("failed: " + JSON.stringify(err)); 8031}); 8032tlsServer.getCertificate().then((data: socket.X509CertRawData) => { 8033 const decoder = util.TextDecoder.create(); 8034 const str = decoder.decodeToString(data.data); 8035 console.log("getCertificate: " + str); 8036}).catch((err: BusinessError) => { 8037 console.error("failed" + err); 8038}); 8039``` 8040 8041### getProtocol<sup>10+</sup> 8042 8043getProtocol(callback: AsyncCallback\<string\>): void 8044 8045在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 8046 8047> **说明:** 8048> listen方法调用成功后,才可调用此方法。 8049 8050**系统能力**:SystemCapability.Communication.NetStack 8051 8052**参数:** 8053 8054| 参数名 | 类型 | 必填 | 说明 | 8055| -------- | ----------------------- | ---- | ---------------------------------------------------- | 8056| callback | AsyncCallback\<string\> | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。 | 8057 8058**错误码:** 8059 8060| 错误码ID | 错误信息 | 8061| -------- | -------------------------------------- | 8062| 401 | Parameter error. | 8063| 2303501 | SSL is null. | 8064| 2303505 | An error occurred in the TLS system call. | 8065| 2300002 | System internal error. | 8066 8067**示例:** 8068 8069```ts 8070import { socket } from '@kit.NetworkKit'; 8071import { BusinessError } from '@kit.BasicServicesKit'; 8072 8073let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8074let netAddress: socket.NetAddress = { 8075 address: '192.168.xx.xxx', 8076 port: 8080 8077} 8078let tlsSecureOptions: socket.TLSSecureOptions = { 8079 key: "xxxx", 8080 cert: "xxxx", 8081 ca: ["xxxx"], 8082 password: "xxxx", 8083 protocols: socket.Protocol.TLSv12, 8084 useRemoteCipherPrefer: true, 8085 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8086 cipherSuite: "AES256-SHA256" 8087} 8088let tlsConnectOptions: socket.TLSConnectOptions = { 8089 address: netAddress, 8090 secureOptions: tlsSecureOptions, 8091 ALPNProtocols: ["spdy/1", "http/1.1"] 8092} 8093tlsServer.listen(tlsConnectOptions).then(() => { 8094 console.log("listen callback success"); 8095}).catch((err: BusinessError) => { 8096 console.log("failed: " + JSON.stringify(err)); 8097}); 8098tlsServer.getProtocol((err: BusinessError, data: string) => { 8099 if (err) { 8100 console.log("getProtocol callback error = " + err); 8101 } else { 8102 console.log("getProtocol callback = " + data); 8103 } 8104}); 8105``` 8106 8107### getProtocol<sup>10+</sup> 8108 8109getProtocol():Promise\<string\> 8110 8111在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 8112 8113> **说明:** 8114> listen方法调用成功后,才可调用此方法。 8115 8116**系统能力**:SystemCapability.Communication.NetStack 8117 8118**返回值:** 8119 8120| 类型 | 说明 | 8121| ----------------- | ------------------------------------------------------- | 8122| Promise\<string\> | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | 8123 8124**错误码:** 8125 8126| 错误码ID | 错误信息 | 8127| -------- | -------------------------------------- | 8128| 2303501 | SSL is null. | 8129| 2303505 | An error occurred in the TLS system call. | 8130| 2300002 | System internal error. | 8131 8132**示例:** 8133 8134```ts 8135import { socket } from '@kit.NetworkKit'; 8136import { BusinessError } from '@kit.BasicServicesKit'; 8137 8138let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8139let netAddress: socket.NetAddress = { 8140 address: '192.168.xx.xxx', 8141 port: 8080 8142} 8143let tlsSecureOptions: socket.TLSSecureOptions = { 8144 key: "xxxx", 8145 cert: "xxxx", 8146 ca: ["xxxx"], 8147 password: "xxxx", 8148 protocols: socket.Protocol.TLSv12, 8149 useRemoteCipherPrefer: true, 8150 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8151 cipherSuite: "AES256-SHA256" 8152} 8153let tlsConnectOptions: socket.TLSConnectOptions = { 8154 address: netAddress, 8155 secureOptions: tlsSecureOptions, 8156 ALPNProtocols: ["spdy/1", "http/1.1"] 8157} 8158tlsServer.listen(tlsConnectOptions).then(() => { 8159 console.log("listen callback success"); 8160}).catch((err: BusinessError) => { 8161 console.log("failed: " + JSON.stringify(err)); 8162}); 8163tlsServer.getProtocol().then((data: string) => { 8164 console.log(data); 8165}).catch((err: BusinessError) => { 8166 console.error("failed" + err); 8167}); 8168``` 8169 8170### getLocalAddress<sup>12+</sup> 8171 8172getLocalAddress(): Promise\<NetAddress\> 8173 8174获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。 8175 8176> **说明:** 8177> 在TLSSocketServer通信连接成功之后,才可调用此方法。 8178 8179**系统能力**:SystemCapability.Communication.NetStack 8180 8181**返回值:** 8182 8183| 类型 | 说明 | 8184| -------------- | --------------------------------------------------- | 8185| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 8186 8187**错误码:** 8188 8189| 错误码ID | 错误信息 | 8190| -------- | ------------------------------------------- | 8191| 2300002 | System internal error. | 8192| 2301009 | Bad file descriptor. | 8193| 2303188 | Socket operation on non-socket. | 8194 8195**示例:** 8196 8197```ts 8198import { socket } from '@kit.NetworkKit'; 8199import { BusinessError } from '@kit.BasicServicesKit'; 8200 8201let tlsServer: socket.TLSSocket = socket.constructTLSSocketServerInstance(); 8202tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => { 8203 console.info("Get success: " + JSON.stringify(localAddress)); 8204}).catch((err: BusinessError) => { 8205 console.error("Get failed, error: " + JSON.stringify(err)); 8206}) 8207``` 8208 8209### on('connect')<sup>10+</sup> 8210 8211on(type: 'connect', callback: Callback\<TLSSocketConnection\>): void 8212 8213订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 8214 8215> **说明:** 8216> listen方法调用成功后,才可调用此方法。 8217 8218**系统能力**:SystemCapability.Communication.NetStack 8219 8220**参数:** 8221 8222| 参数名 | 类型 | 必填 | 说明 | 8223| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 8224| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 8225| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | 8226 8227**错误码:** 8228 8229| 错误码ID | 错误信息 | 8230| -------- | ---------------- | 8231| 401 | Parameter error. | 8232 8233**示例:** 8234 8235```ts 8236import { socket } from '@kit.NetworkKit'; 8237import { BusinessError } from '@kit.BasicServicesKit'; 8238 8239let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8240let netAddress: socket.NetAddress = { 8241 address: '192.168.xx.xxx', 8242 port: 8080 8243} 8244let tlsSecureOptions: socket.TLSSecureOptions = { 8245 key: "xxxx", 8246 cert: "xxxx", 8247 ca: ["xxxx"], 8248 password: "xxxx", 8249 protocols: socket.Protocol.TLSv12, 8250 useRemoteCipherPrefer: true, 8251 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8252 cipherSuite: "AES256-SHA256" 8253} 8254let tlsConnectOptions: socket.TLSConnectOptions = { 8255 address: netAddress, 8256 secureOptions: tlsSecureOptions, 8257 ALPNProtocols: ["spdy/1", "http/1.1"] 8258} 8259tlsServer.listen(tlsConnectOptions).then(() => { 8260 console.log("listen callback success"); 8261}).catch((err: BusinessError) => { 8262 console.log("failed: " + JSON.stringify(err)); 8263}); 8264tlsServer.on('connect', (data: socket.TLSSocketConnection) => { 8265 console.log(JSON.stringify(data)) 8266}); 8267``` 8268 8269### off('connect')<sup>10+</sup> 8270 8271off(type: 'connect', callback?: Callback\<TLSSocketConnection\>): void 8272 8273取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 8274 8275> **说明:** 8276> listen方法调用成功后,才可调用此方法。 8277> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8278 8279**系统能力**:SystemCapability.Communication.NetStack 8280 8281**参数:** 8282 8283| 参数名 | 类型 | 必填 | 说明 | 8284| -------- | ------------------------------------------------------- | ---- | ------------------------------------- | 8285| type | string | 是 | 订阅的事件类型。'connect':连接事件。 | 8286| callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | 8287 8288**错误码:** 8289 8290| 错误码ID | 错误信息 | 8291| -------- | ---------------- | 8292| 401 | Parameter error. | 8293 8294**示例:** 8295 8296```ts 8297import { socket } from '@kit.NetworkKit'; 8298import { BusinessError } from '@kit.BasicServicesKit'; 8299 8300let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8301let netAddress: socket.NetAddress = { 8302 address: '192.168.xx.xxx', 8303 port: 8080 8304} 8305let tlsSecureOptions: socket.TLSSecureOptions = { 8306 key: "xxxx", 8307 cert: "xxxx", 8308 ca: ["xxxx"], 8309 password: "xxxx", 8310 protocols: socket.Protocol.TLSv12, 8311 useRemoteCipherPrefer: true, 8312 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8313 cipherSuite: "AES256-SHA256" 8314} 8315let tlsConnectOptions: socket.TLSConnectOptions = { 8316 address: netAddress, 8317 secureOptions: tlsSecureOptions, 8318 ALPNProtocols: ["spdy/1", "http/1.1"] 8319} 8320tlsServer.listen(tlsConnectOptions).then(() => { 8321 console.log("listen callback success"); 8322}).catch((err: BusinessError) => { 8323 console.log("failed: " + JSON.stringify(err)); 8324}); 8325 8326let callback = (data: socket.TLSSocketConnection) => { 8327 console.log('on connect message: ' + JSON.stringify(data)); 8328} 8329tlsServer.on('connect', callback); 8330// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8331tlsServer.off('connect', callback); 8332tlsServer.off('connect'); 8333``` 8334 8335### on('error')<sup>10+</sup> 8336 8337on(type: 'error', callback: ErrorCallback): void 8338 8339订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 8340 8341> **说明:** 8342> listen方法调用成功后,才可调用此方法。 8343 8344**系统能力**:SystemCapability.Communication.NetStack 8345 8346**参数:** 8347 8348| 参数名 | 类型 | 必填 | 说明 | 8349| -------- | ------------- | ---- | ------------------------------------ | 8350| type | string | 是 | 订阅的事件类型。'error':error事件。 | 8351| callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | 8352 8353**错误码:** 8354 8355| 错误码ID | 错误信息 | 8356| -------- | ---------------- | 8357| 401 | Parameter error. | 8358 8359**示例:** 8360 8361```ts 8362import { socket } from '@kit.NetworkKit'; 8363import { BusinessError } from '@kit.BasicServicesKit'; 8364 8365let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8366let netAddress: socket.NetAddress = { 8367 address: '192.168.xx.xxx', 8368 port: 8080 8369} 8370let tlsSecureOptions: socket.TLSSecureOptions = { 8371 key: "xxxx", 8372 cert: "xxxx", 8373 ca: ["xxxx"], 8374 password: "xxxx", 8375 protocols: socket.Protocol.TLSv12, 8376 useRemoteCipherPrefer: true, 8377 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8378 cipherSuite: "AES256-SHA256" 8379} 8380let tlsConnectOptions: socket.TLSConnectOptions = { 8381 address: netAddress, 8382 secureOptions: tlsSecureOptions, 8383 ALPNProtocols: ["spdy/1", "http/1.1"] 8384} 8385tlsServer.listen(tlsConnectOptions).then(() => { 8386 console.log("listen callback success"); 8387}).catch((err: BusinessError) => { 8388 console.log("failed: " + JSON.stringify(err)); 8389}); 8390tlsServer.on('error', (err: BusinessError) => { 8391 console.log("on error, err:" + JSON.stringify(err)) 8392}); 8393``` 8394 8395### off('error')<sup>10+</sup> 8396 8397off(type: 'error', callback?: ErrorCallback): void 8398 8399取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 8400 8401> **说明:** 8402> listen方法调用成功后,才可调用此方法。 8403> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8404 8405**系统能力**:SystemCapability.Communication.NetStack 8406 8407**参数:** 8408 8409| 参数名 | 类型 | 必填 | 说明 | 8410| -------- | ------------- | ---- | ------------------------------------ | 8411| type | string | 是 | 订阅的事件类型。'error':error事件。 | 8412| callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | 8413 8414**错误码:** 8415 8416| 错误码ID | 错误信息 | 8417| -------- | ---------------- | 8418| 401 | Parameter error. | 8419 8420**示例:** 8421 8422```ts 8423import { socket } from '@kit.NetworkKit'; 8424import { BusinessError } from '@kit.BasicServicesKit'; 8425 8426let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8427let netAddress: socket.NetAddress = { 8428 address: '192.168.xx.xxx', 8429 port: 8080 8430} 8431let tlsSecureOptions: socket.TLSSecureOptions = { 8432 key: "xxxx", 8433 cert: "xxxx", 8434 ca: ["xxxx"], 8435 password: "xxxx", 8436 protocols: socket.Protocol.TLSv12, 8437 useRemoteCipherPrefer: true, 8438 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8439 cipherSuite: "AES256-SHA256" 8440} 8441let tlsConnectOptions: socket.TLSConnectOptions = { 8442 address: netAddress, 8443 secureOptions: tlsSecureOptions, 8444 ALPNProtocols: ["spdy/1", "http/1.1"] 8445} 8446tlsServer.listen(tlsConnectOptions).then(() => { 8447 console.log("listen callback success"); 8448}).catch((err: BusinessError) => { 8449 console.log("failed: " + JSON.stringify(err)); 8450}); 8451 8452let callback = (err: BusinessError) => { 8453 console.log("on error, err:" + JSON.stringify(err)); 8454} 8455tlsServer.on('error', callback); 8456// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 8457tlsServer.off('error', callback); 8458tlsServer.off('error'); 8459``` 8460 8461## TLSSocketConnection<sup>10+</sup> 8462 8463TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。 8464 8465> **说明:** 8466> 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。 8467 8468**系统能力**:SystemCapability.Communication.NetStack 8469 8470### 属性 8471 8472| 名称 | 类型 | 必填 | 说明 | 8473| -------- | ------ | ---- | ------------------------------------- | 8474| clientId | number | 是 | 客户端与TLSSocketServer建立连接的id。 | 8475 8476### send<sup>10+</sup> 8477 8478send(data: string \| ArrayBuffer, callback: AsyncCallback\<void\>): void 8479 8480在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。 8481 8482**系统能力**:SystemCapability.Communication.NetStack 8483 8484**参数:** 8485 8486| 参数名 | 类型 | 必填 | 说明 | 8487| -------- | --------------------- | ---- | ------------------------------------------------ | 8488| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 8489| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 8490 8491**错误码:** 8492 8493| 错误码ID | 错误信息 | 8494| -------- | -------------------------------------- | 8495| 401 | Parameter error. | 8496| 2303501 | SSL is null. | 8497| 2303503 | An error occurred when writing data on the TLS socket.| 8498| 2303505 | An error occurred in the TLS system call.| 8499| 2303506 | Failed to close the TLS connection. | 8500| 2300002 | System internal error. | 8501 8502**示例:** 8503 8504```ts 8505import { socket } from '@kit.NetworkKit'; 8506import { BusinessError } from '@kit.BasicServicesKit'; 8507 8508let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8509let netAddress: socket.NetAddress = { 8510 address: '192.168.xx.xxx', 8511 port: 8080 8512} 8513let tlsSecureOptions: socket.TLSSecureOptions = { 8514 key: "xxxx", 8515 cert: "xxxx", 8516 ca: ["xxxx"], 8517 password: "xxxx", 8518 protocols: socket.Protocol.TLSv12, 8519 useRemoteCipherPrefer: true, 8520 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8521 cipherSuite: "AES256-SHA256" 8522} 8523let tlsConnectOptions: socket.TLSConnectOptions = { 8524 address: netAddress, 8525 secureOptions: tlsSecureOptions, 8526 ALPNProtocols: ["spdy/1", "http/1.1"] 8527} 8528tlsServer.listen(tlsConnectOptions).then(() => { 8529 console.log("listen callback success"); 8530}).catch((err: BusinessError) => { 8531 console.log("failed" + err); 8532}); 8533 8534tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8535 client.send('Hello, client!', (err: BusinessError) => { 8536 if (err) { 8537 console.log('send fail'); 8538 return; 8539 } 8540 console.log('send success'); 8541 }); 8542}); 8543``` 8544 8545### send<sup>10+</sup> 8546 8547send(data: string \| ArrayBuffer): Promise\<void\> 8548 8549在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 8550 8551**系统能力**:SystemCapability.Communication.NetStack 8552 8553**参数:** 8554 8555| 参数名 | 类型 | 必填 | 说明 | 8556| ------ | ------ | ---- | ------------------------------------- | 8557| data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | 8558 8559**返回值:** 8560 8561| 类型 | 说明 | 8562| --------------- | --------------------------------------------------------- | 8563| Promise\<void\> | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | 8564 8565**错误码:** 8566 8567| 错误码ID | 错误信息 | 8568| -------- | -------------------------------------- | 8569| 401 | Parameter error. | 8570| 2303501 | SSL is null. | 8571| 2303503 | An error occurred when writing data on the TLS socket.| 8572| 2303505 | An error occurred in the TLS system call.| 8573| 2303506 | Failed to close the TLS connection. | 8574| 2300002 | System internal error. | 8575 8576**示例:** 8577 8578```ts 8579import { socket } from '@kit.NetworkKit'; 8580import { BusinessError } from '@kit.BasicServicesKit'; 8581 8582let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8583let netAddress: socket.NetAddress = { 8584 address: '192.168.xx.xxx', 8585 port: 8080 8586} 8587let tlsSecureOptions: socket.TLSSecureOptions = { 8588 key: "xxxx", 8589 cert: "xxxx", 8590 ca: ["xxxx"], 8591 password: "xxxx", 8592 protocols: socket.Protocol.TLSv12, 8593 useRemoteCipherPrefer: true, 8594 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8595 cipherSuite: "AES256-SHA256" 8596} 8597let tlsConnectOptions: socket.TLSConnectOptions = { 8598 address: netAddress, 8599 secureOptions: tlsSecureOptions, 8600 ALPNProtocols: ["spdy/1", "http/1.1"] 8601} 8602tlsServer.listen(tlsConnectOptions).then(() => { 8603 console.log("listen callback success"); 8604}).catch((err: BusinessError) => { 8605 console.log("failed" + err); 8606}); 8607 8608tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8609 client.send('Hello, client!').then(() => { 8610 console.log('send success'); 8611 }).catch((err: BusinessError) => { 8612 console.log('send fail'); 8613 }); 8614}); 8615``` 8616 8617### close<sup>10+</sup> 8618 8619close(callback: AsyncCallback\<void\>): void 8620 8621在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。 8622 8623**系统能力**:SystemCapability.Communication.NetStack 8624 8625**参数:** 8626 8627| 参数名 | 类型 | 必填 | 说明 | 8628| -------- | --------------------- | ---- | ------------------------------------------------ | 8629| callback | AsyncCallback\<void\> | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | 8630 8631**错误码:** 8632 8633| 错误码ID | 错误信息 | 8634| -------- | -------------------------------------- | 8635| 401 | Parameter error. | 8636| 2303501 | SSL is null. | 8637| 2303505 | An error occurred in the TLS system call. | 8638| 2303506 | Failed to close the TLS connection. | 8639| 2300002 | System internal error. | 8640 8641**示例:** 8642 8643```ts 8644import { socket } from '@kit.NetworkKit'; 8645import { BusinessError } from '@kit.BasicServicesKit'; 8646 8647let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8648let netAddress: socket.NetAddress = { 8649 address: '192.168.xx.xxx', 8650 port: 8080 8651} 8652let tlsSecureOptions: socket.TLSSecureOptions = { 8653 key: "xxxx", 8654 cert: "xxxx", 8655 ca: ["xxxx"], 8656 password: "xxxx", 8657 protocols: socket.Protocol.TLSv12, 8658 useRemoteCipherPrefer: true, 8659 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8660 cipherSuite: "AES256-SHA256" 8661} 8662let tlsConnectOptions: socket.TLSConnectOptions = { 8663 address: netAddress, 8664 secureOptions: tlsSecureOptions, 8665 ALPNProtocols: ["spdy/1", "http/1.1"] 8666} 8667tlsServer.listen(tlsConnectOptions).then(() => { 8668 console.log("listen callback success"); 8669}).catch((err: BusinessError) => { 8670 console.log("failed" + err); 8671}); 8672 8673tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8674 client.close((err: BusinessError) => { 8675 if (err) { 8676 console.log('close fail'); 8677 return; 8678 } 8679 console.log('close success'); 8680 }); 8681}); 8682``` 8683 8684### close<sup>10+</sup> 8685 8686close(): Promise\<void\> 8687 8688在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。 8689 8690**系统能力**:SystemCapability.Communication.NetStack 8691 8692**返回值:** 8693 8694| 类型 | 说明 | 8695| --------------- | --------------------------------------------------------- | 8696| Promise\<void\> | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 | 8697 8698**错误码:** 8699 8700| 错误码ID | 错误信息 | 8701| -------- | -------------------------------------- | 8702| 2303501 | SSL is null. | 8703| 2303505 | An error occurred in the TLS system call. | 8704| 2303506 | Failed to close the TLS connection. | 8705| 2300002 | System internal error. | 8706 8707**示例:** 8708 8709```ts 8710import { socket } from '@kit.NetworkKit'; 8711import { BusinessError } from '@kit.BasicServicesKit'; 8712 8713let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8714let netAddress: socket.NetAddress = { 8715 address: '192.168.xx.xxx', 8716 port: 8080 8717} 8718let tlsSecureOptions: socket.TLSSecureOptions = { 8719 key: "xxxx", 8720 cert: "xxxx", 8721 ca: ["xxxx"], 8722 password: "xxxx", 8723 protocols: socket.Protocol.TLSv12, 8724 useRemoteCipherPrefer: true, 8725 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8726 cipherSuite: "AES256-SHA256" 8727} 8728let tlsConnectOptions: socket.TLSConnectOptions = { 8729 address: netAddress, 8730 secureOptions: tlsSecureOptions, 8731 ALPNProtocols: ["spdy/1", "http/1.1"] 8732} 8733tlsServer.listen(tlsConnectOptions).then(() => { 8734 console.log("listen callback success"); 8735}).catch((err: BusinessError) => { 8736 console.log("failed" + err); 8737}); 8738tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8739 client.close().then(() => { 8740 console.log('close success'); 8741 }).catch((err: BusinessError) => { 8742 console.log('close fail'); 8743 }); 8744}); 8745``` 8746 8747### getRemoteAddress<sup>10+</sup> 8748 8749getRemoteAddress(callback: AsyncCallback\<NetAddress\>): void 8750 8751在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 8752 8753**系统能力**:SystemCapability.Communication.NetStack 8754 8755**参数:** 8756 8757| 参数名 | 类型 | 必填 | 说明 | 8758| -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ | 8759| callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | 8760 8761**错误码:** 8762 8763| 错误码ID | 错误信息 | 8764| -------- | ------------------------------- | 8765| 401 | Parameter error. | 8766| 2303188 | Socket operation on non-socket. | 8767| 2300002 | System internal error. | 8768 8769**示例:** 8770 8771```ts 8772import { socket } from '@kit.NetworkKit'; 8773import { BusinessError } from '@kit.BasicServicesKit'; 8774 8775let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8776let netAddress: socket.NetAddress = { 8777 address: '192.168.xx.xxx', 8778 port: 8080 8779} 8780let tlsSecureOptions: socket.TLSSecureOptions = { 8781 key: "xxxx", 8782 cert: "xxxx", 8783 ca: ["xxxx"], 8784 password: "xxxx", 8785 protocols: socket.Protocol.TLSv12, 8786 useRemoteCipherPrefer: true, 8787 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8788 cipherSuite: "AES256-SHA256" 8789} 8790let tlsConnectOptions: socket.TLSConnectOptions = { 8791 address: netAddress, 8792 secureOptions: tlsSecureOptions, 8793 ALPNProtocols: ["spdy/1", "http/1.1"] 8794} 8795tlsServer.listen(tlsConnectOptions).then(() => { 8796 console.log("listen callback success"); 8797}).catch((err: BusinessError) => { 8798 console.log("failed" + err); 8799}); 8800tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8801 client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { 8802 if (err) { 8803 console.log('getRemoteAddress fail'); 8804 return; 8805 } 8806 console.log('getRemoteAddress success:' + JSON.stringify(data)); 8807 }); 8808}); 8809``` 8810 8811### getRemoteAddress<sup>10+</sup> 8812 8813getRemoteAddress(): Promise\<NetAddress\> 8814 8815在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 8816 8817**系统能力**:SystemCapability.Communication.NetStack 8818 8819**返回值:** 8820 8821| 类型 | 说明 | 8822| ----------------------------------- | ----------------------------------------------------------- | 8823| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | 8824 8825**错误码:** 8826 8827| 错误码ID | 错误信息 | 8828| -------- | ------------------------------- | 8829| 2303188 | Socket operation on non-socket. | 8830| 2300002 | System internal error. | 8831 8832**示例:** 8833 8834```ts 8835import { socket } from '@kit.NetworkKit'; 8836import { BusinessError } from '@kit.BasicServicesKit'; 8837 8838let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8839let netAddress: socket.NetAddress = { 8840 address: '192.168.xx.xxx', 8841 port: 8080 8842} 8843let tlsSecureOptions: socket.TLSSecureOptions = { 8844 key: "xxxx", 8845 cert: "xxxx", 8846 ca: ["xxxx"], 8847 password: "xxxx", 8848 protocols: socket.Protocol.TLSv12, 8849 useRemoteCipherPrefer: true, 8850 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8851 cipherSuite: "AES256-SHA256" 8852} 8853let tlsConnectOptions: socket.TLSConnectOptions = { 8854 address: netAddress, 8855 secureOptions: tlsSecureOptions, 8856 ALPNProtocols: ["spdy/1", "http/1.1"] 8857} 8858tlsServer.listen(tlsConnectOptions).then(() => { 8859 console.log("listen callback success"); 8860}).catch((err: BusinessError) => { 8861 console.log("failed" + err); 8862}); 8863tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8864 client.getRemoteAddress().then((data: socket.NetAddress) => { 8865 console.log('getRemoteAddress success:' + JSON.stringify(data)); 8866 }).catch((err: BusinessError) => { 8867 console.error("failed" + err); 8868 }); 8869}); 8870``` 8871 8872### getRemoteCertificate<sup>10+</sup> 8873 8874getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 8875 8876在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。 8877 8878**系统能力**:SystemCapability.Communication.NetStack 8879 8880**参数:** 8881 8882| 参数名 | 类型 | 必填 | 说明 | 8883| -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- | 8884| callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回对端的证书。失败返回错误码、错误信息。 | 8885 8886**错误码:** 8887 8888| 错误码ID | 错误信息 | 8889| -------- | ---------------------- | 8890| 401 | Parameter error. | 8891| 2303501 | SSL is null. | 8892| 2300002 | System internal error. | 8893 8894**示例:** 8895 8896```ts 8897import { socket } from '@kit.NetworkKit'; 8898import { BusinessError } from '@kit.BasicServicesKit'; 8899import { util } from '@kit.ArkTS'; 8900 8901let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8902let netAddress: socket.NetAddress = { 8903 address: '192.168.xx.xxx', 8904 port: 8080 8905} 8906let tlsSecureOptions: socket.TLSSecureOptions = { 8907 key: "xxxx", 8908 cert: "xxxx", 8909 ca: ["xxxx"], 8910 password: "xxxx", 8911 protocols: socket.Protocol.TLSv12, 8912 useRemoteCipherPrefer: true, 8913 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8914 cipherSuite: "AES256-SHA256" 8915} 8916let tlsConnectOptions: socket.TLSConnectOptions = { 8917 address: netAddress, 8918 secureOptions: tlsSecureOptions, 8919 ALPNProtocols: ["spdy/1", "http/1.1"] 8920} 8921tlsServer.listen(tlsConnectOptions).then(() => { 8922 console.log("listen callback success"); 8923}).catch((err: BusinessError) => { 8924 console.log("failed" + err); 8925}); 8926tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8927 client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { 8928 if (err) { 8929 console.log("getRemoteCertificate callback error: " + err); 8930 } else { 8931 const decoder = util.TextDecoder.create(); 8932 const str = decoder.decodeToString(data.data); 8933 console.log("getRemoteCertificate callback: " + str); 8934 } 8935 }); 8936}); 8937``` 8938 8939### getRemoteCertificate<sup>10+</sup> 8940 8941getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 8942 8943在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。 8944 8945**系统能力**:SystemCapability.Communication.NetStack 8946 8947**返回值:** 8948 8949| 类型 | 说明 | 8950| ----------------------------------------------- | ------------------------------------------------------------ | 8951| Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 | 8952 8953**错误码:** 8954 8955| 错误码ID | 错误信息 | 8956| -------- | ---------------------- | 8957| 2303501 | SSL is null. | 8958| 2300002 | System internal error. | 8959 8960**示例:** 8961 8962```ts 8963import { socket } from '@kit.NetworkKit'; 8964import { BusinessError } from '@kit.BasicServicesKit'; 8965import { util } from '@kit.ArkTS'; 8966 8967let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 8968let netAddress: socket.NetAddress = { 8969 address: '192.168.xx.xxx', 8970 port: 8080 8971} 8972let tlsSecureOptions: socket.TLSSecureOptions = { 8973 key: "xxxx", 8974 cert: "xxxx", 8975 ca: ["xxxx"], 8976 password: "xxxx", 8977 protocols: socket.Protocol.TLSv12, 8978 useRemoteCipherPrefer: true, 8979 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 8980 cipherSuite: "AES256-SHA256" 8981} 8982let tlsConnectOptions: socket.TLSConnectOptions = { 8983 address: netAddress, 8984 secureOptions: tlsSecureOptions, 8985 ALPNProtocols: ["spdy/1", "http/1.1"] 8986} 8987tlsServer.listen(tlsConnectOptions).then(() => { 8988 console.log("listen callback success"); 8989}).catch((err: BusinessError) => { 8990 console.log("failed" + err); 8991}); 8992tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 8993 client.getRemoteCertificate().then((data: socket.X509CertRawData) => { 8994 const decoder = util.TextDecoder.create(); 8995 const str = decoder.decodeToString(data.data); 8996 console.log("getRemoteCertificate success: " + str); 8997 }).catch((err: BusinessError) => { 8998 console.error("failed" + err); 8999 }); 9000}); 9001``` 9002 9003### getCipherSuite<sup>10+</sup> 9004 9005getCipherSuite(callback: AsyncCallback\<Array\<string\>\>): void 9006 9007在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 9008 9009**系统能力**:SystemCapability.Communication.NetStack 9010 9011**参数:** 9012 9013| 参数名 | 类型 | 必填 | 说明 | 9014| -------- | -------------------------------- | ---- | ------------------------------------------------------------ | 9015| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | 9016 9017**错误码:** 9018 9019| 错误码ID | 错误信息 | 9020| -------- | -------------------------------------- | 9021| 401 | Parameter error. | 9022| 2303501 | SSL is null. | 9023| 2303502 | An error occurred when reading data on the TLS socket.| 9024| 2303505 | An error occurred in the TLS system call.| 9025| 2300002 | System internal error. | 9026 9027**示例:** 9028 9029```ts 9030import { socket } from '@kit.NetworkKit'; 9031import { BusinessError } from '@kit.BasicServicesKit'; 9032 9033let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9034let netAddress: socket.NetAddress = { 9035 address: '192.168.xx.xxx', 9036 port: 8080 9037} 9038let tlsSecureOptions: socket.TLSSecureOptions = { 9039 key: "xxxx", 9040 cert: "xxxx", 9041 ca: ["xxxx"], 9042 password: "xxxx", 9043 protocols: socket.Protocol.TLSv12, 9044 useRemoteCipherPrefer: true, 9045 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9046 cipherSuite: "AES256-SHA256" 9047} 9048let tlsConnectOptions: socket.TLSConnectOptions = { 9049 address: netAddress, 9050 secureOptions: tlsSecureOptions, 9051 ALPNProtocols: ["spdy/1", "http/1.1"] 9052} 9053tlsServer.listen(tlsConnectOptions).then(() => { 9054 console.log("listen callback success"); 9055}).catch((err: BusinessError) => { 9056 console.log("failed" + err); 9057}); 9058tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9059 client.getCipherSuite((err: BusinessError, data: Array<string>) => { 9060 if (err) { 9061 console.log("getCipherSuite callback error = " + err); 9062 } else { 9063 console.log("getCipherSuite callback = " + data); 9064 } 9065 }); 9066}); 9067``` 9068 9069### getCipherSuite<sup>10+</sup> 9070 9071getCipherSuite(): Promise\<Array\<string\>\> 9072 9073在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 9074 9075**系统能力**:SystemCapability.Communication.NetStack 9076 9077**返回值:** 9078 9079| 类型 | 说明 | 9080| -------------------------- | ------------------------------------------------------------ | 9081| Promise\<Array\<string\>\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | 9082 9083**错误码:** 9084 9085| 错误码ID | 错误信息 | 9086| -------- | -------------------------------------- | 9087| 2303501 | SSL is null. | 9088| 2303502 | An error occurred when reading data on the TLS socket.| 9089| 2303505 | An error occurred in the TLS system call. | 9090| 2300002 | System internal error. | 9091 9092**示例:** 9093 9094```ts 9095import { socket } from '@kit.NetworkKit'; 9096import { BusinessError } from '@kit.BasicServicesKit'; 9097 9098let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9099let netAddress: socket.NetAddress = { 9100 address: '192.168.xx.xxx', 9101 port: 8080 9102} 9103let tlsSecureOptions: socket.TLSSecureOptions = { 9104 key: "xxxx", 9105 cert: "xxxx", 9106 ca: ["xxxx"], 9107 password: "xxxx", 9108 protocols: socket.Protocol.TLSv12, 9109 useRemoteCipherPrefer: true, 9110 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9111 cipherSuite: "AES256-SHA256" 9112} 9113let tlsConnectOptions: socket.TLSConnectOptions = { 9114 address: netAddress, 9115 secureOptions: tlsSecureOptions, 9116 ALPNProtocols: ["spdy/1", "http/1.1"] 9117} 9118tlsServer.listen(tlsConnectOptions).then(() => { 9119 console.log("listen callback success"); 9120}).catch((err: BusinessError) => { 9121 console.log("failed" + err); 9122}); 9123tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9124 client.getCipherSuite().then((data: Array<string>) => { 9125 console.log('getCipherSuite success:' + JSON.stringify(data)); 9126 }).catch((err: BusinessError) => { 9127 console.error("failed" + err); 9128 }); 9129}); 9130``` 9131 9132### getSignatureAlgorithms<sup>10+</sup> 9133 9134getSignatureAlgorithms(callback: AsyncCallback\<Array\<string\>\>): void 9135 9136在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。 9137 9138**系统能力**:SystemCapability.Communication.NetStack 9139 9140**参数:** 9141 9142| 参数名 | 类型 | 必填 | 说明 | 9143| -------- | -------------------------------- | ---- | ---------------------------------- | 9144| callback | AsyncCallback\<Array\<string\>\> | 是 | 回调函数,返回双方支持的签名算法。 | 9145 9146**错误码:** 9147 9148| 错误码ID | 错误信息 | 9149| -------- | ---------------------- | 9150| 401 | Parameter error. | 9151| 2303501 | SSL is null. | 9152| 2300002 | System internal error. | 9153 9154**示例:** 9155 9156```ts 9157import { socket } from '@kit.NetworkKit'; 9158import { BusinessError } from '@kit.BasicServicesKit'; 9159 9160let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9161let netAddress: socket.NetAddress = { 9162 address: '192.168.xx.xxx', 9163 port: 8080 9164} 9165let tlsSecureOptions: socket.TLSSecureOptions = { 9166 key: "xxxx", 9167 cert: "xxxx", 9168 ca: ["xxxx"], 9169 password: "xxxx", 9170 protocols: socket.Protocol.TLSv12, 9171 useRemoteCipherPrefer: true, 9172 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9173 cipherSuite: "AES256-SHA256" 9174} 9175let tlsConnectOptions: socket.TLSConnectOptions = { 9176 address: netAddress, 9177 secureOptions: tlsSecureOptions, 9178 ALPNProtocols: ["spdy/1", "http/1.1"] 9179} 9180tlsServer.listen(tlsConnectOptions).then(() => { 9181 console.log("listen callback success"); 9182}).catch((err: BusinessError) => { 9183 console.log("failed" + err); 9184}); 9185tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9186 client.getSignatureAlgorithms((err: BusinessError, data: Array<string>) => { 9187 if (err) { 9188 console.log("getSignatureAlgorithms callback error = " + err); 9189 } else { 9190 console.log("getSignatureAlgorithms callback = " + data); 9191 } 9192 }); 9193}); 9194``` 9195 9196### getSignatureAlgorithms<sup>10+</sup> 9197 9198getSignatureAlgorithms(): Promise\<Array\<string\>\> 9199 9200在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。 9201 9202**系统能力**:SystemCapability.Communication.NetStack 9203 9204**返回值:** 9205 9206| 类型 | 说明 | 9207| -------------------------- | --------------------------------------------- | 9208| Promise\<Array\<string\>\> | 以Promise形式返回获取到的双方支持的签名算法。 | 9209 9210**错误码:** 9211 9212| 错误码ID | 错误信息 | 9213| -------- | ---------------------- | 9214| 2303501 | SSL is null. | 9215| 2300002 | System internal error. | 9216 9217**示例:** 9218 9219```ts 9220import { socket } from '@kit.NetworkKit'; 9221import { BusinessError } from '@kit.BasicServicesKit'; 9222 9223let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9224let netAddress: socket.NetAddress = { 9225 address: '192.168.xx.xxx', 9226 port: 8080 9227} 9228let tlsSecureOptions: socket.TLSSecureOptions = { 9229 key: "xxxx", 9230 cert: "xxxx", 9231 ca: ["xxxx"], 9232 password: "xxxx", 9233 protocols: socket.Protocol.TLSv12, 9234 useRemoteCipherPrefer: true, 9235 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9236 cipherSuite: "AES256-SHA256" 9237} 9238let tlsConnectOptions: socket.TLSConnectOptions = { 9239 address: netAddress, 9240 secureOptions: tlsSecureOptions, 9241 ALPNProtocols: ["spdy/1", "http/1.1"] 9242} 9243tlsServer.listen(tlsConnectOptions).then(() => { 9244 console.log("listen callback success"); 9245}).catch((err: BusinessError) => { 9246 console.log("failed" + err); 9247}); 9248tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9249 client.getSignatureAlgorithms().then((data: Array<string>) => { 9250 console.log("getSignatureAlgorithms success" + data); 9251 }).catch((err: BusinessError) => { 9252 console.error("failed" + err); 9253 }); 9254}); 9255``` 9256 9257### getLocalAddress<sup>12+</sup> 9258 9259getLocalAddress(): Promise\<NetAddress\> 9260 9261获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 9262 9263> **说明:** 9264> 在TLSSocketServer通信连接成功之后,才可调用此方法。 9265 9266**系统能力**:SystemCapability.Communication.NetStack 9267 9268**返回值:** 9269 9270| 类型 | 说明 | 9271| -------------- | --------------------------------------------------- | 9272| Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | 9273 9274**错误码:** 9275 9276| 错误码ID | 错误信息 | 9277| -------- | ------------------------------------------- | 9278| 2300002 | System internal error. | 9279| 2301009 | Bad file descriptor. | 9280| 2303188 | Socket operation on non-socket. | 9281 9282**示例:** 9283 9284```ts 9285import { socket } from '@kit.NetworkKit'; 9286import { BusinessError } from '@kit.BasicServicesKit'; 9287 9288let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9289let netAddress: socket.NetAddress = { 9290 address: '192.168.xx.xxx', 9291 port: 8080 9292} 9293let tlsSecureOptions: socket.TLSSecureOptions = { 9294 key: "xxxx", 9295 cert: "xxxx", 9296 ca: ["xxxx"], 9297 password: "xxxx", 9298 protocols: socket.Protocol.TLSv12, 9299 useRemoteCipherPrefer: true, 9300 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9301 cipherSuite: "AES256-SHA256" 9302} 9303let tlsConnectOptions: socket.TLSConnectOptions = { 9304 address: netAddress, 9305 secureOptions: tlsSecureOptions, 9306 ALPNProtocols: ["spdy/1", "http/1.1"] 9307} 9308tlsServer.listen(tlsConnectOptions).then(() => { 9309 console.info("listen callback success"); 9310}).catch((err: BusinessError) => { 9311 console.error("failed" + err); 9312}); 9313 9314tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9315 client.getLocalAddress().then((localAddress: socket.NetAddress) => { 9316 console.info("Family IP Port: " + JSON.stringify(localAddress)); 9317 }).catch((err: BusinessError) => { 9318 console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err)); 9319 }) 9320}); 9321``` 9322 9323### on('message')<sup>10+</sup> 9324 9325on(type: 'message', callback: Callback\<SocketMessageInfo\>): void 9326 9327订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 9328 9329**系统能力**:SystemCapability.Communication.NetStack 9330 9331**参数:** 9332 9333| 参数名 | 类型 | 必填 | 说明 | 9334| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 9335| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 9336| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 9337 9338**错误码:** 9339 9340| 错误码ID | 错误信息 | 9341| -------- | ---------------- | 9342| 401 | Parameter error. | 9343 9344**示例:** 9345 9346```ts 9347import { socket } from '@kit.NetworkKit'; 9348import { BusinessError } from '@kit.BasicServicesKit'; 9349 9350let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9351let netAddress: socket.NetAddress = { 9352 address: '192.168.xx.xxx', 9353 port: 8080 9354} 9355let tlsSecureOptions: socket.TLSSecureOptions = { 9356 key: "xxxx", 9357 cert: "xxxx", 9358 ca: ["xxxx"], 9359 password: "xxxx", 9360 protocols: socket.Protocol.TLSv12, 9361 useRemoteCipherPrefer: true, 9362 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9363 cipherSuite: "AES256-SHA256" 9364} 9365let tlsConnectOptions: socket.TLSConnectOptions = { 9366 address: netAddress, 9367 secureOptions: tlsSecureOptions, 9368 ALPNProtocols: ["spdy/1", "http/1.1"] 9369} 9370tlsServer.listen(tlsConnectOptions).then(() => { 9371 console.log("listen callback success"); 9372}).catch((err: BusinessError) => { 9373 console.log("failed" + err); 9374}); 9375 9376tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9377 client.on('message', (value: socket.SocketMessageInfo) => { 9378 let messageView = ''; 9379 for (let i: number = 0; i < value.message.byteLength; i++) { 9380 let uint8Array = new Uint8Array(value.message) 9381 let messages = uint8Array[i] 9382 let message = String.fromCharCode(messages); 9383 messageView += message; 9384 } 9385 console.log('on message message: ' + JSON.stringify(messageView)); 9386 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 9387 }); 9388}); 9389``` 9390 9391### off('message')<sup>10+</sup> 9392 9393off(type: 'message', callback?: Callback\<SocketMessageInfo\>): void 9394 9395取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 9396 9397**系统能力**:SystemCapability.Communication.NetStack 9398 9399**参数:** 9400 9401| 参数名 | 类型 | 必填 | 说明 | 9402| -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | 9403| type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | 9404| callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | 9405 9406**错误码:** 9407 9408| 错误码ID | 错误信息 | 9409| -------- | ---------------- | 9410| 401 | Parameter error. | 9411 9412**示例:** 9413 9414```ts 9415import { socket } from '@kit.NetworkKit'; 9416import { BusinessError } from '@kit.BasicServicesKit'; 9417 9418let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9419let netAddress: socket.NetAddress = { 9420 address: '192.168.xx.xxx', 9421 port: 8080 9422} 9423let tlsSecureOptions: socket.TLSSecureOptions = { 9424 key: "xxxx", 9425 cert: "xxxx", 9426 ca: ["xxxx"], 9427 password: "xxxx", 9428 protocols: socket.Protocol.TLSv12, 9429 useRemoteCipherPrefer: true, 9430 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9431 cipherSuite: "AES256-SHA256" 9432} 9433let tlsConnectOptions: socket.TLSConnectOptions = { 9434 address: netAddress, 9435 secureOptions: tlsSecureOptions, 9436 ALPNProtocols: ["spdy/1", "http/1.1"] 9437} 9438tlsServer.listen(tlsConnectOptions).then(() => { 9439 console.log("listen callback success"); 9440}).catch((err: BusinessError) => { 9441 console.log("failed" + err); 9442}); 9443 9444let callback = (value: socket.SocketMessageInfo) => { 9445 let messageView = ''; 9446 for (let i: number = 0; i < value.message.byteLength; i++) { 9447 let uint8Array = new Uint8Array(value.message) 9448 let messages = uint8Array[i] 9449 let message = String.fromCharCode(messages); 9450 messageView += message; 9451 } 9452 console.log('on message message: ' + JSON.stringify(messageView)); 9453 console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); 9454} 9455tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9456 client.on('message', callback); 9457 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9458 client.off('message', callback); 9459 client.off('message'); 9460}); 9461``` 9462 9463### on('close')<sup>10+</sup> 9464 9465on(type: 'close', callback: Callback\<void\>): void 9466 9467订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 9468 9469**系统能力**:SystemCapability.Communication.NetStack 9470 9471**参数:** 9472 9473| 参数名 | 类型 | 必填 | 说明 | 9474| -------- | ---------------- | ---- | ----------------------------------- | 9475| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 9476| callback | Callback\<void\> | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9477 9478**错误码:** 9479 9480| 错误码ID | 错误信息 | 9481| -------- | ---------------- | 9482| 401 | Parameter error. | 9483 9484**示例:** 9485 9486```ts 9487import { socket } from '@kit.NetworkKit'; 9488import { BusinessError } from '@kit.BasicServicesKit'; 9489 9490let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9491let netAddress: socket.NetAddress = { 9492 address: '192.168.xx.xxx', 9493 port: 8080 9494} 9495let tlsSecureOptions: socket.TLSSecureOptions = { 9496 key: "xxxx", 9497 cert: "xxxx", 9498 ca: ["xxxx"], 9499 password: "xxxx", 9500 protocols: socket.Protocol.TLSv12, 9501 useRemoteCipherPrefer: true, 9502 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9503 cipherSuite: "AES256-SHA256" 9504} 9505let tlsConnectOptions: socket.TLSConnectOptions = { 9506 address: netAddress, 9507 secureOptions: tlsSecureOptions, 9508 ALPNProtocols: ["spdy/1", "http/1.1"] 9509} 9510tlsServer.listen(tlsConnectOptions).then(() => { 9511 console.log("listen callback success"); 9512}).catch((err: BusinessError) => { 9513 console.log("failed" + err); 9514}); 9515tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9516 client.on('close', () => { 9517 console.log("on close success") 9518 }); 9519}); 9520``` 9521 9522### off('close')<sup>10+</sup> 9523 9524off(type: 'close', callback?: Callback\<void\>): void 9525 9526取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 9527 9528**系统能力**:SystemCapability.Communication.NetStack 9529 9530**参数:** 9531 9532| 参数名 | 类型 | 必填 | 说明 | 9533| -------- | ---------------- | ---- | ----------------------------------- | 9534| type | string | 是 | 订阅的事件类型。'close':关闭事件。 | 9535| callback | Callback\<void\> | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9536 9537**错误码:** 9538 9539| 错误码ID | 错误信息 | 9540| -------- | ---------------- | 9541| 401 | Parameter error. | 9542 9543**示例:** 9544 9545```ts 9546import { socket } from '@kit.NetworkKit'; 9547import { BusinessError } from '@kit.BasicServicesKit'; 9548 9549let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9550let netAddress: socket.NetAddress = { 9551 address: '192.168.xx.xxx', 9552 port: 8080 9553} 9554let tlsSecureOptions: socket.TLSSecureOptions = { 9555 key: "xxxx", 9556 cert: "xxxx", 9557 ca: ["xxxx"], 9558 password: "xxxx", 9559 protocols: socket.Protocol.TLSv12, 9560 useRemoteCipherPrefer: true, 9561 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9562 cipherSuite: "AES256-SHA256" 9563} 9564let tlsConnectOptions: socket.TLSConnectOptions = { 9565 address: netAddress, 9566 secureOptions: tlsSecureOptions, 9567 ALPNProtocols: ["spdy/1", "http/1.1"] 9568} 9569tlsServer.listen(tlsConnectOptions).then(() => { 9570 console.log("listen callback success"); 9571}).catch((err: BusinessError) => { 9572 console.log("failed" + err); 9573}); 9574 9575let callback = () => { 9576 console.log("on close success"); 9577} 9578tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9579 client.on('close', callback); 9580 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9581 client.off('close', callback); 9582 client.off('close'); 9583}); 9584``` 9585 9586### on('error')<sup>10+</sup> 9587 9588on(type: 'error', callback: ErrorCallback): void 9589 9590订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 9591 9592**系统能力**:SystemCapability.Communication.NetStack 9593 9594**参数:** 9595 9596| 参数名 | 类型 | 必填 | 说明 | 9597| -------- | ------------- | ---- | ------------------------------------ | 9598| type | string | 是 | 订阅的事件类型。'error':error事件。 | 9599| callback | ErrorCallback | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9600 9601**错误码:** 9602 9603| 错误码ID | 错误信息 | 9604| -------- | ---------------- | 9605| 401 | Parameter error. | 9606 9607**示例:** 9608 9609```ts 9610import { socket } from '@kit.NetworkKit'; 9611import { BusinessError } from '@kit.BasicServicesKit'; 9612 9613let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9614let netAddress: socket.NetAddress = { 9615 address: '192.168.xx.xxx', 9616 port: 8080 9617} 9618let tlsSecureOptions: socket.TLSSecureOptions = { 9619 key: "xxxx", 9620 cert: "xxxx", 9621 ca: ["xxxx"], 9622 password: "xxxx", 9623 protocols: socket.Protocol.TLSv12, 9624 useRemoteCipherPrefer: true, 9625 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9626 cipherSuite: "AES256-SHA256" 9627} 9628let tlsConnectOptions: socket.TLSConnectOptions = { 9629 address: netAddress, 9630 secureOptions: tlsSecureOptions, 9631 ALPNProtocols: ["spdy/1", "http/1.1"] 9632} 9633tlsServer.listen(tlsConnectOptions).then(() => { 9634 console.log("listen callback success"); 9635}).catch((err: BusinessError) => { 9636 console.log("failed" + err); 9637}); 9638 9639tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9640 client.on('error', (err: BusinessError) => { 9641 console.log("on error, err:" + JSON.stringify(err)) 9642 }); 9643}); 9644``` 9645 9646### off('error')<sup>10+</sup> 9647 9648off(type: 'error', callback?: ErrorCallback): void 9649 9650取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 9651 9652**系统能力**:SystemCapability.Communication.NetStack 9653 9654**参数:** 9655 9656| 参数名 | 类型 | 必填 | 说明 | 9657| -------- | ------------- | ---- | ------------------------------------ | 9658| type | string | 是 | 订阅的事件类型。'error':error事件。 | 9659| callback | ErrorCallback | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | 9660 9661**错误码:** 9662 9663| 错误码ID | 错误信息 | 9664| -------- | ---------------- | 9665| 401 | Parameter error. | 9666 9667**示例:** 9668 9669```ts 9670import { socket } from '@kit.NetworkKit'; 9671import { BusinessError } from '@kit.BasicServicesKit'; 9672 9673let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); 9674let netAddress: socket.NetAddress = { 9675 address: '192.168.xx.xxx', 9676 port: 8080 9677} 9678let tlsSecureOptions: socket.TLSSecureOptions = { 9679 key: "xxxx", 9680 cert: "xxxx", 9681 ca: ["xxxx"], 9682 password: "xxxx", 9683 protocols: socket.Protocol.TLSv12, 9684 useRemoteCipherPrefer: true, 9685 signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", 9686 cipherSuite: "AES256-SHA256" 9687} 9688let tlsConnectOptions: socket.TLSConnectOptions = { 9689 address: netAddress, 9690 secureOptions: tlsSecureOptions, 9691 ALPNProtocols: ["spdy/1", "http/1.1"] 9692} 9693tlsServer.listen(tlsConnectOptions).then(() => { 9694 console.log("listen callback success"); 9695}).catch((err: BusinessError) => { 9696 console.log("failed" + err); 9697}); 9698 9699let callback = (err: BusinessError) => { 9700 console.log("on error, err:" + JSON.stringify(err)); 9701} 9702tlsServer.on('connect', (client: socket.TLSSocketConnection) => { 9703 client.on('error', callback); 9704 // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 9705 client.off('error', callback); 9706 client.off('error'); 9707}); 9708``` 9709