更新记录
1.0.2(2023-07-14)
- 修复个别iOS 16 socket客户端连接闪退问题
1.0.1(2022-11-25)
- 修复某些iOS系统socket服务端接收数据问题
1.0.0(2022-10-21)
- 支持socket客户端和socket服务端
- 支持十六进制、ASCII、iso、utf-8、utf-16等多种字符格式传输
- 客户端支持连接多个socket服务端、服务端支持开启多个端口服务
- 支持后台运行
平台兼容性
Android | Android CPU类型 | iOS |
---|---|---|
适用版本区间:4.4 - 12.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:9 - 15 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
功能
- 支持socket客户端和socket服务端
- 支持十六进制、ASCII、iso、utf-8、utf-16等多种字符格式传输
- 客户端支持连接多个socket服务端、服务端支持开启多个端口服务
- 支持后台运行
接入步骤
如不了解原生插件接入步骤的同学请参考: https://www.jianshu.com/p/830ccc503e29 或 https://blog.csdn.net/wenrisheng/article/details/124057700
socket客户端
var socket = uni.requireNativePlugin("wrs-socket");
- 设置回调
// 设置socket客户端回调
socket.setCallback((resp) => {
var opt = resp.opt;
this.showMsg(JSON.stringify(resp));
switch (opt) {
// 连接成功
case "onConnectSuc":
var serverID = resp.serverID;
this.serverID = serverID;
break;
// 连接失败
case "onConnectFail":
break;
// 收到数据
case "onReceiveData":
break;
// 数据发送成功
case "onWriteDataSuc":
break;
// 数据发送失败
case "onWriteDataSucFail":
break;
default:
break;
}
});
- 连接服务端,连接结果通过回调返回,如果需要连接多个服务端可以调用多次,通过ip和port来判定唯一
socket.connect({
ip: this.ip, // 服务端IP
port: parseInt(this.port), // 服务端port
receiveSize: 1024,// 单次接收最大数据,单位byte
connectTimeout: 5000, // 连接超时时间,android的单位是毫秒,iOS的单位是秒
dataType: -1, // 接收的数据类型, -1: 不进行转换,以原始数据接收 0: 以十六进制接收,此时data数据为十六进制字符串或整型数组 1:以字符编码接收,此时已charsetName设置的编码转为字符串
charsetName: "UTF_8", // 字符编码, 当dataType为1时生效,常用编码为:ISO_8859_1、US_ASCII、UTF_16、UTF_16BE、UTF_16LE、UTF_8
});
- 发送数据
socket.sendData({
serverID: this.serverID, // 服务端IP
data: this.data,
dataType: -1, // 发送数据类型, -1: 不进行转换,以原始数据发送 0: 以十六进制发送,此时data数据为十六进制字符串或整型数组 1:以字符编码发送,此时data数据为字符串
charsetName: "UTF_8", // 字符编码, 当dataType为1时生效,常用编码为:ISO_8859_1、US_ASCII、UTF_16、UTF_16BE、UTF_16LE、UTF_8
});
- 查询连接状态
var resp = socket.isConnected({
serverID: "xxx" // 服务端ID,连接成功后会返回这个ID
});
if(isString(resp)) {
resp = JSON.parse(resp);
}
var isConnected = resp.isConnected;
if(isConnected) {
} else {
}
- 断开连接
socket.disConnect({
serverID: "xxx" // 服务端ID,连接成功后会返回这个ID
});
- 释放回收资源,当不需要使用socket的时候,释放回收内存资源
socket.releaseResource();
socket服务端
var socketServer = uni.requireNativePlugin("wrs-socketServer");
- 设置回调
// 设置socket服务端回调
socketServer.setCallback((resp) => {
var opt = resp.opt;
this.showMsg(JSON.stringify(resp));
switch (opt) {
// 收到一个新的客服端连接
case "onAcceptNewClient":
var clientID = resp.clientID;
break;
// 收到客户端发来数据
case "onReceiveData":
var clientID = resp.clientID;
var serverID = this.socketServerServerID;
// 根据收到的数据处理业务,处理完成后发送处理结果给对方蓝牙,即:回复客户端
setTimeout(function() {
socketServer.sendData({
serverID: serverID,
clientID: clientID,
data: "2244BBAA"
});
}, 3000);
break;
// 有个连接断开了
case "onDisconnect":
break;
// 发送客户端数据成功
case "onWriteDataSuc":
break;
// 发送客户端数据失败
case "onWriteDataSucFail":
break;
default:
break;
}
});
- 启动服务,如果需要启动多个服务,可以调用多次,通过port来判定唯一
socketServer.startServer({
port: parseInt(this.serverPort), // 服务端口
dataType: -1, // 接收的数据类型, -1: 不进行转换,以原始数据接收 0: 以十六进制接收,此时data数据为十六进制字符串或整型数组 1:以字符编码接收,此时已charsetName设置的编码转为字符串
charsetName: "UTF_8", // 字符编码, 当dataType为1时生效,常用编码为:ISO_8859_1、US_ASCII、UTF_16、UTF_16BE、UTF_16LE、UTF_8
}, (resp) => {
this.showMsg(JSON.stringify(resp));
var flag = resp.flag;
if (flag) {
// 启动成功
this.socketServerServerID = resp.serverID;
} else {
// 启动失败,一般都是端口被占用引起的
}
});
- 停止服务
socketServer.stopServer({
serverID: this.socketServerServerID // 服务ID
});
- 查询服务运行状态
var resp = socketServer.isRunning({
serverID: "xxx" // 服务端ID,连接成功后会返回这个ID
});
if(isString(resp)) {
resp = JSON.parse(resp);
}
var isRunning = resp.isRunning;
if(isRunning) {
} else {
}
- 发送数据
socketServer.sendData({
serverID: "xxx", // 服务ID
clientID: "xxx", // 客户端ID
data: "2244BBAA",
dataType: -1, // 发送数据类型, -1: 不进行转换,以原始数据发送 0: 以十六进制发送,此时data数据为十六进制字符串或整型数组 1:以字符编码发送,此时data数据为字符串
charsetName: "UTF_8" // 字符编码, 当dataType为1时生效,常用编码为:ISO_8859_1、US_ASCII、UTF_16、UTF_16BE、UTF_16LE、UTF_8
});
- 断开某个客户端的连接
socketServer.disConnect({
serverID: "xxx", // 服务ID
clientID: "xxx" // 客户端ID
})
- 释放回收资源,当不需要使用socketServer的时候,释放回收内存资源
socketServer.releaseResource();
组件文档:https://www.jianshu.com/p/87606a8eaf2c 支持定制,联系方式 QQ:252797991