1# @ohos.bluetooth.socket (蓝牙socket模块) 2 3socket模块提供了操作和管理蓝牙socket的方法。 4 5> **说明:** 6> 7> 本模块首批接口从API version 10开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8 9 10 11## 导入模块 12 13```js 14import { socket } from '@kit.ConnectivityKit'; 15``` 16 17## socket.sppListen 18 19sppListen(name: string, options: SppOptions, callback: AsyncCallback<number>): void 20 21创建一个服务端监听Socket。使用Callback异步回调。 22 23**需要权限**:ohos.permission.ACCESS_BLUETOOTH 24 25**系统能力**:SystemCapability.Communication.Bluetooth.Core。 26 27**参数:** 28 29| 参数名 | 类型 | 必填 | 说明 | 30| -------- | --------------------------- | ---- | ----------------------- | 31| name | string | 是 | 服务的名称。 | 32| options | [SppOptions](#sppoptions) | 是 | spp监听配置参数。 | 33| callback | AsyncCallback<number> | 是 | 表示回调函数的入参,服务端Socket的id。 | 34 35**错误码**: 36 37以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 38 39| 错误码ID | 错误信息 | 40| -------- | ---------------------------- | 41|201 | Permission denied. | 42|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 43|801 | Capability not supported. | 44|2900001 | Service stopped. | 45|2900003 | Bluetooth disabled. | 46|2900004 | Profile not supported. | 47|2900099 | Operation failed. | 48 49**示例:** 50 51```js 52import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 53let serverNumber = -1; 54let serverSocket = (code: BusinessError, number: number) => { 55 if (code) { 56 console.error('sppListen error, code is ' + code); 57 return; 58 } else { 59 serverNumber = number; 60 console.info('sppListen success, serverNumber = ' + serverNumber); 61 } 62} 63 64let sppOption:socket.SppOptions = {uuid: '00001810-0000-1000-8000-00805F9B34FB', secure: false, type: 0}; 65try { 66 socket.sppListen('server1', sppOption, serverSocket); 67} catch (err) { 68 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 69} 70``` 71 72 73## socket.sppAccept 74 75sppAccept(serverSocket: number, callback: AsyncCallback<number>): void 76 77服务端监听socket等待客户端连接。使用Callback异步回调。 78 79**系统能力**:SystemCapability.Communication.Bluetooth.Core。 80 81**参数:** 82 83| 参数名 | 类型 | 必填 | 说明 | 84| ------------ | --------------------------- | ---- | ----------------------- | 85| serverSocket | number | 是 | 服务端socket的id。 | 86| callback | AsyncCallback<number> | 是 | 表示回调函数的入参,客户端socket的id。 | 87 88**错误码**: 89 90以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 91 92| 错误码ID | 错误信息 | 93| -------- | ---------------------------- | 94|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 95|801 | Capability not supported. | 96|2900001 | Service stopped. | 97|2900003 | Bluetooth disabled. | 98|2900004 | Profile not supported. | 99|2900099 | Operation failed. | 100 101**示例:** 102 103```js 104import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 105let clientNumber = -1; 106let serverNumber = -1; 107let acceptClientSocket = (code: BusinessError, number: number) => { 108 if (code) { 109 console.error('sppListen error, code is ' + code); 110 return; 111 } else { 112 clientNumber = number; // 获取的clientNumber用作客户端后续读/写操作socket的id。 113 console.info('sppListen success, serverNumber = ' + clientNumber); 114 } 115} 116try { 117 socket.sppAccept(serverNumber, acceptClientSocket); // serverNumber是sppListen回调中得到的serverNumber。 118} catch (err) { 119 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 120} 121``` 122 123 124## socket.sppConnect 125 126sppConnect(deviceId: string, options: SppOptions, callback: AsyncCallback<number>): void 127 128客户端向远端设备发起spp连接。使用Callback异步回调。 129 130**需要权限**:ohos.permission.ACCESS_BLUETOOTH 131 132**系统能力**:SystemCapability.Communication.Bluetooth.Core。 133 134**参数:** 135 136| 参数名 | 类型 | 必填 | 说明 | 137| -------- | --------------------------- | ---- | ------------------------------ | 138| deviceId | string | 是 | 对端设备地址,例如:"XX:XX:XX:XX:XX:XX"。 | 139| options | [SppOptions](#sppoptions) | 是 | spp客户端连接配置参数。 | 140| callback | AsyncCallback<number> | 是 | 表示回调函数的入参,客户端socket的id。 | 141 142**错误码**: 143 144以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 145 146| 错误码ID | 错误信息 | 147| -------- | ---------------------------- | 148|201 | Permission denied. | 149|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. 3. Parameter verification failed. | 150|801 | Capability not supported. | 151|2900001 | Service stopped. | 152|2900003 | Bluetooth disabled. | 153|2900004 | Profile not supported. | 154|2900099 | Operation failed. | 155 156**示例:** 157 158```js 159import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 160 161let clientSocket = (code: BusinessError, number: number) => { 162 if (code) { 163 console.error('sppListen error, code is ' + code); 164 return; 165 } else { 166 // 获取的number用作客户端后续读/写操作socket的id。 167 console.info('bluetooth serverSocket Number: ' + number); 168 } 169} 170let sppOption:socket.SppOptions = {uuid: '00001810-0000-1000-8000-00805F9B34FB', secure: false, type: 0}; 171try { 172 socket.sppConnect('XX:XX:XX:XX:XX:XX', sppOption, clientSocket); 173} catch (err) { 174 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 175} 176``` 177 178 179## socket.sppCloseServerSocket 180 181sppCloseServerSocket(socket: number): void 182 183关闭服务端监听Socket,入参socket由sppListen接口返回。 184 185**系统能力**:SystemCapability.Communication.Bluetooth.Core。 186 187**参数:** 188 189| 参数名 | 类型 | 必填 | 说明 | 190| ------ | ------ | ---- | --------------- | 191| socket | number | 是 | 服务端监听socket的id。 | 192 193**错误码**: 194 195以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 196 197| 错误码ID | 错误信息 | 198| -------- | ---------------------------- | 199|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 200|801 | Capability not supported. | 201|2900001 | Service stopped. | 202|2900099 | Operation failed. | 203 204**示例:** 205 206```js 207import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 208let serverNumber = -1; // 此处serverNumber需赋值为调用sppListen接口后,回调中得到的serverNumber。 209try { 210 socket.sppCloseServerSocket(serverNumber); 211} catch (err) { 212 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 213} 214``` 215 216 217## socket.sppCloseClientSocket 218 219sppCloseClientSocket(socket: number): void 220 221关闭客户端socket,入参socket由sppAccept或sppConnect接口获取。 222 223**系统能力**:SystemCapability.Communication.Bluetooth.Core。 224 225**参数:** 226 227| 参数名 | 类型 | 必填 | 说明 | 228| ------ | ------ | ---- | ------------- | 229| socket | number | 是 | 客户端socket的id。 | 230 231**错误码**: 232 233以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 234 235| 错误码ID | 错误信息 | 236| -------- | ---------------------------- | 237|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 238|801 | Capability not supported. | 239|2900001 | Service stopped. | 240|2900099 | Operation failed. | 241 242**示例:** 243 244```js 245import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 246let clientNumber = -1; // 入参clientNumber由sppAccept或sppConnect接口获取。 247try { 248 socket.sppCloseClientSocket(clientNumber); 249} catch (err) { 250 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 251} 252``` 253 254 255## socket.sppWrite 256 257sppWrite(clientSocket: number, data: ArrayBuffer): void 258 259通过socket向远端发送数据,入参clientSocket由sppAccept或sppConnect接口获取 。 260 261**系统能力**:SystemCapability.Communication.Bluetooth.Core。 262 263**参数:** 264 265| 参数名 | 类型 | 必填 | 说明 | 266| ------------ | ----------- | ---- | ------------- | 267| clientSocket | number | 是 | 客户端socket的id。 | 268| data | ArrayBuffer | 是 | 写入的数据。 | 269 270**错误码**: 271 272以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 273 274| 错误码ID | 错误信息 | 275| -------- | ---------------------------- | 276|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 277|801 | Capability not supported. | 278|2901054 | IO error. | 279|2900099 | Operation failed. | 280 281**示例:** 282 283```js 284import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 285let clientNumber = -1; // 入参clientNumber由sppAccept或sppConnect接口获取。 286let arrayBuffer = new ArrayBuffer(8); 287let data = new Uint8Array(arrayBuffer); 288data[0] = 123; 289try { 290 socket.sppWrite(clientNumber, arrayBuffer); 291} catch (err) { 292 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 293} 294``` 295 296 297## socket.on('sppRead') 298 299on(type: 'sppRead', clientSocket: number, callback: Callback<ArrayBuffer>): void 300 301订阅spp读请求事件,入参clientSocket由sppAccept或sppConnect接口获取。使用Callback异步回调。 302 303**系统能力**:SystemCapability.Communication.Bluetooth.Core。 304 305**参数:** 306 307| 参数名 | 类型 | 必填 | 说明 | 308| ------------ | --------------------------- | ---- | -------------------------- | 309| type | string | 是 | 填写"sppRead"字符串,表示spp读请求事件。 | 310| clientSocket | number | 是 | 客户端socket的id。 | 311| callback | Callback<ArrayBuffer> | 是 | 表示回调函数的入参,读取到的数据。 | 312 313**错误码**: 314 315以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 316 317| 错误码ID | 错误信息 | 318| -------- | ---------------------------- | 319|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 320|801 | Capability not supported. | 321|2901054 | IO error. | 322|2900099 | Operation failed. | 323 324**示例:** 325 326```js 327import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 328let clientNumber = -1; // 入参clientNumber由sppAccept或sppConnect接口获取。 329let dataRead = (dataBuffer: ArrayBuffer) => { 330 let data = new Uint8Array(dataBuffer); 331 console.info('bluetooth data is: ' + data[0]); 332} 333try { 334 socket.on('sppRead', clientNumber, dataRead); 335} catch (err) { 336 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 337} 338``` 339 340 341## socket.off('sppRead') 342 343off(type: 'sppRead', clientSocket: number, callback?: Callback<ArrayBuffer>): void 344 345取消订阅spp读请求事件,入参clientSocket由sppAccept或sppConnect接口获取。 346 347**系统能力**:SystemCapability.Communication.Bluetooth.Core。 348 349**参数:** 350 351| 参数名 | 类型 | 必填 | 说明 | 352| ------------ | --------------------------- | ---- | ---------------------------------------- | 353| type | string | 是 | 填写"sppRead"字符串,表示spp读请求事件。 | 354| clientSocket | number | 是 | 客户端Socket的id。 | 355| callback | Callback<ArrayBuffer> | 否 | 表示取消订阅spp读请求事件上报。不填该参数则取消订阅该type对应的所有回调。 | 356 357**错误码**: 358 359以下错误码的详细介绍请参见[蓝牙服务子系统错误码](errorcode-bluetoothManager.md)。 360 361| 错误码ID | 错误信息 | 362| -------- | ---------------------------- | 363|401 | Invalid parameter. Possible causes: 1. Mandatory parameters are left unspecified. 2. Incorrect parameter types. | 364|801 | Capability not supported. | 365 366**示例:** 367 368```js 369import { AsyncCallback, BusinessError } from '@kit.BasicServicesKit'; 370let clientNumber = -1; // 入参clientNumber由sppAccept或sppConnect接口获取。 371try { 372 socket.off('sppRead', clientNumber); 373} catch (err) { 374 console.error('errCode: ' + (err as BusinessError).code + ', errMessage: ' + (err as BusinessError).message); 375} 376``` 377 378 379## SppOptions 380 381描述spp的配置参数。 382 383**系统能力**:SystemCapability.Communication.Bluetooth.Core。 384 385| 名称 | 类型 | 可读 | 可写 | 说明 | 386| ------ | ------------------- | ---- | ---- | ----------- | 387| uuid | string | 是 | 是 | spp单据的uuid。 | 388| secure | boolean | 是 | 是 | 是否是安全通道。true表示是安全通道,false表示非安全通道。 | 389| type | [SppType](#spptype) | 是 | 是 | Spp链路类型。 | 390 391 392## SppType 393 394枚举,Spp链路类型。 395 396**系统能力**:SystemCapability.Communication.Bluetooth.Core。 397 398| 名称 | 值 | 说明 | 399| ---------- | ---- | ------------- | 400| SPP_RFCOMM | 0 | 表示rfcomm链路类型。 |