更新记录

1.0.2(2023-07-14)

  1. 修复个别iOS 16 socket客户端连接闪退问题

1.0.1(2022-11-25)

  1. 修复某些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

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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/830ccc503e29https://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

如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!

隐私、权限声明

1. 本插件需要申请的系统权限列表:

android: <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ios: 网络权限

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问