# @ohos.net.socket (Socket连接) 本模块提供利用Socket进行数据传输的能力,支持TCPSocket、UDPSocket、WebSocket和TLSSocket。 > **说明:** > > 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 > 本模块API使用时建议放在worker线程或者taskpool中做网络操作,否则可能会导致UI线程卡顿。 ## 导入模块 ```ts import { socket } from '@kit.NetworkKit'; ``` ## socket.constructUDPSocketInstance constructUDPSocketInstance(): UDPSocket 创建一个UDPSocket对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | --------------------------------- | ---------------------- | | [UDPSocket](#udpsocket) | 返回一个UDPSocket对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); ``` ## UDPSocket UDPSocket连接。在调用UDPSocket的方法前,需要先通过[socket.constructUDPSocketInstance](#socketconstructudpsocketinstance)创建UDPSocket对象。 ### bind bind(address: NetAddress, callback: AsyncCallback\): void 绑定IP地址和端口,端口可以指定或由系统随机分配。使用callback方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | | callback | AsyncCallback\ | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 1234 } udp.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); ``` ### bind bind(address: NetAddress): Promise\ 绑定IP地址和端口,端口可以指定或由系统随机分配。使用Promise方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **返回值:** | 类型 | 说明 | | -------------- | ----------------------------------------- | | Promise\ | 以Promise形式异步返回UDPSocket绑定的结果。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } udp.bind(bindAddr).then(() => { console.log('bind success'); }).catch((err: BusinessError) => { console.log('bind fail'); }); ``` ### send send(options: UDPSendOptions, callback: AsyncCallback\): void 通过UDPSocket连接发送数据。使用callback方式作为异步方法。 发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | | callback | AsyncCallback\ | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let sendOptions: socket.UDPSendOptions = { data: 'Hello, server!', address: netAddress } udp.send(sendOptions, (err: BusinessError) => { if (err) { console.log('send fail'); return; } console.log('send success'); }); ``` ### send send(options: UDPSendOptions): Promise\ 通过UDPSocket连接发送数据。使用Promise方式作为异步方法。 发送数据前,需要先调用[UDPSocket.bind()](#bind)绑定IP地址和端口。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [UDPSendOptions](#udpsendoptions) | 是 | UDPSocket发送参数,参考[UDPSendOptions](#udpsendoptions)。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------- | | Promise\ | 以Promise形式返回UDPSocket连接发送数据的结果。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let sendOptions: socket.UDPSendOptions = { data: 'Hello, server!', address: netAddress } udp.send(sendOptions).then(() => { console.log('send success'); }).catch((err: BusinessError) => { console.log('send fail'); }); ``` ### close close(callback: AsyncCallback\): void 关闭UDPSocket连接。使用callback方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------- | ---- | ---------- | | callback | AsyncCallback\ | 是 | 回调函数。关闭UDPSocket连接后触发回调函数。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); udp.close((err: BusinessError) => { if (err) { console.log('close fail'); return; } console.log('close success'); }) ``` ### close close(): Promise\ 关闭UDPSocket连接。使用Promise方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **返回值:** | 类型 | 说明 | | -------------- | ----------------------------------------- | | Promise\ | 以Promise形式返回关闭UDPSocket连接的结果。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); udp.close().then(() => { console.log('close success'); }).catch((err: BusinessError) => { console.log('close fail'); }); ``` ### getState getState(callback: AsyncCallback\): void 获取UDPSocket状态。使用callback方式作为异步方法。 > **说明:** > bind方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------ | ---- | ---------- | | callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回UDPSocket状态信息,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } udp.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); udp.getState((err: BusinessError, data: socket.SocketStateBase) => { if (err) { console.log('getState fail'); return; } console.log('getState success:' + JSON.stringify(data)); }) }) ``` ### getState getState(): Promise\ 获取UDPSocket状态。使用Promise方式作为异步方法。 > **说明:** > bind方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ----------------------------------------- | | Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取UDPSocket状态的结果。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } udp.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); udp.getState().then((data: socket.SocketStateBase) => { console.log('getState success:' + JSON.stringify(data)); }).catch((err: BusinessError) => { console.log('getState fail' + JSON.stringify(err)); }); }); ``` ### setExtraOptions setExtraOptions(options: UDPExtraOptions, callback: AsyncCallback\): void 设置UDPSocket连接的其他属性。使用callback方式作为异步方法。 > **说明:** > bind方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | | callback | AsyncCallback\ | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } udp.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); let udpextraoptions: socket.UDPExtraOptions = { receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: false, socketTimeout: 6000, broadcast: true } udp.setExtraOptions(udpextraoptions, (err: BusinessError) => { if (err) { console.log('setExtraOptions fail'); return; } console.log('setExtraOptions success'); }) }) ``` ### setExtraOptions setExtraOptions(options: UDPExtraOptions): Promise\ 设置UDPSocket连接的其他属性。使用Promise方式作为异步方法。 > **说明:** > bind方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [UDPExtraOptions](#udpextraoptions) | 是 | UDPSocket连接的其他属性,参考[UDPExtraOptions](#udpextraoptions)。 | **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\ | 以Promise形式返回设置UDPSocket连接的其他属性的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } udp.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); let udpextraoptions: socket.UDPExtraOptions = { receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: false, socketTimeout: 6000, broadcast: true } udp.setExtraOptions(udpextraoptions).then(() => { console.log('setExtraOptions success'); }).catch((err: BusinessError) => { console.log('setExtraOptions fail'); }); }) ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取UDP连接的本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > bind方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } udp.bind(bindAddr).then(() => { console.info('bind success'); udp.getLocalAddress().then((localAddress: socket.NetAddress) => { console.info("UDP_Socket get SUCCESS! Address:" + JSON.stringify(localAddress)); }).catch((err: BusinessError) => { console.error("UDP_Socket get FAILED! Error: " + JSON.stringify(err)); }) }).catch((err: BusinessError) => { console.error('bind fail'); }); ``` ### on('message') on(type: 'message', callback: Callback\): void 订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回订阅某类事件后UDPSocket连接成功的状态信息。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let messageView = ''; udp.on('message', (value: socket.SocketMessageInfo) => { for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); }); ``` ### off('message') off(type: 'message', callback?: Callback\): void 取消订阅UDPSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。返回取消订阅某类事件后UDPSocket连接的状态信息。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let messageView = ''; let callback = (value: socket.SocketMessageInfo) => { for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); } udp.on('message', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 udp.off('message', callback); udp.off('message'); ``` ### on('listening' | 'close') on(type: 'listening' | 'close', callback: Callback\): void 订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------------------------------------------ | | type | string | 是 | 订阅的事件类型。
- 'listening':数据包消息事件。
- 'close':关闭事件。 | | callback | Callback\ | 是 | 回调函数。UDPSocket连接的某类数据包消息事件或关闭事件发生变化后触发回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); udp.on('listening', () => { console.log("on listening success"); }); udp.on('close', () => { console.log("on close success"); }); ``` ### off('listening' | 'close') off(type: 'listening' | 'close', callback?: Callback\): void 取消订阅UDPSocket连接的数据包消息事件或关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------------------------------------------ | | type | string | 是 | 订阅事件类型。
- 'listening':数据包消息事件。
- 'close':关闭事件。 | | callback | Callback\ | 否 | 回调函数。取消订阅UDPSocket连接的数据包消息事件或关闭事件后触发回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let callback1 = () => { console.log("on listening, success"); } udp.on('listening', callback1); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 udp.off('listening', callback1); udp.off('listening'); let callback2 = () => { console.log("on close, success"); } udp.on('close', callback2); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 udp.off('close', callback2); udp.off('close'); ``` ### on('error') on(type: 'error', callback: ErrorCallback): void 订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 回调函数。UDPSocket连接发生error事件后触发回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); udp.on('error', (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)) }); ``` ### off('error') off(type: 'error', callback?: ErrorCallback): void 取消订阅UDPSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 回调函数。UDPSocket连接发生error事件后。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let udp: socket.UDPSocket = socket.constructUDPSocketInstance(); let callback = (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)); } udp.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 udp.off('error', callback); udp.off('error'); ``` ## NetAddress 目标地址信息。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | ------ | ---- | ------------------------------------------------------------ | | address11+ | string | 是 | 本地绑定的ip地址。 | | port | number | 否 | 端口号 ,范围0~65535。如果不指定系统随机分配端口。 | | family | number | 否 | 网络协议类型,可选类型:
- 1:IPv4
- 2:IPv6
默认为1。如果地址为IPV6类型,该字段必须被显式指定为2。 | ## UDPSendOptions UDPSocket发送参数。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | ---------------------------------- | ---- | -------------- | | data | string \| ArrayBuffer | 是 | 发送的数据。 | | address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | ## UDPExtraOptions UDPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ----------------- | ------- | ---- | -------------------------------- | | broadcast | boolean | 否 | 是否可以发送广播。默认为false。 | ## SocketMessageInfo11+ socket连接信息 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ---------- | ------ | ---- | ------------------------------------- | | message | ArrayBuffer | 是 | 接收的事件消息。 | | remoteInfo | [SocketRemoteInfo](#socketremoteinfo) | 是 | socket连接信息。 | ## SocketStateBase Socket的状态信息。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ----------- | ------- | ---- | ---------- | | isBound | boolean | 是 | 是否绑定。 | | isClose | boolean | 是 | 是否关闭。 | | isConnected | boolean | 是 | 是否连接。 | ## SocketRemoteInfo Socket的连接信息。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | ------ | ---- | ------------------------------------------------------------ | | address | string | 是 | 本地绑定的ip地址。 | | family | 'IPv4' \| 'IPv6' | 是 | 网络协议类型,可选类型:
- IPv4
- IPv6
默认为IPv4。 | | port | number | 是 | 端口号,范围0~65535。 | | size | number | 是 | 服务器响应信息的字节长度。 | ## UDP 错误码说明 UDP 其余错误码映射形式为:2301000 + Linux内核错误码。 错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) ## socket.constructMulticastSocketInstance11+ constructMulticastSocketInstance(): MulticastSocket 创建一个MulticastSocket对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------------------------- | ----------------------------- | | [MulticastSocket](#multicastsocket11) | 返回一个MulticastSocket对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); ``` ## MulticastSocket11+ MulticastSocket连接。在调用MulticastSocket的方法前,需要先通过[socket.constructMulticastSocketInstance](#socketconstructmulticastsocketinstance11)创建MulticastSocket对象。 ### addMembership11+ addMembership(multicastAddress: NetAddress, callback: AsyncCallback\): void; 加入多播组。使用callback方法作为异步方法。 > **说明:** > 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 > 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ----------------- | ----------------------------- | ---- | ----------------------------------------- | | multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2301022 | Invalid argument. | | 2301088 | Not a socket. | | 2301098 | Address in use. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); let addr: socket.NetAddress = { address: '239.255.0.1', port: 8080 } multicast.addMembership(addr, (err: Object) => { if (err) { console.log('add membership fail, err: ' + JSON.stringify(err)); return; } console.log('add membership success'); }) ``` ### addMembership11+ addMembership(multicastAddress: NetAddress): Promise\; 加入多播组。使用Promise方法作为异步方法。。 > **说明:** > 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 > 加入多播组后,既可以是发送端,也可以是接收端,相互之间以广播的形式传递数据,不区分客户端或服务端。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ----------------- | ----------------------------- | ---- | -------------------------------------------- | | multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | **返回值:** | 类型 | 说明 | | -------------- | ----------------------------------------------- | | Promise\ | 以Promise形式返回MulticastSocket加入多播组的行为结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2301088 | Not a socket. | | 2301098 | Address in use. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); let addr: socket.NetAddress = { address: '239.255.0.1', port: 8080 } multicast.addMembership(addr).then(() => { console.log('addMembership success'); }).catch((err: Object) => { console.log('addMembership fail'); }); ``` ### dropMembership11+ dropMembership(multicastAddress: NetAddress, callback: AsyncCallback\): void; 退出多播组。使用callback方法作为异步方法。 > **说明:** > 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 > 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ----------------- | ----------------------------- | ---- | ------------------------------------------- | | multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2301088 | Not a socket. | | 2301098 | Address in use. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); let addr: socket.NetAddress = { address: '239.255.0.1', port: 8080 } multicast.dropMembership(addr, (err: Object) => { if (err) { console.log('drop membership fail, err: ' + JSON.stringify(err)); return; } console.log('drop membership success'); }) ``` ### dropMembership11+ dropMembership(multicastAddress: NetAddress): Promise\; 退出多播组。使用Promise方法作为异步方法。。 > **说明:** > 多播使用的IP地址属于特定的范围(例如224.0.0.0到239.255.255.255)。 > 从已加入的多播组中退出,必须在加入多播组 [addMembership](#addmembership11) 之后退出才有效。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ----------------- | ------------------------------------- | ---- | -------------------------------------------- | | multicastAddress | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | **返回值:** | 类型 | 说明 | | -------------- | ----------------------------------------------- | | Promise\ | 以Promise形式返回MulticastSocket加入多播组的执行结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2301088 | Not a socket. | | 2301098 | Address in use. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); let addr: socket.NetAddress = { address: '239.255.0.1', port: 8080 } multicast.dropMembership(addr).then(() => { console.log('drop membership success'); }).catch((err: Object) => { console.log('drop membership fail'); }); ``` ### setMulticastTTL11+ setMulticastTTL(ttl: number, callback: AsyncCallback\): void; 设置多播通信时数据包在网络传输过程中路由器最大跳数。使用callback方法作为异步方法。 > **说明:** > 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 > 范围为 0~255,默认值为 1 。 > 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------------- | --------------------- | ---- | ----------------------------- | | ttl | number | 是 | ttl设置数值,类型为数字number。 | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301022 | Invalid argument. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); let ttl = 8 multicast.setMulticastTTL(ttl, (err: Object) => { if (err) { console.log('set ttl fail, err: ' + JSON.stringify(err)); return; } console.log('set ttl success'); }) ``` ### setMulticastTTL11+ setMulticastTTL(ttl: number): Promise\; 设置多播通信时数据包在网络传输过程中路由器最大跳数。使用Promise方法作为异步方法。。 > **说明:** > 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 > 范围为 0~255,默认值为 1 。 > 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------------- | ---------------------- | ---- | ------------------------------ | | ttl | number | 是 | ttl设置数值,类型为数字Number。 | **返回值:** | 类型 | 说明 | | -------------- | ---------------------------------------------- | | Promise\ | 以Promise形式返回MulticastSocket设置TTL数值的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301022 | Invalid argument. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); multicast.setMulticastTTL(8).then(() => { console.log('set ttl success'); }).catch((err: Object) => { console.log('set ttl failed'); }); ``` ### getMulticastTTL11+ getMulticastTTL(callback: AsyncCallback\): void; 获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用callback方法作为异步方法。 > **说明:** > 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 > 范围为 0~255,默认值为 1 。 > 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------------- | ----------------------- | ---- | --------------------------- | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); multicast.getMulticastTTL((err: Object, value: Number) => { if (err) { console.log('set ttl fail, err: ' + JSON.stringify(err)); return; } console.log('set ttl success, value: ' + JSON.stringify(value)); }) ``` ### getMulticastTTL11+ getMulticastTTL(): Promise\; 获取数据包在网络传输过程中路由器最大跳数(TTL)的值。使用Promise方法作为异步方法。 > **说明:** > 用于限制数据包在网络中传输时能够经过的最大路由器跳数的字段,TTL (Time to live)。 > 范围为 0~255,默认值为 1 。 > 如果一个多播数据包的 TTL 值为 1,那么它只能被直接连接到发送者的主机接收。如果 TTL 被设置为一个较大的值,那么数据包就能够被传送到更远的网络范围内。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ---------------- | --------------------------- | | Promise\ | 以Promise形式返回当前TTL数值。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); multicast.getMulticastTTL().then((value: Number) => { console.log('ttl: ', JSON.stringify(value)); }).catch((err: Object) => { console.log('set ttl failed'); }); ``` ### setLoopbackMode11+ setLoopbackMode(flag: boolean, callback: AsyncCallback\): void; 设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 > **说明:** > 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 > 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------------- | --------------------- | ---- | ---------------------------- | | flag | boolean | 是 | ttl设置数值,类型为boolen 。 | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); multicast.setLoopbackMode(false, (err: Object) => { if (err) { console.log('set loopback mode fail, err: ' + JSON.stringify(err)); return; } console.log('set loopback mode success'); }) ``` ### setLoopbackMode11+ setLoopbackMode(flag: boolean): Promise\; 设置多播通信中的环回模式标志位。使用callback方法作为异步方法。 > **说明:** > 用于设置环回模式,开启或关闭两种状态,默认为开启状态。 > 如果一个多播通信中环回模式设置值为 true,那么它允许主机在本地循环接收自己发送的多播数据包。如果为 false,则主机不会接收到自己发送的多播数据包。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------------- | ---------------------- | ---- | -------------------------------- | | flag | boolean | 是 | 环回模式标志位,类型为数字boolean。| **返回值:** | 类型 | 说明 | | -------------- | ---------------------------------------------- | | Promise\ | 以Promise形式返回MulticastSocket设置环回模式的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); multicast.setLoopbackMode(false).then(() => { console.log('set loopback mode success'); }).catch((err: Object) => { console.log('set loopback mode failed'); }); ``` ### getLoopbackMode11+ getLoopbackMode(callback: AsyncCallback\): void; 获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 > **说明:** > 用于获取当前环回模式开启或关闭的状态。 > 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------------- | ----------------------- | ---- | --------------------------- | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); multicast.getLoopbackMode((err: Object, value: Boolean) => { if (err) { console.log('get loopback mode fail, err: ' + JSON.stringify(err)); return; } console.log('get loopback mode success, value: ' + JSON.stringify(value)); }) ``` ### getLoopbackMode11+ getLoopbackMode(): Promise\; 获取多播通信中的环回模式状态。使用Promise方法作为异步方法。 > **说明:** > 用于获取当前环回模式开启或关闭的状态。 > 如果获取的属性值为 true,表示环回模式是开启的状态,允许主机在本地循环接收自己发送的多播数据包。如果为 false,则表示环回模式是关闭的状态,主机不会接收到自己发送的多播数据包。 > 在调用 [addMembership](#addmembership11) 之后,调用此接口才有效。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ---------------- | --------------------------- | | Promise\ | 以Promise形式返回当前TTL数值。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301088 | Not a socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let multicast: socket.MulticastSocket = socket.constructMulticastSocketInstance(); multicast.getLoopbackMode().then((value: Boolean) => { console.log('loopback mode: ', JSON.stringify(value)); }).catch((err: Object) => { console.log('get loopback mode failed'); }); ``` ## socket.constructTCPSocketInstance7+ constructTCPSocketInstance(): TCPSocket 创建一个TCPSocket对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | --------------------------------- | ---------------------- | | [TCPSocket](#tcpsocket) | 返回一个TCPSocket对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); ``` ## TCPSocket TCPSocket连接。在调用TCPSocket的方法前,需要先通过[socket.constructTCPSocketInstance](#socketconstructtcpsocketinstance7)创建TCPSocket对象。 ### bind bind(address: NetAddress, callback: AsyncCallback\): void 绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用callback方法作为异步方法。 > **说明:** > bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 > TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 > bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tcp.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }) ``` ### bind bind(address: NetAddress): Promise\ 绑定IP地址和端口,端口可以指定为0由系统随机分配或指定为其它非0端口。使用Promise方法作为异步方法。 > **说明:** > bind方法如果因为端口冲突而执行失败,则会由系统随机分配端口号。 > TCP客户端可先调用该接口(tcp.bind)显式绑定IP地址和端口号,再调用tcp.connect完成与服务端的连接;也可直接调用tcp.connect由系统自动绑定IP地址和端口号,完成与服务端的连接。 > bind的IP为'localhost'或'127.0.0.1'时,只允许本地回环接口的连接,即服务端和客户端运行在同一台机器上。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | **返回值:** | 类型 | 说明 | | --------------- | ------------------------------------------------------- | | Promise\ | 以Promise形式返回TCPSocket绑定本机的IP地址和端口的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tcp.bind(bindAddr).then(() => { console.log('bind success'); }).catch((err: BusinessError) => { console.log('bind fail'); }); ``` ### connect connect(options: TCPConnectOptions, callback: AsyncCallback\): void 连接到指定的IP地址和端口。使用callback方法作为异步方法。 > **说明:** > 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions, (err: BusinessError) => { if (err) { console.log('connect fail'); return; } console.log('connect success'); }) ``` ### connect connect(options: TCPConnectOptions): Promise\ 连接到指定的IP地址和端口。使用promise方法作为异步方法。 > **说明:** > 在没有执行tcp.bind的情况下,也可以直接调用该接口完成与TCP服务端的连接。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPConnectOptions](#tcpconnectoptions) | 是 | TCPSocket连接的参数,参考[TCPConnectOptions](#tcpconnectoptions)。 | **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------------- | | Promise\ | 以Promise形式返回TCPSocket连接到指定的IP地址和端口的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions).then(() => { console.log('connect success') }).catch((err: BusinessError) => { console.log('connect fail'); }); ``` ### send send(options: TCPSendOptions, callback: AsyncCallback\): void 通过TCPSocket连接发送数据。使用callback方式作为异步方法。 > **说明:** > connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions, () => { console.log('connect success'); let tcpSendOptions: socket.TCPSendOptions = { data: 'Hello, server!' } tcp.send(tcpSendOptions, (err: BusinessError) => { if (err) { console.log('send fail'); return; } console.log('send success'); }) }) ``` ### send send(options: TCPSendOptions): Promise\ 通过TCPSocket连接发送数据。使用Promise方式作为异步方法。 > **说明:** > connect方法调用成功后,才可调用此方法。该接口为耗时操作,请在Worker线程或taskpool线程调用该接口。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocket发送请求的参数,参考[TCPSendOptions](#tcpsendoptions)。 | **返回值:** | 类型 | 说明 | | -------------- | ------------------------------------------------- | | Promise\ | 以Promise形式返回通过TCPSocket连接发送数据的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions, () => { console.log('connect success'); let tcpSendOptions: socket.TCPSendOptions = { data: 'Hello, server!' } tcp.send(tcpSendOptions).then(() => { console.log('send success'); }).catch((err: BusinessError) => { console.log('send fail'); }); }) ``` ### close close(callback: AsyncCallback\): void 关闭TCPSocket连接。使用callback方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------- | ---- | ---------- | | callback | AsyncCallback\ | 是 | 回调函数。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); tcp.close((err: BusinessError) => { if (err) { console.log('close fail'); return; } console.log('close success'); }) ``` ### close close(): Promise\ 关闭TCPSocket连接。使用Promise方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | ----------------------------------------- | | Promise\ | 以Promise形式返回关闭TCPSocket连接的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); tcp.close().then(() => { console.log('close success'); }).catch((err: BusinessError) => { console.log('close fail'); }); ``` ### getRemoteAddress getRemoteAddress(callback: AsyncCallback\): void 获取对端Socket地址。使用callback方式作为异步方法。 > **说明:** > connect方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------- | ---- | ---------- | | callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功时返回对端Socket地址,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions, () => { console.log('connect success'); tcp.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { if (err) { console.log('getRemoteAddressfail'); return; } console.log('getRemoteAddresssuccess:' + JSON.stringify(data)); }) }); ``` ### getRemoteAddress getRemoteAddress(): Promise\ 获取对端Socket地址。使用Promise方式作为异步方法。 > **说明:** > connect方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ------------------------------------------ | ------------------------------------------ | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions).then(() => { console.log('connect success'); tcp.getRemoteAddress().then(() => { console.log('getRemoteAddress success'); }).catch((err: BusinessError) => { console.log('getRemoteAddressfail'); }); }).catch((err: BusinessError) => { console.log('connect fail'); }); ``` ### getState getState(callback: AsyncCallback\): void 获取TCPSocket状态。使用callback方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------ | ---- | ---------- | | callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功时获取TCPSocket状态,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions, () => { console.log('connect success'); tcp.getState((err: BusinessError, data: socket.SocketStateBase) => { if (err) { console.log('getState fail'); return; } console.log('getState success:' + JSON.stringify(data)); }); }); ``` ### getState getState(): Promise\ 获取TCPSocket状态。使用Promise方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ----------------------------------------- | | Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions).then(() => { console.log('connect success'); tcp.getState().then(() => { console.log('getState success'); }).catch((err: BusinessError) => { console.log('getState fail'); }); }).catch((err: BusinessError) => { console.log('connect fail'); }); ``` ### getSocketFd10+ getSocketFd(callback: AsyncCallback\): void 获取TCPSocket的文件描述符。使用callback方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------ | ---- | ---------- | | callback | AsyncCallback\ | 是 | 回调函数,当成功时,返回socket的文件描述符,失败时,返回undefined。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let bindAddr: socket.NetAddress = { address: '0.0.0.0' } tcp.bind(bindAddr) let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions) tcp.getSocketFd((err: BusinessError, data: number) => { console.info("getSocketFd failed: " + err); console.info("tunenlfd: " + data); }) ``` ### getSocketFd10+ getSocketFd(): Promise\ 获取TCPSocket的文件描述符。使用Promise方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ----------------------------------------- | | Promise\ | 以Promise形式返回socket的文件描述符。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let bindAddr: socket.NetAddress = { address: '0.0.0.0' } tcp.bind(bindAddr) let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(tcpconnectoptions) tcp.getSocketFd().then((data: number) => { console.info("tunenlfd: " + data); }) ``` ### setExtraOptions setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\): void 设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | | callback | AsyncCallback\ | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } interface SocketLinger { on: boolean; linger: number; } tcp.connect(tcpconnectoptions, () => { console.log('connect success'); let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tcp.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { if (err) { console.log('setExtraOptions fail'); return; } console.log('setExtraOptions success'); }); }); ``` ### setExtraOptions setExtraOptions(options: TCPExtraOptions): Promise\ 设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\ | 以Promise形式返回设置TCPSocket连接的其他属性的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tcpconnectoptions: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } interface SocketLinger { on: boolean; linger: number; } tcp.connect(tcpconnectoptions, () => { console.log('connect success'); let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tcp.setExtraOptions(tcpExtraOptions).then(() => { console.log('setExtraOptions success'); }).catch((err: BusinessError) => { console.log('setExtraOptions fail'); }); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取TCPSocket的本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > bind方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', family: 1, port: 8080 } tcp.bind(bindAddr).then(() => { tcp.getLocalAddress().then((localAddress: socket.NetAddress) => { console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); }).catch((err: BusinessError) => { console.error("FAILED! Error:" + JSON.stringify(err)); }) }).catch((err: BusinessError) => { console.error('bind fail'); }); ``` ### on('message') on(type: 'message', callback: Callback): void 订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。返回TCPSocket连接信息。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let messageView = ''; tcp.on('message', (value: socket.SocketMessageInfo) => { for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); }); ``` ### off('message') off(type: 'message', callback?: Callback): void 取消订阅TCPSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。取消订阅TCPSocket连接的接收消息事件时触发回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let messageView = ''; let callback = (value: socket.SocketMessageInfo) => { for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); } tcp.on('message', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tcp.off('message', callback); tcp.off('message'); ``` ### on('connect' | 'close') on(type: 'connect' | 'close', callback: Callback\): void 订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------------------------------------------ | | type | string | 是 | 订阅的事件类型。
- 'connect':连接事件。
- 'close':关闭事件。 | | callback | Callback\ | 是 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); tcp.on('connect', () => { console.log("on connect success") }); tcp.on('close', () => { console.log("on close success") }); ``` ### off('connect' | 'close') off(type: 'connect' | 'close', callback?: Callback\): void 取消订阅TCPSocket的连接事件或关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------------------------------------------ | | type | string | 是 | 订阅的事件类型。
- 'connect':连接事件。
- 'close':关闭事件。 | | callback | Callback\ | 否 | 回调函数。TCPSocket的连接事件或关闭事件触发时调用回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let callback1 = () => { console.log("on connect success"); } tcp.on('connect', callback1); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tcp.off('connect', callback1); tcp.off('connect'); let callback2 = () => { console.log("on close success"); } tcp.on('close', callback2); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tcp.off('close', callback2); tcp.off('close'); ``` ### on('error') on(type: 'error', callback: ErrorCallback): void 订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 回调函数。TCPSocket连接订阅的某类error事件触发时调用回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); tcp.on('error', (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)) }); ``` ### off('error') off(type: 'error', callback?: ErrorCallback): void 取消订阅TCPSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 回调函数。TCPSocket连接取消订阅的某类error事件触发时调用回调函数。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let callback = (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)); } tcp.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tcp.off('error', callback); tcp.off('error'); ``` ## TCPConnectOptions TCPSocket连接的参数。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | ---------------------------------- | ---- | -------------------------- | | address | [NetAddress](#netaddress) | 是 | 绑定的地址以及端口。 | | timeout | number | 否 | 超时时间,单位毫秒(ms)。 | ## TCPSendOptions TCPSocket发送请求的参数。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | -------- | ------ | ---- | ------------------------------------------------------------ | | data | string\| ArrayBuffer | 是 | 发送的数据。 | | encoding | string | 否 | 字符编码(UTF-8,UTF-16BE,UTF-16LE,UTF-16,US-AECII,ISO-8859-1),默认为UTF-8。 | ## TCPExtraOptions TCPSocket连接的其他属性。继承自[ExtraOptionsBase](#extraoptionsbase7)。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ----------------- | ------- | ---- | ------------------------------------------------------------ | | keepAlive | boolean | 否 | 是否保持连接。默认为false。 | | OOBInline | boolean | 否 | 是否为OOB内联。默认为false。 | | TCPNoDelay | boolean | 否 | TCPSocket连接是否无时延。默认为false。 | | socketLinger | \{on:boolean, linger:number\} | 否 | socket是否继续逗留。
- on:是否逗留(true:逗留;false:不逗留)。
- linger:逗留时长,单位毫秒(ms),取值范围为0~65535。
当入参on设置为true时,才需要设置。 | ## socket.constructTCPSocketServerInstance10+ constructTCPSocketServerInstance(): TCPSocketServer 创建一个TCPSocketServer对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ---------------------------------- | ---------------------------- | | [TCPSocketServer](#tcpsocketserver10) | 返回一个TCPSocketServer对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); ``` ## TCPSocketServer10+ TCPSocketServer连接。在调用TCPSocketServer的方法前,需要先通过[socket.constructTCPSocketServerInstance](#socketconstructtcpsocketserverinstance10)创建TCPSocketServer对象。 ### listen10+ listen(address: NetAddress, callback: AsyncCallback\): void 绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用callback方法作为异步方法。 > **说明:** > 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------- | ---- | --------------------------------------------- | | address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | | callback | AsyncCallback\ | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303109 | Bad file number. | | 2303111 | Resource temporarily unavailable. Try again.| | 2303198 | Address already in use. | | 2303199 | Cannot assign requested address. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); }) ``` ### listen10+ listen(address: NetAddress): Promise\ 绑定IP地址和端口,端口可以指定或由系统随机分配。监听并接受与此套接字建立的TCPSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 > **说明:** > 服务端使用该方法完成bind,listen,accept操作,bind方法失败会由系统随机分配端口号。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ------------------------- | ---- | --------------------------------------------- | | address | [NetAddress](#netaddress) | 是 | 目标地址信息。 | **返回值:** | 类型 | 说明 | | -------------- | ----------------------------------------------------------- | | Promise\ | 以Promise形式返回, 成功返回空,失败返回错误码错误信息。| **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303109 | Bad file number. | | 2303111 | Resource temporarily unavailable. Try again.| | 2303198 | Address already in use. | | 2303199 | Cannot assign requested address. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr).then(() => { console.log('listen success'); }).catch((err: BusinessError) => { console.log('listen fail'); }); ``` ### getState10+ getState(callback: AsyncCallback\): void 获取TCPSocketServer状态。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------------------------------------- | ---- | ---------- | | callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); }) tcpServer.getState((err: BusinessError, data: socket.SocketStateBase) => { if (err) { console.log('getState fail'); return; } console.log('getState success:' + JSON.stringify(data)); }) ``` ### getState10+ getState(): Promise\ 获取TCPSocketServer状态。使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ------------------------------------------- | ----------------------------------------- | | Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TCPSocket状态的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); }) tcpServer.getState().then((data: socket.SocketStateBase) => { console.log('getState success' + JSON.stringify(data)); }).catch((err: BusinessError) => { console.log('getState fail'); }); ``` ### setExtraOptions10+ setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\): void 设置TCPSocketServer连接的其他属性。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | | callback | AsyncCallback\ | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); }) interface SocketLinger { on: boolean; linger: number; } let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tcpServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { if (err) { console.log('setExtraOptions fail'); return; } console.log('setExtraOptions success'); }); ``` ### setExtraOptions10+ setExtraOptions(options: TCPExtraOptions): Promise\ 设置TCPSocketServer连接的其他属性,使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ----------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocketServer连接的其他属性。 | **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } interface SocketLinger { on: boolean; linger: number; } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); }) let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tcpServer.setExtraOptions(tcpExtraOptions).then(() => { console.log('setExtraOptions success'); }).catch((err: BusinessError) => { console.log('setExtraOptions fail'); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取TCPSocketServer的本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr).then(() => { tcpServer.getLocalAddress().then((localAddress: socket.NetAddress) => { console.info("SUCCESS! Address:" + JSON.stringify(localAddress)); }).catch((err: BusinessError) => { console.error("FerrorAILED! Error:" + JSON.stringify(err)); }) }).catch((err: BusinessError) => { console.error('listen fail'); }); ``` ### on('connect')10+ on(type: 'connect', callback: Callback\): void 订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------- | ---- | ------------------------------------- | | type | string | 是 | 订阅的事件类型。'connect':连接事件。 | | callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); tcpServer.on('connect', (data: socket.TCPSocketConnection) => { console.log(JSON.stringify(data)) }); }) ``` ### off('connect')10+ off(type: 'connect', callback?: Callback\): void 取消订阅TCPSocketServer的连接事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------- | ---- | ------------------------------------- | | type | string | 是 | 订阅的事件类型。'connect':连接事件。 | | callback | Callback\<[TCPSocketConnection](#tcpsocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); let callback = (data: socket.TCPSocketConnection) => { console.log('on connect message: ' + JSON.stringify(data)); } tcpServer.on('connect', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tcpServer.off('connect', callback); tcpServer.off('connect'); }) ``` ### on('error')10+ on(type: 'error', callback: ErrorCallback): void 订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。| **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); tcpServer.on('error', (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)) }); }) ``` ### off('error')10+ off(type: 'error', callback?: ErrorCallback): void 取消订阅TCPSocketServer连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { if (err) { console.log("listen fail"); return; } console.log("listen success"); let callback = (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)); } tcpServer.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tcpServer.off('error', callback); tcpServer.off('error'); }) ``` ## TCPSocketConnection10+ TCPSocketConnection连接,即TCPSocket客户端与服务端的连接。在调用TCPSocketConnection的方法前,需要先获取TCPSocketConnection对象。 > **说明:** > 客户端与服务端成功建立连接后,才能通过返回的TCPSocketConnection对象调用相应的接口。 **系统能力**:SystemCapability.Communication.NetStack ### 属性 | 名称 | 类型 | 必填 | 说明 | | -------- | ------ | ---- | ----------------------------------------- | | clientId | number | 是 | 客户端与TCPSocketServer建立连接的id。 | ### send10+ send(options: TCPSendOptions, callback: AsyncCallback\): void 通过TCPSocketConnection连接发送数据。使用callback方式作为异步方法。 > **说明:** > 与客户端建立连接后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | | callback | AsyncCallback\ | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { let tcpSendOption: socket.TCPSendOptions = { data: 'Hello, client!' } client.send(tcpSendOption, () => { console.log('send success'); }); }); ``` ### send10+ send(options: TCPSendOptions): Promise\ 通过TCPSocketConnection连接发送数据。使用Promise方式作为异步方法。 > **说明:** > 与客户端建立连接后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | --------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPSendOptions](#tcpsendoptions) | 是 | TCPSocketConnection发送请求的参数。 | **返回值:** | 类型 | 说明 | | -------------- | ----------------------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { let tcpSendOption: socket.TCPSendOptions = { data: 'Hello, client!' } client.send(tcpSendOption).then(() => { console.log('send success'); }).catch((err: BusinessError) => { console.log('send fail'); }); }); ``` ### close10+ close(callback: AsyncCallback\): void 关闭一个与TCPSocket建立的连接。使用callback方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------- | ---- | ---------- | | callback | AsyncCallback\ | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.close((err: BusinessError) => { if (err) { console.log('close fail'); return; } console.log('close success'); }); }); ``` ### close10+ close(): Promise\ 关闭一个与TCPSocket建立的连接。使用Promise方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | ------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 201 | Permission denied. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.close().then(() => { console.log('close success'); }).catch((err: BusinessError) => { console.log('close fail'); }); }); ``` ### getRemoteAddress10+ getRemoteAddress(callback: AsyncCallback\): void 获取对端Socket地址。使用callback方式作为异步方法。 > **说明:** > 与客户端建立连接后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------------- | ---- | ---------- | | callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { if (err) { console.log('getRemoteAddress fail'); return; } console.log('getRemoteAddress success:' + JSON.stringify(data)); }); }); ``` ### getRemoteAddress10+ getRemoteAddress(): Promise\ 获取对端Socket地址。使用Promise方式作为异步方法。 > **说明:** > 与客户端建立连接后,才可调用此方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | --------------------------------- | ------------------------------------------ | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.getRemoteAddress().then(() => { console.log('getRemoteAddress success'); }).catch((err: BusinessError) => { console.log('getRemoteAddress fail'); }); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取TCPSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let listenAddr: socket.NetAddress = { address: "192.168.xx.xx", port: 8080, family: 1 } tcpServer.listen(listenAddr, (err: BusinessError) => { let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let netAddress: socket.NetAddress = { address: "192.168.xx.xx", port: 8080 } let options: socket.TCPConnectOptions = { address: netAddress, timeout: 6000 } tcp.connect(options, (err: BusinessError) => { if (err) { console.error('connect fail'); return; } console.info('connect success!'); }) tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.getLocalAddress().then((localAddress: socket.NetAddress) => { console.info("Family IP Port: " + JSON.stringify(localAddress)); }).catch((err: BusinessError) => { console.error('Error:' + JSON.stringify(err)); }); }) }) ``` ### on('message')10+ on(type: 'message', callback: Callback): void 订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.on('message', (value: socket.SocketMessageInfo) => { let messageView = ''; for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); }); }); ``` ### off('message')10+ off(type: 'message', callback?: Callback): void 取消订阅TCPSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let callback = (value: socket.SocketMessageInfo) => { let messageView = ''; for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); } tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.on('message', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('message', callback); client.off('message'); }); ``` ### on('close')10+ on(type: 'close', callback: Callback\): void 订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'close':关闭事件。 | | callback | Callback\ | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.on('close', () => { console.log("on close success") }); }); ``` ### off('close')10+ off(type: 'close', callback?: Callback\): void 取消订阅TCPSocketConnection的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'close':关闭事件。 | | callback | Callback\ | 否 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); let callback = () => { console.log("on close success"); } tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.on('close', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('close', callback); client.off('close'); }); ``` ### on('error')10+ on(type: 'error', callback: ErrorCallback): void 订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.on('error', (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)) }); }); ``` ### off('error')10+ off(type: 'error', callback?: ErrorCallback): void 取消订阅TCPSocketConnection连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let callback = (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)); } let tcpServer: socket.TCPSocketServer = socket.constructTCPSocketServerInstance(); tcpServer.on('connect', (client: socket.TCPSocketConnection) => { client.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('error', callback); client.off('error'); }); ``` ## TCP 错误码说明 TCP 其余错误码映射形式为:2301000 + Linux内核错误码。 错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) ## socket.constructLocalSocketInstance11+ constructLocalSocketInstance(): LocalSocket 创建一个LocalSocket对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :--------------------------------- | :---------------------- | | [LocalSocket](#localsocket11) | 返回一个LocalSocket对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); ``` ## LocalSocket11+ LocalSocket连接。在调用LocalSocket的方法前,需要先通过[socket.constructLocalSocketInstance](#socketconstructlocalsocketinstance11)创建LocalSocket对象。 ### bind11+ bind(address: LocalAddress): Promise\; 绑定本地套接字文件的路径。使用promise方法作为异步方法。 > **说明:** > bind方法可以使客户端确保有个明确的本地套接字路径,显式的绑定一个本地套接字文件。 > bind方法在本地套接字通信中非必须。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [LocalAddress](#localaddress11) | 是 | 目标地址信息,参考[LocalAddress](#localaddress11)。 | **错误码:** | 错误码ID | 错误信息 | | ------- | -------------------------- | | 401 | Parameter error. | | 2301013 | Insufficient permissions. | | 2301022 | Invalid argument. | | 2301098 | Address already in use. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance() let sandboxPath: string = getContext().filesDir + '/testSocket' let address : socket.LocalAddress = { address: sandboxPath } client.bind(address).then(() => { console.log('bind success') }).catch((err: Object) => { console.error('failed to bind: ' + JSON.stringify(err)) }) ``` ### connect11+ connect(options: LocalConnectOptions): Promise\ 连接到指定的套接字文件。使用promise方法作为异步方法。 > **说明:** > 在没有执行localsocket.bind的情况下,也可以直接调用该接口完成与LocalSocket服务端的连接。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------------- | ---- | ------------------------------------------------------------ | | options | [LocalConnectOptions](#localconnectoptions11) | 是 | LocalSocket连接的参数,参考[LocalConnectOptions](#localconnectoptions11)。 | **返回值:** | 类型 | 说明 | | :-------------- | :---------------------------------------- | | Promise\ | 以Promise形式返回LocalSocket连接服务端的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301013 | Insufficient permissions. | | 2301022 | Invalid argument. | | 2301111 | Connection refused. | | 2301099 | Cannot assign requested address. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let localAddress : socket.LocalAddress = { address: sandboxPath } let connectOpt: socket.LocalConnectOptions = { address: localAddress, timeout: 6000 } client.connect(connectOpt).then(() => { console.log('connect success') }).catch((err: Object) => { console.error('connect fail: ' + JSON.stringify(err)); }); ``` ### send11+ send(options: LocalSendOptions): Promise\ 通过LocalSocket连接发送数据。使用Promise方式作为异步方法。 > **说明:** > connect方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | --------------------------------------- | ---- | ------------------------------------------------------------ | | options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocket发送请求的参数,参考[LocalSendOptions](#localsendoptions11)。 | **返回值:** | 类型 | 说明 | | :-------------- | :------------------------------------------ | | Promise\ | 以Promise形式返回通过LocalSocket发送数据的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301011 | Operation would block. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance() let sandboxPath: string = getContext().filesDir + '/testSocket' let localAddress : socket.LocalAddress = { address: sandboxPath } let connectOpt: socket.LocalConnectOptions = { address: localAddress, timeout: 6000 } client.connect(connectOpt).then(() => { console.log('connect success') }).catch((err: Object) => { console.error('connect failed: ' + JSON.stringify(err)) }) let sendOpt: socket.LocalSendOptions = { data: 'Hello world!' } client.send(sendOpt).then(() => { console.log('send success') }).catch((err: Object) => { console.error('send fail: ' + JSON.stringify(err)) }) ``` ### close11+ close(): Promise\ 关闭LocalSocket连接。使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :-------------- | :----------------------------------------- | | Promise\ | 以Promise形式返回关闭LocalSocket连接的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 2301009 | Bad file descriptor. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); client.close().then(() => { console.log('close success'); }).catch((err: Object) => { console.error('close fail: ' + JSON.stringify(err)); }); ``` ### getState11+ getState(): Promise\ 获取LocalSocket状态。使用Promise方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :------------------------------------------- | :--------------------------------------- | | Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocket状态的结果。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let localAddress : socket.LocalAddress = { address: sandboxPath } let connectOpt: socket.LocalConnectOptions = { address: localAddress, timeout: 6000 } client.connect(connectOpt).then(() => { console.log('connect success'); client.getState().then(() => { console.log('getState success'); }).catch((err: Object) => { console.error('getState fail: ' + JSON.stringify(err)) }); }).catch((err: Object) => { console.error('connect fail: ' + JSON.stringify(err)); }); ``` ### getSocketFd11+ getSocketFd(): Promise\ 获取LocalSocket的文件描述符。使用Promise方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 > 获取由系统内核分配的唯一文件描述符,用于标识当前使用的套接字。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :---------------- | :-------------------------------- | | Promise\ | 以Promise形式返回socket的文件描述符。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let localAddress : socket.LocalAddress = { address: sandboxPath } let connectOpt: socket.LocalConnectOptions = { address: localAddress, timeout: 6000 } client.connect(connectOpt).then(() => { console.log('connect ok') }).catch((err: Object) => { console.error('connect fail: ' + JSON.stringify(err)) }) client.getSocketFd().then((data: number) => { console.info("fd: " + data); }).catch((err: Object) => { console.error("getSocketFd faile: " + JSON.stringify(err)); }) ``` ### setExtraOptions11+ setExtraOptions(options: ExtraOptionsBase): Promise\ 设置LocalSocket的套接字属性,使用Promise方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocket连接的其他属性,参考[ExtraOptionsBase](#extraoptionsbase7)。 | **返回值:** | 类型 | 说明 | | :-------------- | :-------------------------------------------- | | Promise\ | 以Promise形式返回设置LocalSocket套接字属性的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 2301009 | Bad file descriptor. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let localAddress : socket.LocalAddress = { address: sandboxPath } let connectOpt: socket.LocalConnectOptions = { address: localAddress, timeout: 6000 } client.connect(connectOpt).then(() => { console.log('connect success'); let options: socket.ExtraOptionsBase = { receiveBufferSize: 8000, sendBufferSize: 8000, socketTimeout: 3000 } client.setExtraOptions(options).then(() => { console.log('setExtraOptions success'); }).catch((err: Object) => { console.error('setExtraOptions fail: ' + JSON.stringify(err)); }); }).catch((err: Object) => { console.error('connect fail: ' + JSON.stringify(err)); }); ``` ### getExtraOptions11+ getExtraOptions(): Promise\; 获取LocalSocket的套接字属性,使用Promise方式作为异步方法。 > **说明:** > bind或connect方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :-------------------------- | :---------------------------------------- | | Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回设置LocalSocket套接字的属性。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 2301009 | Bad file descriptor. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let localAddress : socket.LocalAddress = { address: sandboxPath } let connectOpt: socket.LocalConnectOptions = { address: localAddress, timeout: 6000 } client.connect(connectOpt).then(() => { console.log('connect success'); client.getExtraOptions().then((options : socket.ExtraOptionsBase) => { console.log('options: ' + JSON.stringify(options)); }).catch((err: Object) => { console.error('setExtraOptions fail: ' + JSON.stringify(err)); }); }).catch((err: Object) => { console.error('connect fail: ' + JSON.stringify(err)); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取LocalSocket的本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > bind方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\ | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket'; let address : socket.LocalAddress = { address: sandboxPath } client.bind(address).then(() => { console.error('bind success'); client.getLocalAddress().then((localPath: string) => { console.info("SUCCESS " + JSON.stringify(localPath)); }).catch((err: BusinessError) => { console.error("FAIL " + JSON.stringify(err)); }) }).catch((err: Object) => { console.info('failed to bind: ' + JSON.stringify(err)); }) ``` ### on('message')11+ on(type: 'message', callback: Callback\): void 订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收的消息。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); client.on('message', (value: socket.LocalSocketMessageInfo) => { const uintArray = new Uint8Array(value.message) let messageView = ''; for (let i = 0; i < uintArray.length; i++) { messageView += String.fromCharCode(uintArray[i]); } console.log('total: ' + JSON.stringify(value)); console.log('message infomation: ' + messageView); }); ``` ### off('message')11+ off(type: 'message', callback?: Callback\): void 取消订阅LocalSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------ | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on中的callback取消一个订阅。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let messageView = ''; let callback = (value: socket.LocalSocketMessageInfo) => { const uintArray = new Uint8Array(value.message) let messageView = ''; for (let i = 0; i < uintArray.length; i++) { messageView += String.fromCharCode(uintArray[i]); } console.log('total: ' + JSON.stringify(value)); console.log('message infomation: ' + messageView); } client.on('message', callback); client.off('message'); ``` ### on('connect')11+ on(type: 'connect', callback: Callback\): void; 订阅LocalSocket的连接事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | --------------------------------------------------------- | | type | string | 是 | 订阅的事件类型。 | | callback | Callback\ | 是 | 以callback的形式异步返回与服务端连接的结果。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); client.on('connect', () => { console.log("on connect success") }); ``` ### off('connect')11+ off(type: 'connect', callback?: Callback\): void; 取消订阅LocalSocket的连接事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | --------------------------------------------------------- | | type | string | 是 | 订阅的事件类型。 | | callback | Callback\ | 否 | 指定传入on中的callback取消一个订阅。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let callback = () => { console.log("on connect success"); } client.on('connect', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('connect', callback); client.off('connect'); ``` ### on('close')11+ on(type: 'close', callback: Callback\): void; 订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------ | | type | string | 是 | 订阅LocalSocket的关闭事件。 | | callback | Callback\ | 是 | 以callback的形式异步返回关闭localsocket的结果。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let callback = () => { console.log("on close success"); } client.on('close', callback); ``` ### off('close')11+ off(type: 'close', callback?: Callback\): void; 订阅LocalSocket的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------ | | type | string | 是 | 订阅LocalSocket的关闭事件。 | | callback | Callback\ | 否 | 取消指定传入on中的callback取消一个订阅。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let callback = () => { console.log("on close success"); } client.on('close', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('close', callback); client.off('close'); ``` ### on('error')11+ on(type: 'error', callback: ErrorCallback): void 订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ---------------------------- | | type | string | 是 | 订阅LocalSocket的error事件。 | | callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); client.on('error', (err: Object) => { console.log("on error, err:" + JSON.stringify(err)) }); ``` ### off('error')11+ off(type: 'error', callback?: ErrorCallback): void; 取消订阅LocalSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ----------------------------- | | type | string | 是 | 取消订阅LocalSocket的error事件。 | | callback | ErrorCallback | 否 | 指定传入on中的callback取消一个订阅。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let callback = (err: Object) => { console.log("on error, err:" + JSON.stringify(err)); } client.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('error', callback); client.off('error'); ``` ## LocalSocketMessageInfo11+ LocalSocket客户端与服务端通信时接收的数据。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | --------------- | --- | ------------------ | | message | ArrayBuffer | 是 | 收到的消息数据。 | | address | string | 是 | 使用的本地套接字路径。| | size | number | 是 | 数据长度。 | ## LocalAddress11+ LocalSocket本地套接字文件路径信息,在传入套接字路径进行绑定时,会在此路径下创建套接字文件。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | ---------- | --- | ------------------ | | address | string | 是 | 本地套接字路径。 | ## LocalConnectOptions11+ LocalSocket客户端在连接服务端时传入的参数信息。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | ---------- | --- | ------------------------------ | | address | [LocalAddress](#localaddress11) | 是 | 指定的本地套接字路径。 | | timeout | number | 否 | 连接服务端的超时时间,单位为毫秒。 | ## LocalSendOptions11+ LocalSocket发送请求的参数。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ------- | ---------- | --- | ------------------- | | data | string \| ArrayBuffer | 是 | 需要发送的数据。 | | encoding | string | 否 | 字符编码。 | ## ExtraOptionsBase7+ Socket套接字的基础属性。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | ----------------- | ------- | ---- | ----------------------------- | | receiveBufferSize | number | 否 | 接收缓冲区大小(单位:Byte)。 | | sendBufferSize | number | 否 | 发送缓冲区大小(单位:Byte)。 | | reuseAddress | boolean | 否 | 是否重用地址。 | | socketTimeout | number | 否 | 套接字超时时间,单位毫秒(ms)。 | ## socket.constructLocalSocketServerInstance11+ constructLocalSocketServerInstance(): LocalSocketServer 创建一个LocalSocketServer对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :---------------------------------- | :---------------------------- | | [LocalSocketServer](#localsocketserver11) | 返回一个LocalSocketServer对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); ``` ## LocalSocketServer11+ LocalSocketServer类。在调用LocalSocketServer的方法前,需要先通过[socket.constructLocalSocketServerInstance](#socketconstructlocalsocketserverinstance11)创建LocalSocketServer对象。 ### listen11+ listen(address: LocalAddress): Promise\ 绑定本地套接字文件,监听并接受与此套接字建立的LocalSocket连接。该接口使用多线程并发处理客户端的数据。使用Promise方法作为异步方法。 > **说明:** > 服务端使用该方法完成bind,listen,accept操作,传入套接字文件路径,调用此接口后会自动生成本地套接字文件。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ------------------------- | ---- | --------------------------------------------- | | address | [LocalAddress](#localaddress11) | 是 | 目标地址信息。 | **返回值:** | 类型 | 说明 | | :-------------- | :---------------------------------------------------- | | Promise\ | 以Promise形式返回执行结果, 成功返回空,失败返回错误码错误信息。| **错误码:** | 错误码ID | 错误信息 | | -------- | --------------------------- | | 401 | Parameter error. | | 2303109 | Bad file number. | | 2301013 | Insufficient permissions. | | 2301022 | Invalid argument. | | 2301098 | Address already in use. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let addr: socket.LocalAddress = { address: sandboxPath } server.listen(addr).then(() => { console.log('listen success'); }).catch((err: Object) => { console.error('listen fail: ' + JSON.stringify(err)); }); ``` ### getState11+ getState(): Promise\ 获取LocalSocketServer状态。使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :------------------------------------------- | :--------------------------------------------- | | Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取LocalSocketServer状态的结果。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let listenAddr: socket.LocalAddress = { address: sandboxPath } server.listen(listenAddr).then(() => { console.log("listen success"); }).catch((err: Object) => { console.error("listen fail: " + JSON.stringify(err)); }) server.getState().then((data: socket.SocketStateBase) => { console.log('getState success: ' + JSON.stringify(data)); }).catch((err: Object) => { console.error('getState fail: ' + JSON.stringify(err)); }); ``` ### setExtraOptions11+ setExtraOptions(options: ExtraOptionsBase): Promise\ 设置LocalSocketServer连接的套接字属性,使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | --------------------------------------- | ---- | ------------------------------ | | options | [ExtraOptionsBase](#extraoptionsbase7) | 是 | LocalSocketServer连接的其他属性。 | **返回值:** | 类型 | 说明 | | :-------------- | :---------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 2301009 | Bad file descriptor. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let listenAddr: socket.NetAddress = { address: sandboxPath } server.listen(listenAddr).then(() => { console.log("listen success"); }).catch((err: Object) => { console.error("listen fail: " + JSON.stringify(err)); }) let options: socket.ExtraOptionsBase = { receiveBufferSize: 6000, sendBufferSize: 6000, socketTimeout: 3000 } server.setExtraOptions(options).then(() => { console.log('setExtraOptions success'); }).catch((err: Object) => { console.error('setExtraOptions fail: ' + JSON.stringify(err)); }); ``` ### getExtraOptions11+ getExtraOptions(): Promise\; 获取LocalSocketServer中连接的套接字的属性,使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :-------------------------- | :-------------------------- | | Promise\<[ExtraOptionsBase](#extraoptionsbase7)\> | 以Promise形式返回套接字的属性。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let listenAddr: socket.LocalAddress = { address: sandboxPath } server.listen(listenAddr).then(() => { console.log("listen success"); }).catch((err: Object) => { console.error("listen fail: " + JSON.stringify(err)); }) server.getExtraOptions().then((options: socket.ExtraOptionsBase) => { console.log('options: ' + JSON.stringify(options)); }).catch((err: Object) => { console.error('getExtraOptions fail: ' + JSON.stringify(err)); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取LocalSocketServer中本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\ | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket'; let listenAddr: socket.LocalAddress = { address: sandboxPath } server.listen(listenAddr).then(() => { console.info("listen success"); server.getLocalAddress().then((localPath: string) => { console.info("SUCCESS " + JSON.stringify(localPath)); }).catch((err: BusinessError) => { console.error("FAIL " + JSON.stringify(err)); }) }).catch((err: Object) => { console.error("listen fail: " + JSON.stringify(err)); }) ``` ### on('connect')11+ on(type: 'connect', callback: Callback\): void 订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------- | ---- | ------------------------------------- | | type | string | 是 | 订阅的事件类型。'connect':连接事件。 | | callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 是 | 以callback的形式异步返回接收到客户端连接的结果。| **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); server.on('connect', (connection: socket.LocalSocketConnection) => { if (connection) { console.log('accept a client') } }); ``` ### off('connect')11+ off(type: 'connect', callback?: Callback\): void 取消订阅LocalSocketServer的连接事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------- | ---- | ------------------------------------- | | type | string | 是 | 订阅的事件类型。'connect':连接事件。 | | callback | Callback\<[LocalSocketConnection](#localsocketconnection11)\> | 否 | 指定传入on的一个callback取消注册。| **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let callback = (connection: socket.LocalSocketConnection) => { if (connection) { console.log('accept a client') } } server.on('connect', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 server.off('connect', callback); server.off('connect'); ``` ### on('error')11+ on(type: 'error', callback: ErrorCallback): void 订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); server.on('error', (err: Object) => { console.error("on error, err:" + JSON.stringify(err)) }); ``` ### off('error')11+ off(type: 'error', callback?: ErrorCallback): void 取消订阅LocalSocketServer连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let callback = (err: Object) => { console.error("on error, err:" + JSON.stringify(err)); } server.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 server.off('error', callback); server.off('error'); ``` ## LocalSocketConnection11+ LocalSocketConnection连接,即LocalSocket客户端与服务端的会话连接。在调用LocalSocketConnection的方法前,需要先获取LocalSocketConnection对象。 > **说明:** > 客户端与服务端成功建立连接后,才能通过返回的LocalSocketConnection对象调用相应的接口。 **系统能力**:SystemCapability.Communication.NetStack ### 属性 | 名称 | 类型 | 必填 | 说明 | | -------- | ------ | ---- | ---------------------------- | | clientId | number | 是 | 客户端与服务端建立的会话连接的id。 | ### send11+ send(options: LocalSendOptions): Promise\ 通过LocalSocketConnection连接对象发送数据。使用Promise方式作为异步方法。 > **说明:** > 服务端与客户端建立连接后,服务端通过connect事件回调得到LocalSocketConnection连接对象后,才可使用连接对象调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | --------------------------------- | ---- | -------------------------------------- | | options | [LocalSendOptions](#localsendoptions11) | 是 | LocalSocketConnection发送请求的参数。 | **返回值:** | 类型 | 说明 | | :-------------- | :---------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 401 | Parameter error. | | 2301011 | Operation would block. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); server.on('connect', (connection: socket.LocalSocketConnection) => { let sendOptions: socket.LocalSendOptions = { data: 'Hello, client!' } connection.send(sendOptions).then(() => { console.log('send success'); }).catch((err: Object) => { console.error('send fail: ' + JSON.stringify(err)); }); }); ``` ### close11+ close(): Promise\ 关闭一个LocalSocket客户端与服务端建立的连接。使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | :-------------- | :------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------- | | 2301009 | Bad file descriptor. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); server.on('connect', (connection: socket.LocalSocketConnection) => { connection.close().then(() => { console.log('close success'); }).catch((err: Object) => { console.error('close fail: ' + JSON.stringify(err)); }); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取LocalSocketConnection连接中的本地Socket地址。使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\ | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket'; let localAddr: socket.LocalAddress = { address: sandboxPath } server.listen(localAddr).then(() => { console.info('listen success'); let client: socket.LocalSocket = socket.constructLocalSocketInstance(); let connectOpt: socket.LocalConnectOptions = { address: localAddr, timeout: 6000 } client.connect(connectOpt).then(() => { server.getLocalAddress().then((localPath: string) => { console.info("success, localPath is" + JSON.stringify(localPath)); }).catch((err: BusinessError) => { console.error("FAIL " + JSON.stringify(err)); }) }).catch((err: Object) => { console.error('connect fail: ' + JSON.stringify(err)); }); }); ``` ### on('message')11+ on(type: 'message', callback: Callback\): void; 订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | --------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 是 | 以callback的形式异步返回接收到的来自客户端的消息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let sandboxPath: string = getContext().filesDir + '/testSocket' let listenAddr: socket.LocalAddress = { address: sandboxPath } server.listen(listenAddr).then(() => { console.log("listen success"); }).catch((err: Object) => { console.error("listen fail: " + JSON.stringify(err)); }); server.on('connect', (connection: socket.LocalSocketConnection) => { connection.on('message', (value: socket.LocalSocketMessageInfo) => { const uintArray = new Uint8Array(value.message); let messageView = ''; for (let i = 0; i < uintArray.length; i++) { messageView += String.fromCharCode(uintArray[i]); } console.log('total: ' + JSON.stringify(value)); console.log('message infomation: ' + messageView); }); }); ``` ### off('message')11+ off(type: 'message', callback?: Callback\): void 取消订阅LocalSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[LocalSocketMessageInfo](#localsocketmessageinfo11)\> | 否 | 指定传入on的一个callback取消注册。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let callback = (value: socket.LocalSocketMessageInfo) => { const uintArray = new Uint8Array(value.message) let messageView = ''; for (let i = 0; i < uintArray.length; i++) { messageView += String.fromCharCode(uintArray[i]); } console.log('total: ' + JSON.stringify(value)); console.log('message infomation: ' + messageView); } server.on('connect', (connection: socket.LocalSocketConnection) => { connection.on('message', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 connection.off('message', callback); connection.off('message'); }); ``` ### on('close')11+ on(type: 'close', callback: Callback\): void 订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'close':关闭事件。 | | callback | Callback\ | 是 | 以callback的形式异步返回会话关闭的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); server.on('connect', (connection: socket.LocalSocketConnection) => { connection.on('close', () => { console.log("on close success") }); }); ``` ### off('close')11+ off(type: 'close', callback?: Callback\): void 取消订阅LocalSocketConnection的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'close':关闭事件。 | | callback | Callback\ | 否 | 指定传入on的一个callback取消订阅。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); let callback = () => { console.log("on close success"); } server.on('connect', (connection: socket.LocalSocketConnection) => { connection.on('close', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 connection.off('close', callback); connection.off('close'); }); ``` ### on('error')11+ on(type: 'error', callback: ErrorCallback): void 订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 以callback的形式异步返回出现错误的结果。| **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); server.on('connect', (connection: socket.LocalSocketConnection) => { connection.on('error', (err: Object) => { console.error("on error, err:" + JSON.stringify(err)) }); }); ``` ### off('error')11+ off(type: 'error', callback?: ErrorCallback): void 取消订阅LocalSocketConnection连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 指定传入on的一个callback取消订阅。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let callback = (err: Object) => { console.error("on error, err: " + JSON.stringify(err)); } let server: socket.LocalSocketServer = socket.constructLocalSocketServerInstance(); server.on('connect', (connection: socket.LocalSocketConnection) => { connection.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 connection.off('error', callback); connection.off('error'); }); ``` ## LocalSocket 错误码说明 LocalSocket 错误码映射形式为:2301000 + Linux内核错误码。 错误码的详细介绍参见[Socket错误码](errorcode-net-socket.md) ## socket.constructTLSSocketInstance9+ constructTLSSocketInstance(): TLSSocket 创建并返回一个TLSSocket对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | --------------------------------- | ---------------------- | | [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); ``` ## socket.constructTLSSocketInstance12+ constructTLSSocketInstance(tcpSocket: TCPSocket): TLSSocket 将TCPSocket升级为TLSSocket,创建并返回一个TLSSocket对象。 > **说明:** > 需要确保TCPSocket已连接,并且当前已经没有传输数据,再调用constructTLSSocketInstance升级TLSSocket。当升级成功后,无需对TCPSocket对象调用close方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | |-----------|----| ---- |------------------------| | tcpSocket | [TCPSocket](#tcpsocket) | 是 | 需要进行升级的TCPSocket对象。 | **返回值:** | 类型 | 说明 | | --------------------------------- | ---------------------- | | [TLSSocket](#tlssocket9) | 返回一个TLSSocket对象。 | **错误码:** | 错误码ID | 错误信息 | |---------|----------------------------------| | 401 | Parameter error. | | 2300002 | System internal error. | | 2303601 | Invalid socket FD. | | 2303602 | Socket is not connected. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tcp: socket.TCPSocket = socket.constructTCPSocketInstance(); let tcpconnectoptions: socket.TCPConnectOptions = { address: { address: '192.168.xx.xxx', port: 8080 }, timeout: 6000 } tcp.connect(tcpconnectoptions, (err: BusinessError) => { if (err) { console.log('connect fail'); return; } console.log('connect success'); // 确保TCPSocket已连接后,再升级TLSSocket let tls: socket.TLSSocket = socket.constructTLSSocketInstance(tcp); }) ``` ## TLSSocket9+ TLSSocket连接。在调用TLSSocket的方法前,需要先通过[socket.constructTLSSocketInstance](#socketconstructtlssocketinstance9)创建TLSSocket对象。 ### bind9+ bind(address: NetAddress, callback: AsyncCallback\): void 绑定IP地址和端口。使用callback方法作为异步方法。 > **说明:** > 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | | callback | AsyncCallback\ | 是 | 回调函数。成功返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码、错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2303198 | Address already in use. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tls.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); ``` ### bind9+ bind(address: NetAddress): Promise\ 绑定IP地址和端口。使用Promise方法作为异步方法。 > **说明:** > 如果TLSSocket对象是通过TCPSocket对象升级创建的,可以不用执行bind方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------- | ---- | ------------------------------------------------------ | | address | [NetAddress](#netaddress) | 是 | 目标地址信息,参考[NetAddress](#netaddress)。 | **返回值:** | 类型 | 说明 | | -------------- | ------------------------------------------------------- | | Promise\ | 以Promise形式返回TLSSocket绑定本机的IP地址和端口的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2303198 | Address already in use. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tls.bind(bindAddr).then(() => { console.log('bind success'); }).catch((err: BusinessError) => { console.log('bind fail'); }); ``` ### getState9+ getState(callback: AsyncCallback\): void 在TLSSocket的bind成功之后,获取TLSSocket状态。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------ | ---- | ---------- | | callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocket状态,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303188 | Socket operation on non-socket.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tls.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); tls.getState((err: BusinessError, data: socket.SocketStateBase) => { if (err) { console.log('getState fail'); return; } console.log('getState success:' + JSON.stringify(data)); }); ``` ### getState9+ getState(): Promise\ 在TLSSocket的bind成功之后,获取TLSSocket状态。使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ----------------------------------------- | | Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocket状态的结果。失败返回错误码,错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303188 | Socket operation on non-socket.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tls.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); tls.getState().then(() => { console.log('getState success'); }).catch((err: BusinessError) => { console.log('getState fail'); }); ``` ### setExtraOptions9+ setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\): void 在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | | callback | AsyncCallback\ | 是 | 回调函数。成功返回设置TCPSocket连接的其他属性的结果,失败返回错误码、错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------------- | | 401 | Parameter error. | | 2303188 | Socket operation on non-socket.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tls.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); interface SocketLinger { on: boolean; linger: number; } let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tls.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { if (err) { console.log('setExtraOptions fail'); return; } console.log('setExtraOptions success'); }); ``` ### setExtraOptions9+ setExtraOptions(options: TCPExtraOptions): Promise\ 在TLSSocket的bind成功之后,设置TCPSocket连接的其他属性,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ----------------------------------------- | ---- | ------------------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TCPSocket连接的其他属性,参考[TCPExtraOptions](#tcpextraoptions)。 | **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\ | 以Promise形式返回设置TCPSocket连接的其他属性的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 401 | Parameter error. | | 2303188 | Socket operation on non-socket.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let bindAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } tls.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); interface SocketLinger { on: boolean; linger: number; } let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tls.setExtraOptions(tcpExtraOptions).then(() => { console.log('setExtraOptions success'); }).catch((err: BusinessError) => { console.log('setExtraOptions fail'); }); ``` ### on('message')9+ on(type: 'message', callback: Callback\): void; 订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。TLSSocket连接订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let messageView = ''; tls.on('message', (value: socket.SocketMessageInfo) => { for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); }); ``` ### off('message')9+ off(type: 'message', callback?: Callback\): void 取消订阅TLSSocket连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。TLSSocket连接取消订阅某类接受消息事件触发的调用函数,返回TLSSocket连接信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let messageView = ''; let callback = (value: socket.SocketMessageInfo) => { for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); } tls.on('message', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tls.off('message', callback); ``` ### on('connect' | 'close')9+ on(type: 'connect' | 'close', callback: Callback\): void 订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------------------------------------------ | | type | string | 是 | 订阅的事件类型。
- 'connect':连接事件。
- 'close':关闭事件。 | | callback | Callback\ | 是 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.on('connect', () => { console.log("on connect success") }); tls.on('close', () => { console.log("on close success") }); ``` ### off('connect' | 'close')9+ off(type: 'connect' | 'close', callback?: Callback\): void 取消订阅TLSSocket的连接事件或关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ------------------------------------------------------------ | | type | string | 是 | 订阅的事件类型。
- 'connect':连接事件。
- 'close':关闭事件。 | | callback | Callback\ | 否 | 回调函数。TLSSocket连接订阅某类事件触发的调用函数。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let callback1 = () => { console.log("on connect success"); } tls.on('connect', callback1); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tls.off('connect', callback1); tls.off('connect'); let callback2 = () => { console.log("on close success"); } tls.on('close', callback2); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tls.off('close', callback2); ``` ### on('error')9+ on(type: 'error', callback: ErrorCallback): void 订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 回调函数。TLSSocket连接订阅某类error事件触发的调用函数。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.on('error', (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)) }); ``` ### off('error')9+ off(type: 'error', callback?: ErrorCallback): void 取消订阅TLSSocket连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 回调函数。TLSSocket连接取消订阅某类error事件触发的调用函数。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); let callback = (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)); } tls.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tls.off('error', callback); ``` ### connect9+ connect(options: TLSConnectOptions, callback: AsyncCallback\): void 在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,使用callback方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------------| ----| --------------- | | options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocket连接所需要的参数。| | callback | AsyncCallback\ | 是 | 回调函数,成功无返回,失败返回错误码、错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | -------------------------------------------- | | 401 | Parameter error. | | 2303104 | Interrupted system call. | | 2303109 | Bad file number. | | 2303111 | Resource temporarily unavailable. Try again. | | 2303188 | Socket operation on non-socket. | | 2303191 | Incorrect socket protocol type. | | 2303198 | Address already in use. | | 2303199 | Cannot assign requested address. | | 2303210 | Connection timed out. | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication let bindAddr: socket.NetAddress = { address: '0.0.0.0', } tlsTwoWay.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); let twoWayNetAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let twoWaySecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: twoWayNetAddr, secureOptions: twoWaySecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsTwoWay.connect(tlsConnectOptions, (err: BusinessError) => { console.error("connect callback error" + err); }); let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication tlsOneWay.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); let oneWayNetAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let oneWaySecureOptions: socket.TLSSecureOptions = { ca: ["xxxx", "xxxx"], cipherSuite: "AES256-SHA256" } let tlsOneWayConnectOptions: socket.TLSConnectOptions = { address: oneWayNetAddr, secureOptions: oneWaySecureOptions } tlsOneWay.connect(tlsOneWayConnectOptions, (err: BusinessError) => { console.error("connect callback error" + err); }); ``` ### connect9+ connect(options: TLSConnectOptions): Promise\ 在TLSSocket上bind成功之后,进行通信连接,并创建和初始化TLS会话,实现建立连接过程,启动与服务器的TLS/SSL握手,实现数据传输功能,该连接包括两种认证方式,单向认证与双向认证,使用Promise方式作为异步方法。需要注意options入参下secureOptions内的ca为必填项,需填入服务端的ca证书(用于认证校验服务端的数字证书),证书内容以"-----BEGIN CERTIFICATE-----"开头,以"-----END CERTIFICATE-----"结尾。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------------------------| ----| --------------- | | options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。| **返回值:** | 类型 | 说明 | | ------------------------------------------- | ----------------------------- | | Promise\ | 以Promise形式返回,成功无返回,失败返回错误码,错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | -------------------------------------------- | | 401 | Parameter error. | | 2303104 | Interrupted system call. | | 2303109 | Bad file number. | | 2303111 | Resource temporarily unavailable. Try again. | | 2303188 | Socket operation on non-socket. | | 2303191 | Incorrect socket protocol type. | | 2303198 | Address already in use. | | 2303199 | Cannot assign requested address. | | 2303210 | Connection timed out. | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsTwoWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // Two way authentication let bindAddr: socket.NetAddress = { address: '0.0.0.0', } tlsTwoWay.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); let twoWayNetAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let twoWaySecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: twoWayNetAddr, secureOptions: twoWaySecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsTwoWay.connect(tlsConnectOptions).then(() => { console.log("connect successfully"); }).catch((err: BusinessError) => { console.log("connect failed " + JSON.stringify(err)); }); let tlsOneWay: socket.TLSSocket = socket.constructTLSSocketInstance(); // One way authentication tlsOneWay.bind(bindAddr, (err: BusinessError) => { if (err) { console.log('bind fail'); return; } console.log('bind success'); }); let oneWayNetAddr: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let oneWaySecureOptions: socket.TLSSecureOptions = { ca: ["xxxx", "xxxx"], cipherSuite: "AES256-SHA256" } let tlsOneWayConnectOptions: socket.TLSConnectOptions = { address: oneWayNetAddr, secureOptions: oneWaySecureOptions } tlsOneWay.connect(tlsOneWayConnectOptions).then(() => { console.log("connect successfully"); }).catch((err: BusinessError) => { console.log("connect failed " + JSON.stringify(err)); }); ``` ### getRemoteAddress9+ getRemoteAddress(callback: AsyncCallback\): void 在TLSSocket通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------- | ---- | ---------- | | callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------------- | | 2303188 | Socket operation on non-socket.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { if (err) { console.log('getRemoteAddress fail'); return; } console.log('getRemoteAddress success:' + JSON.stringify(data)); }); ``` ### getRemoteAddress9+ getRemoteAddress(): Promise\ 在TLSSocket通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ------------------------------------------ | ------------------------------------------ | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303188 | Socket operation on non-socket.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getRemoteAddress().then(() => { console.log('getRemoteAddress success'); }).catch((err: BusinessError) => { console.log('getRemoteAddress fail'); }); ``` ### getCertificate9+ getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 在TLSSocket通信连接成功之后,获取本地的数字证书,该接口只适用于双向认证时,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------| ---- | ---------------| | callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2303504 | An error occurred when verifying the X.509 certificate.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { if (err) { console.log("getCertificate callback error = " + err); } else { console.log("getCertificate callback = " + data); } }); ``` ### getCertificate9+ getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 在TLSSocket通信连接之后,获取本地的数字证书,该接口只适用于双向认证时,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | -------------------- | | Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2303504 | An error occurred when verifying the X.509 certificate.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { util } from '@kit.ArkTS'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getCertificate().then((data: socket.X509CertRawData) => { const decoder = util.TextDecoder.create(); const str = decoder.decodeWithStream(data.data); console.log("getCertificate: " + str); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### getRemoteCertificate9+ getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 在TLSSocket通信连接成功之后,获取服务端的数字证书,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------| ---- | ---------------| | callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回服务端的证书。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { util } from '@kit.ArkTS'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { if (err) { console.log("getRemoteCertificate callback error = " + err); } else { const decoder = util.TextDecoder.create(); const str = decoder.decodeWithStream(data.data); console.log("getRemoteCertificate callback = " + str); } }); ``` ### getRemoteCertificate9+ getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 在TLSSocket通信连接成功之后,获取服务端的数字证书,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | -------------------- | | Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回服务端的数字证书的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { util } from '@kit.ArkTS'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getRemoteCertificate().then((data: socket.X509CertRawData) => { const decoder = util.TextDecoder.create(); const str = decoder.decodeWithStream(data.data); console.log("getRemoteCertificate:" + str); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### getProtocol9+ getProtocol(callback: AsyncCallback\): void 在TLSSocket通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------| ---- | ---------------| | callback | AsyncCallback\ | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。| **错误码:** | 错误码ID | 错误信息 | | ------- | ----------------------------- | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getProtocol((err: BusinessError, data: string) => { if (err) { console.log("getProtocol callback error = " + err); } else { console.log("getProtocol callback = " + data); } }); ``` ### getProtocol9+ getProtocol():Promise\ 在TLSSocket通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | -------------------- | | Promise\ | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getProtocol().then((data: string) => { console.log(data); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### getCipherSuite9+ getCipherSuite(callback: AsyncCallback\\>): void 在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------| ---- | ---------------| | callback | AsyncCallback\\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getCipherSuite((err: BusinessError, data: Array) => { if (err) { console.log("getCipherSuite callback error = " + err); } else { console.log("getCipherSuite callback = " + data); } }); ``` ### getCipherSuite9+ getCipherSuite(): Promise\\> 在TLSSocket通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ---------------------- | --------------------- | | Promise\\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getCipherSuite().then((data: Array) => { console.log('getCipherSuite success:' + JSON.stringify(data)); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### getSignatureAlgorithms9+ getSignatureAlgorithms(callback: AsyncCallback\\>): void 在TLSSocket通信连接成功之后,获取通信双方协商后签名算法,该接口只适配双向认证模式下,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------------------------| ---- | ---------------| | callback | AsyncCallback\\> | 是 | 回调函数,返回双方支持的签名算法。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getSignatureAlgorithms((err: BusinessError, data: Array) => { if (err) { console.log("getSignatureAlgorithms callback error = " + err); } else { console.log("getSignatureAlgorithms callback = " + data); } }); ``` ### getSignatureAlgorithms9+ getSignatureAlgorithms(): Promise\\> 在TLSSocket通信连接成功之后,获取通信双方协商后的签名算法,该接口只适配双向认证模式下,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ---------------------- | -------------------- | | Promise\\> | 以Promise形式返回获取到的双方支持的签名算法。 | **错误码:** | 错误码ID | 错误信息 | | ------- | ------------------------------ | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getSignatureAlgorithms().then((data: Array) => { console.log("getSignatureAlgorithms success" + data); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取TLSSocket的本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > 在TLSSocketServer通信连接成功之后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.getLocalAddress().then((localAddress: socket.NetAddress) => { console.info("Get success: " + JSON.stringify(localAddress)); }).catch((err: BusinessError) => { console.error("Get failed, error: " + JSON.stringify(err)); }) ``` ### send9+ send(data: string \| ArrayBuffer, callback: AsyncCallback\): void 在TLSSocket通信连接成功之后,向服务端发送消息,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -----------------------------| ---- | ---------------| | data | string \| ArrayBuffer | 是 | 发送的数据内容。 | | callback | AsyncCallback\ | 是 | 回调函数,返回TLSSocket发送数据的结果。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | -------------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.send("xxxx", (err: BusinessError) => { if (err) { console.log("send callback error = " + err); } else { console.log("send success"); } }); ``` ### send9+ send(data: string \| ArrayBuffer): Promise\ 在TLSSocket通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -----------------------------| ---- | ---------------| | data | string \| ArrayBuffer | 是 | 发送的数据内容。 | **错误码:** | 错误码ID | 错误信息 | | ------- | -------------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **返回值:** | 类型 | 说明 | | -------------- | -------------------- | | Promise\ | 以Promise形式返回,返回TLSSocket发送数据的结果。失败返回错误码,错误信息。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.send("xxxx").then(() => { console.log("send success"); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### close9+ close(callback: AsyncCallback\): void 在TLSSocket通信连接成功之后,断开连接,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -----------------------------| ---- | ---------------| | callback | AsyncCallback\ | 是 | 回调函数,成功返回TLSSocket关闭连接的结果。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | -------------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.close((err: BusinessError) => { if (err) { console.log("close callback error = " + err); } else { console.log("close success"); } }); ``` ### close9+ close(): Promise\ 在TLSSocket通信连接成功之后,断开连接,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | -------------------- | | Promise\ | 以Promise形式返回,返回TLSSocket关闭连接的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | ------- | -------------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tls: socket.TLSSocket = socket.constructTLSSocketInstance(); tls.close().then(() => { console.log("close success"); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ## TLSConnectOptions9+ TLS连接的操作。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | -------------- | ------------------------------------- | --- |-------------- | | address | [NetAddress](#netaddress) | 是 | 网关地址。 | | secureOptions | [TLSSecureOptions](#tlssecureoptions9) | 是 | TLS安全相关操作。| | ALPNProtocols | Array\ | 否 | ALPN协议,支持["spdy/1", "http/1.1"],默认为[]。 | | skipRemoteValidation12+ | boolean | 否 | 是否跳过对服务端进行证书认证,默认为false。 | ## TLSSecureOptions9+ TLS安全相关操作。当本地证书cert和私钥key不为空时,开启双向验证模式。cert和key其中一项为空时,开启单向验证模式。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 类型 | 必填 | 说明 | | --------------------- | ------------------------------------------------------ | --- |----------------------------------- | | ca | string \| Array\ | 否 | 服务端的ca证书,用于认证校验服务端的数字证书。默认为系统预置CA证书12+。 | | cert | string | 否 | 本地客户端的数字证书。 | | key | string | 否 | 本地数字证书的私钥。 | | password | string | 否 | 读取私钥的密码。 | | protocols | [Protocol](#protocol9) \|Array\<[Protocol](#protocol9)\> | 否 | TLS的协议版本,默认为"TLSv1.2"。 | | useRemoteCipherPrefer | boolean | 否 | 优先使用对等方的密码套件。 | | signatureAlgorithms | string | 否 | 通信过程中的签名算法,默认为"" 。 | | cipherSuite | string | 否 | 通信过程中的加密套件,默认为"" 。 | | isBidirectionalAuthentication12+ | boolean | 否 | 用于设置双向认证,默认为false。 | ## Protocol9+ TLS通信的协议版本。 **系统能力**:SystemCapability.Communication.NetStack | 名称 | 值 | 说明 | | --------- | --------- |------------------ | | TLSv12 | "TLSv1.2" | 使用TLSv1.2协议通信。 | | TLSv13 | "TLSv1.3" | 使用TLSv1.3协议通信。 | ## X509CertRawData9+ type X509CertRawData = cert.EncodingBlob 存储证书的数据。 **系统能力**:SystemCapability.Communication.NetStack | 类型 | 说明 | | ---------------- | --------------------------- | | cert.EncodingBlob | 提供证书编码blob类型。 | ## socket.constructTLSSocketServerInstance10+ constructTLSSocketServerInstance(): TLSSocketServer 创建并返回一个TLSSocketServer对象。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ------------------------------------ | ---------------------------- | | [TLSSocketServer](#tlssocketserver10) | 返回一个TLSSocketServer对象。 | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); ``` ## TLSSocketServer10+ TLSSocketServer连接。在调用TLSSocketServer的方法前,需要先通过[socket.constructTLSSocketServerInstance](#socketconstructtlssocketserverinstance10)创建TLSSocketServer对象。 ### listen10+ listen(options: TLSConnectOptions, callback: AsyncCallback\): void 绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用callback方式作为异步方法。 **注意:**IP地址设置为0.0.0.0时,可以监听本机所有地址。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------------- | ---- | ------------------------------------------------ | | options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | TLSSocketServer连接所需要的参数。 | | callback | AsyncCallback\ | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303109 | Bad file number. | | 2303111 | Resource temporarily unavailable. Try again.| | 2303198 | Address already in use. | | 2303199 | Cannot assign requested address. | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"], skipRemoteValidation: false } tlsServer.listen(tlsConnectOptions, (err: BusinessError) => { console.log("listen callback error" + err); }); ``` ### listen10+ listen(options: TLSConnectOptions): Promise\ 绑定IP地址和端口,在TLSSocketServer上bind成功之后,监听客户端的连接,并创建和初始化TLS会话,实现建立连接过程,加载证书秘钥并验证,使用Promise方式作为异步方法。 **需要权限**:ohos.permission.INTERNET **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ---------------------------------------- | ---- | ------------------ | | options | [TLSConnectOptions](#tlsconnectoptions9) | 是 | 连接所需要的参数。 | **返回值:** | 类型 | 说明 | | --------------- | --------------------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 401 | Parameter error. | | 201 | Permission denied. | | 2300002 | System internal error. | | 2303109 | Bad file number. | | 2303111 | Resource temporarily unavailable. Try again.| | 2303198 | Address already in use. | | 2303199 | Cannot assign requested address. | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"], skipRemoteValidation: false } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); ``` ### getState10+ getState(callback: AsyncCallback\): void 在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------------------------------------------- | ---- | ------------------------------------------------------------ | | callback | AsyncCallback\<[SocketStateBase](#socketstatebase)\> | 是 | 回调函数。成功返回TLSSocketServer状态,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 2303188 | Socket operation on non-socket. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.getState((err: BusinessError, data: socket.SocketStateBase) => { if (err) { console.log('getState fail'); return; } console.log('getState success:' + JSON.stringify(data)); }); ``` ### getState10+ getState(): Promise\ 在TLSSocketServer的listen成功之后,获取TLSSocketServer状态。使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | --------------------------------------------- | ----------------------------------------------------------- | | Promise\<[SocketStateBase](#socketstatebase)\> | 以Promise形式返回获取TLSSocketServer状态的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 2303188 | Socket operation on non-socket. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.getState().then(() => { console.log('getState success'); }).catch((err: BusinessError) => { console.log('getState fail'); }); ``` ### setExtraOptions10+ setExtraOptions(options: TCPExtraOptions, callback: AsyncCallback\): void 在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------ | ---- | ------------------------------------------------ | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | | callback | AsyncCallback\ | 是 | 回调函数。成功返回空,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 2303188 | Socket operation on non-socket. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); interface SocketLinger { on: boolean; linger: number; } let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tlsServer.setExtraOptions(tcpExtraOptions, (err: BusinessError) => { if (err) { console.log('setExtraOptions fail'); return; } console.log('setExtraOptions success'); }); ``` ### setExtraOptions10+ setExtraOptions(options: TCPExtraOptions): Promise\ 在TLSSocketServer的listen成功之后,设置TLSSocketServer连接的其他属性,使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------- | ------------------------------------ | ---- | ------------------------------- | | options | [TCPExtraOptions](#tcpextraoptions) | 是 | TLSSocketServer连接的其他属性。 | **返回值:** | 类型 | 说明 | | -------------- | -------------------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 2303188 | Socket operation on non-socket. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); interface SocketLinger { on: boolean; linger: number; } let tcpExtraOptions: socket.TCPExtraOptions = { keepAlive: true, OOBInline: true, TCPNoDelay: true, socketLinger: { on: true, linger: 10 } as SocketLinger, receiveBufferSize: 1000, sendBufferSize: 1000, reuseAddress: true, socketTimeout: 3000 } tlsServer.setExtraOptions(tcpExtraOptions).then(() => { console.log('setExtraOptions success'); }).catch((err: BusinessError) => { console.log('setExtraOptions fail'); }); ``` ### getCertificate10+ getCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 在TLSSocketServer通信连接成功之后,获取本地的数字证书,使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------------- | ---- | -------------------------------------------------------- | | callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,成功返回本地的证书,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303504 | An error occurred when verifying the X.509 certificate. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { util } from '@kit.ArkTS'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.getCertificate((err: BusinessError, data: socket.X509CertRawData) => { if (err) { console.log("getCertificate callback error = " + err); } else { const decoder = util.TextDecoder.create(); const str = decoder.decodeWithStream(data.data); console.log("getCertificate callback: " + str); } }); ``` ### getCertificate10+ getCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 在TLSSocketServer通信连接之后,获取本地的数字证书,使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ------------------------------------------------------------ | | Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回本地的数字证书的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 2303501 | SSL is null. | | 2303504 | An error occurred when verifying the X.509 certificate. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { util } from '@kit.ArkTS'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.getCertificate().then((data: socket.X509CertRawData) => { const decoder = util.TextDecoder.create(); const str = decoder.decodeWithStream(data.data); console.log("getCertificate: " + str); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### getProtocol10+ getProtocol(callback: AsyncCallback\): void 在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------- | ---- | ---------------------------------------------------- | | callback | AsyncCallback\ | 是 | 回调函数,返回通信的协议。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.getProtocol((err: BusinessError, data: string) => { if (err) { console.log("getProtocol callback error = " + err); } else { console.log("getProtocol callback = " + data); } }); ``` ### getProtocol10+ getProtocol():Promise\ 在TLSSocketServer通信连接成功之后,获取通信的协议版本,使用Promise方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------- | ------------------------------------------------------- | | Promise\ | 以Promise形式返回通信的协议。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.getProtocol().then((data: string) => { console.log(data); }).catch((err: BusinessError) => { console.error("failed" + err); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取TLSSocketServer的本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > 在TLSSocketServer通信连接成功之后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocket = socket.constructTLSSocketServerInstance(); tlsServer.getLocalAddress().then((localAddress: socket.NetAddress) => { console.info("Get success: " + JSON.stringify(localAddress)); }).catch((err: BusinessError) => { console.error("Get failed, error: " + JSON.stringify(err)); }) ``` ### on('connect')10+ on(type: 'connect', callback: Callback\): void 订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------- | ---- | ------------------------------------- | | type | string | 是 | 订阅的事件类型。'connect':连接事件。 | | callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.on('connect', (data: socket.TLSSocketConnection) => { console.log(JSON.stringify(data)) }); ``` ### off('connect')10+ off(type: 'connect', callback?: Callback\): void 取消订阅TLSSocketServer的连接事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 > 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------- | ---- | ------------------------------------- | | type | string | 是 | 订阅的事件类型。'connect':连接事件。 | | callback | Callback\<[TLSSocketConnection](#tlssocketconnection10)\> | 否 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); let callback = (data: socket.TLSSocketConnection) => { console.log('on connect message: ' + JSON.stringify(data)); } tlsServer.on('connect', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tlsServer.off('connect', callback); tlsServer.off('connect'); ``` ### on('error')10+ on(type: 'error', callback: ErrorCallback): void 订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); tlsServer.on('error', (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)) }); ``` ### off('error')10+ off(type: 'error', callback?: ErrorCallback): void 取消订阅TLSSocketServer连接的error事件。使用callback方式作为异步方法。 > **说明:** > listen方法调用成功后,才可调用此方法。 > 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 回调函数。失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed: " + JSON.stringify(err)); }); let callback = (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)); } tlsServer.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 tlsServer.off('error', callback); tlsServer.off('error'); ``` ## TLSSocketConnection10+ TLSSocketConnection连接,即TLSSocket客户端与服务端的连接。在调用TLSSocketConnection的方法前,需要先获取TLSSocketConnection对象。 > **说明:** > 客户端与服务端成功建立连接后,才能通过返回的TLSSocketConnection对象调用相应的接口。 **系统能力**:SystemCapability.Communication.NetStack ### 属性 | 名称 | 类型 | 必填 | 说明 | | -------- | ------ | ---- | ------------------------------------- | | clientId | number | 是 | 客户端与TLSSocketServer建立连接的id。 | ### send10+ send(data: string \| ArrayBuffer, callback: AsyncCallback\): void 在TLSSocketServer通信连接成功之后,向客户端发送消息,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------- | ---- | ------------------------------------------------ | | data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | | callback | AsyncCallback\ | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call.| | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.send('Hello, client!', (err: BusinessError) => { if (err) { console.log('send fail'); return; } console.log('send success'); }); }); ``` ### send10+ send(data: string \| ArrayBuffer): Promise\ 在TLSSocketServer通信连接成功之后,向服务端发送消息,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------ | ------ | ---- | ------------------------------------- | | data | string \| ArrayBuffer | 是 | TLSSocketServer发送数据所需要的参数。 | **返回值:** | 类型 | 说明 | | --------------- | --------------------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空,失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303503 | An error occurred when writing data on the TLS socket.| | 2303505 | An error occurred in the TLS system call.| | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.send('Hello, client!').then(() => { console.log('send success'); }).catch((err: BusinessError) => { console.log('send fail'); }); }); ``` ### close10+ close(callback: AsyncCallback\): void 在与TLSSocketServer通信连接成功之后,断开连接,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | --------------------- | ---- | ------------------------------------------------ | | callback | AsyncCallback\ | 是 | 回调函数,成功返回空,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.close((err: BusinessError) => { if (err) { console.log('close fail'); return; } console.log('close success'); }); }); ``` ### close10+ close(): Promise\ 在与TLSSocketServer通信连接成功之后,断开连接,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | --------------- | --------------------------------------------------------- | | Promise\ | 以Promise形式返回,成功返回空。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 2303501 | SSL is null. | | 2303505 | An error occurred in the TLS system call. | | 2303506 | Failed to close the TLS connection. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.close().then(() => { console.log('close success'); }).catch((err: BusinessError) => { console.log('close fail'); }); }); ``` ### getRemoteAddress10+ getRemoteAddress(callback: AsyncCallback\): void 在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------- | ---- | ------------------------------------------------------------ | | callback | AsyncCallback\<[NetAddress](#netaddress)\> | 是 | 回调函数。成功返回对端的socket地址,失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 401 | Parameter error. | | 2303188 | Socket operation on non-socket. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getRemoteAddress((err: BusinessError, data: socket.NetAddress) => { if (err) { console.log('getRemoteAddress fail'); return; } console.log('getRemoteAddress success:' + JSON.stringify(data)); }); }); ``` ### getRemoteAddress10+ getRemoteAddress(): Promise\ 在TLSSocketServer通信连接成功之后,获取对端Socket地址。使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------------------------- | ----------------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取对端socket地址的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------- | | 2303188 | Socket operation on non-socket. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getRemoteAddress().then((data: socket.NetAddress) => { console.log('getRemoteAddress success:' + JSON.stringify(data)); }).catch((err: BusinessError) => { console.error("failed" + err); }); }); ``` ### getRemoteCertificate10+ getRemoteCertificate(callback: AsyncCallback\<[X509CertRawData](#x509certrawdata9)\>): void 在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ----------------------------------------------------- | ---- | ---------------------------------------------------- | | callback | AsyncCallback\<[X509CertRawData](#x509certrawdata9)\> | 是 | 回调函数,返回对端的证书。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { util } from '@kit.ArkTS'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getRemoteCertificate((err: BusinessError, data: socket.X509CertRawData) => { if (err) { console.log("getRemoteCertificate callback error: " + err); } else { const decoder = util.TextDecoder.create(); const str = decoder.decodeWithStream(data.data); console.log("getRemoteCertificate callback: " + str); } }); }); ``` ### getRemoteCertificate10+ getRemoteCertificate():Promise\<[X509CertRawData](#x509certrawdata9)\> 在TLSSocketServer通信连接成功之后,获取对端的数字证书,该接口只适用于客户端向服务端发送证书时,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | ----------------------------------------------- | ------------------------------------------------------------ | | Promise\<[X509CertRawData](#x509certrawdata9)\> | 以Promise形式返回对端的数字证书的结果。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; import { util } from '@kit.ArkTS'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getRemoteCertificate().then((data: socket.X509CertRawData) => { const decoder = util.TextDecoder.create(); const str = decoder.decodeWithStream(data.data); console.log("getRemoteCertificate success: " + str); }).catch((err: BusinessError) => { console.error("failed" + err); }); }); ``` ### getCipherSuite10+ getCipherSuite(callback: AsyncCallback\\>): void 在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------------------- | ---- | ------------------------------------------------------------ | | callback | AsyncCallback\\> | 是 | 回调函数,返回通信双方支持的加密套件。失败返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303505 | An error occurred in the TLS system call.| | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getCipherSuite((err: BusinessError, data: Array) => { if (err) { console.log("getCipherSuite callback error = " + err); } else { console.log("getCipherSuite callback = " + data); } }); }); ``` ### getCipherSuite10+ getCipherSuite(): Promise\\> 在TLSSocketServer通信连接成功之后,获取通信双方协商后的加密套件,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------------------- | ------------------------------------------------------------ | | Promise\\> | 以Promise形式返回通信双方支持的加密套件。失败返回错误码,错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | -------------------------------------- | | 2303501 | SSL is null. | | 2303502 | An error occurred when reading data on the TLS socket.| | 2303505 | An error occurred in the TLS system call. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getCipherSuite().then((data: Array) => { console.log('getCipherSuite success:' + JSON.stringify(data)); }).catch((err: BusinessError) => { console.error("failed" + err); }); }); ``` ### getSignatureAlgorithms10+ getSignatureAlgorithms(callback: AsyncCallback\\>): void 在TLSSocketServer通信连接成功之后,获取通信双方协商后签名算法,使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | -------------------------------- | ---- | ---------------------------------- | | callback | AsyncCallback\\> | 是 | 回调函数,返回双方支持的签名算法。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 401 | Parameter error. | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getSignatureAlgorithms((err: BusinessError, data: Array) => { if (err) { console.log("getSignatureAlgorithms callback error = " + err); } else { console.log("getSignatureAlgorithms callback = " + data); } }); }); ``` ### getSignatureAlgorithms10+ getSignatureAlgorithms(): Promise\\> 在TLSSocketServer通信连接成功之后,获取通信双方协商后的签名算法,使用Promise方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------------------- | --------------------------------------------- | | Promise\\> | 以Promise形式返回获取到的双方支持的签名算法。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------------- | | 2303501 | SSL is null. | | 2300002 | System internal error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getSignatureAlgorithms().then((data: Array) => { console.log("getSignatureAlgorithms success" + data); }).catch((err: BusinessError) => { console.error("failed" + err); }); }); ``` ### getLocalAddress12+ getLocalAddress(): Promise\ 获取TLSSocketConnection连接的本地Socket地址。使用Promise方式作为异步方法。 > **说明:** > 在TLSSocketServer通信连接成功之后,才可调用此方法。 **系统能力**:SystemCapability.Communication.NetStack **返回值:** | 类型 | 说明 | | -------------- | --------------------------------------------------- | | Promise\<[NetAddress](#netaddress)\> | 以Promise形式返回获取本地socket地址的结果。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ------------------------------------------- | | 2300002 | System internal error. | | 2301009 | Bad file descriptor. | | 2303188 | Socket operation on non-socket. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.info("listen callback success"); }).catch((err: BusinessError) => { console.error("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.getLocalAddress().then((localAddress: socket.NetAddress) => { console.info("Family IP Port: " + JSON.stringify(localAddress)); }).catch((err: BusinessError) => { console.error("TLS Client Get Family IP Port failed, error: " + JSON.stringify(err)); }) }); ``` ### on('message')10+ on(type: 'message', callback: Callback\): void 订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 是 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.on('message', (value: socket.SocketMessageInfo) => { let messageView = ''; for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); }); }); ``` ### off('message')10+ off(type: 'message', callback?: Callback\): void 取消订阅TLSSocketConnection连接的接收消息事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------------------------------------------------------ | ---- | ----------------------------------------- | | type | string | 是 | 订阅的事件类型。'message':接收消息事件。 | | callback | Callback\<[SocketMessageInfo](#socketmessageinfo11)\> | 否 | 回调函数。成功时返回TLSSocketConnection连接信息,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); let callback = (value: socket.SocketMessageInfo) => { let messageView = ''; for (let i: number = 0; i < value.message.byteLength; i++) { let uint8Array = new Uint8Array(value.message) let messages = uint8Array[i] let message = String.fromCharCode(messages); messageView += message; } console.log('on message message: ' + JSON.stringify(messageView)); console.log('remoteInfo: ' + JSON.stringify(value.remoteInfo)); } tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.on('message', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('message', callback); client.off('message'); }); ``` ### on('close')10+ on(type: 'close', callback: Callback\): void 订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'close':关闭事件。 | | callback | Callback\ | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.on('close', () => { console.log("on close success") }); }); ``` ### off('close')10+ off(type: 'close', callback?: Callback\): void 取消订阅TLSSocketConnection的关闭事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ---------------- | ---- | ----------------------------------- | | type | string | 是 | 订阅的事件类型。'close':关闭事件。 | | callback | Callback\ | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); let callback = () => { console.log("on close success"); } tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.on('close', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('close', callback); client.off('close'); }); ``` ### on('error')10+ on(type: 'error', callback: ErrorCallback): void 订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 是 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.on('error', (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)) }); }); ``` ### off('error')10+ off(type: 'error', callback?: ErrorCallback): void 取消订阅TLSSocketConnection连接的error事件。使用callback方式作为异步方法。 **系统能力**:SystemCapability.Communication.NetStack **参数:** | 参数名 | 类型 | 必填 | 说明 | | -------- | ------------- | ---- | ------------------------------------ | | type | string | 是 | 订阅的事件类型。'error':error事件。 | | callback | ErrorCallback | 否 | 回调函数。成功时返回空,失败时返回错误码、错误信息。 | **错误码:** | 错误码ID | 错误信息 | | -------- | ---------------- | | 401 | Parameter error. | **示例:** ```ts import { socket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let tlsServer: socket.TLSSocketServer = socket.constructTLSSocketServerInstance(); let netAddress: socket.NetAddress = { address: '192.168.xx.xxx', port: 8080 } let tlsSecureOptions: socket.TLSSecureOptions = { key: "xxxx", cert: "xxxx", ca: ["xxxx"], password: "xxxx", protocols: socket.Protocol.TLSv12, useRemoteCipherPrefer: true, signatureAlgorithms: "rsa_pss_rsae_sha256:ECDSA+SHA256", cipherSuite: "AES256-SHA256" } let tlsConnectOptions: socket.TLSConnectOptions = { address: netAddress, secureOptions: tlsSecureOptions, ALPNProtocols: ["spdy/1", "http/1.1"] } tlsServer.listen(tlsConnectOptions).then(() => { console.log("listen callback success"); }).catch((err: BusinessError) => { console.log("failed" + err); }); let callback = (err: BusinessError) => { console.log("on error, err:" + JSON.stringify(err)); } tlsServer.on('connect', (client: socket.TLSSocketConnection) => { client.on('error', callback); // 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。 client.off('error', callback); client.off('error'); }); ```