更新记录

2.0.3(2022-05-27)

1、更新说明文档引入插件模块的名称:Qiepro-UdpModule 2、本地真机测试通过,绑定自身端口是有效的,这前模拟机绑定自身端口会被路由分配其它端口转发。估计手机使用局域网连接外网使用端口也会发生变化。完全有效估计得使自己手机在外网有独立的IP


平台兼容性

Android Android CPU类型 iOS
适用版本区间:5.0 - 11.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

  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原生插件配置”->”云端插件“列表中删除该插件重新选择


Udp通讯插件

Demo:持续更新

很多东西待完善,请看官们自己研究研究。我会慢慢更新的。

主要用于技术实现及后端处理,自己本身没有啥美感,对UI没什么要求。

说明文档中补充了完整Nodejs服务端代码 /-------服务端项目文件 --udp.js --package.json

项目仅引用了一个md5用做生成客户端唯一标识的

安装使用

app 是每个项目不一样的 可以自定义的

可结合VUEX使用。增加一个udp.js的状态文件

引入再初始化即可监听数据接收及发送数据

... 额,这文档不太会写。 ...

  1. Vuex模块 存放路径:/app/store/modules/udp.js

    export default {
    state: {
        //基础服务端信息
        serverIp:'192.168.3.88',
        serverPort:8060,
    
        //本地绑定端口。暂时无用
        localPort:8080,
    
        //接收到的消息
        data:'',
        //插件对象
        socket:null
    },
    getters: {
        udp_data: state => {
            return state.data
        }
    },
    mutations: {
        udpSend(state, params) {
            // 发送广播数据(不传此参数默认向服务端发送消息)
            // user = {
            //  'ip':'',
            //  'port':''
            // }
            state.socket.sendMessage(params/*,user*/);
        },
    },
    actions: {
        udpInit({state,dispatch,commit}, callback) {
            //服务端只需启动一条
            if(state.socket !== null){
                uni.showToast({
                    title:"服务已初始化"
                })
                return;
            }
            state.socket = uni.requireNativePlugin("Qiepro-UdpModule");
            //插件引入失败不启动
            if(state.socket !== undefined){
                //启动监听
                state.socket.hostIp(state.serverIp);
                state.socket.hostPort(state.serverPort);
                //本地端口绑定(仅做服务端使用。这测试还未通过。系统会随机使用端口)可以不用配置
                state.socket.localPort(state.localPort);
    
                //本地用户ID(不执行后端会根据客户端IP,端口生成唯一标识,客户端信息发送会带上)
                //state.socket.localId('default')
    
                //启动数据接收监听(这会启用服务并向服务端注册连接信息)
                state.socket.startServer((res)=>{
                    dispatch("udpReceive",res);
                })
            }
        },
        //接收到数据后处理(可以由服务端在连接上后推送其它连接用户的信息后做:端到端消息直推,用户连接信息由服务端更新后推送)
        udpReceive({state,dispatch,commit},data){
            state.data = data;
        }
    }
    }
  2. Vuex入口 路径:/app/store/index.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    //引入模udp状态模块
    import udp from '@/app/store/modules/udp.js'
    Vue.use(Vuex)
    const store = new Vuex.Store({
    state: {},
    getters: {},
    mutations: {},
    actions: { },
    modules: {udp}
    })
    //全局状态方法
    Vue.mixin({
    computed:{...Vuex.mapGetters(['udp_data'])},
    methods:{...Vuex.mapMutations([
        'udpSend'
    ]),...Vuex.mapActions([
        'udpInit','udpReceive'
    ])}
    })
    //初始化 Udp服务
    store.dispatch('udpInit')
    Vue.prototype.$store = store
    export default store;
  3. 全局引入Vuex 路径:/main.js

    import Vue from 'vue'
    import App from './App'
    //引入Vuex
    import store from '@/app/store/index.js'
    Vue.config.productionTip = false
    App.mpType = 'app'
    const app = new Vue({
    ...App
    })
    app.$mount()
  4. 使用相关服务(这属于Vuex方法的基础操作了)

    //页面方法中实时获取到最新数据可监听。udp_data
    //调用相关操作方法(如需向其它端发送可修改udp.jss模块中的发送方法即可)
    this.udpSend(消息对象)

极简UDP服务端源码

  1. Node服务端启动文件:/udp.js
    const dgram = require('dgram');
    const md5 = require('md5');
    var server = dgram.createSocket('udp4');
    var client = {};
    server.on('close',()=>{
    console.log('socket已关闭');
    });
    server.on('error',(err)=>{
    console.log(err);
    });
    server.on('listening',()=>{
    console.log('socket正在监听中...');
    server.setBroadcast(true);//开启广播
    server.setTTL(128);//路由一跳TTL减一,减到零抛弃数据包
    //server.send('hello i am server',8061,'192.168.1.255');
    //在send {msg=close} 可以发送 colse 事件
    });
    //通过message事件接收数据,
    server.on('message',(msg,rinfo)=>{
    console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
    var newtopic = new Buffer.from(msg,"utf-8").toString();//将十六进制的消息转换成string
    console.log(newtopic)
    var key = md5(`${rinfo.address}:${rinfo.port}`)
    client[key]={'ip':rinfo.address,'port':rinfo.port}
    for(let key in client){
        server.send(newtopic,client[key].port,client[key].ip)
    }
    });
    //绑定本机的端口和ip地址,要接收数据的话必须绑定
    server.bind('8060','192.168.3.88');

2.服务端项目包 /package.json

{
  "requires": true,
  "lockfileVersion": 1,
  "scripts": {
    "dev": "node udp.js"
  },
  "dependencies": {
    "charenc": {
      "version": "0.0.2",
      "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
      "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA=="
    },
    "crypt": {
      "version": "0.0.2",
      "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
      "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs="
    },
    "is-buffer": {
      "version": "1.1.6",
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
    },
    "md5": {
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
      "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
      "requires": {
        "charenc": "0.0.2",
        "crypt": "0.0.2",
        "is-buffer": "~1.1.6"
      }
    }
  }
}
  1. 启动服务端方法,在文件目录执行以下命令
    1、Node命令启动
    node udp.js
    /或/
    2、项目命令启动
    npm run dev

隐私、权限声明

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

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

默认本地测试服务器:udp://192.168.3.88:8060 用于注册客户端信息及分发客户端链接IP及端口给其它客户端。实现客户端之间相互通讯 已附上nodejs语言的服务端代码

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

暂无用户评论。

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