微信小程序UDP通信,注意点 接收 onMessage 收到的message是ArrayBuffer缓冲,不能直接输出,要另转String处理

1、WXML 页面代码

<!--index.wxml-->
<view class="container">
  <view class="usermotto">
    <text class="user-motto">{{motto}}</text>
  </view>
  <view class="alllightbtn">
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 1">灯1</view>
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 2">灯2</view>
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 3">灯3</view>
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 4">灯4</view>
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 5">灯5</view>
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 6">灯6</view>
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 7">灯7</view>
    <view class=".lightbtn" bindtap="onlightTap" data-lightnum="Light 8">灯8</view>
  </view>
  <view class="rcvUdpContent" wx:if="{{udprcvshow>0}}">{{udpRcvdata}}</view>
</view>

2、WXSS 样式代码

/**index.wxss**/

.usermotto {
  margin: 20px 0px;
  background-color: #e9f2f7;
  border-top: solid 1px #0093dd;
  border-bottom: solid 1px #0093dd;
  width: 100%;
  text-align: center;
  padding: 10px;
}

.user-motto {
  font-size: 20px;
  font-weight: bold;
}

.alllightbtn {
  display: block;
  border: 1px solid #0093dd;
  text-align: center;
}

.lightbtn {
  border: 2px solid #0093dd;
  border-radius: 10px;
  padding: 30px 40px;
  margin: 10px;
  display: inline-block;
}

.lightbtn:active {
  background-color: #606060;
}

.rcvUdpContent {
  position: fixed;
  top: 10px;
  left: 0px;
  right: 0px;
  padding: 40px 20px;
  text-align: center;
  font-size: 24px;
  background: #eaf5ea;
  border-top: solid 1px #0093dd;
  border-bottom: solid 2px #0093dd;
}

3、js代码-----注意点 接收 onMessage 收到的message是ArrayBuffer缓冲,不能直接输出,要另转String处理

//index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    motto: ‘UDP通信<->8路‘,
    udp: null,
    udpRcvdata:‘udp recived data‘,
    udprcvshow:0,
  },
  //点击灯按钮事件处理函数
  onlightTap: function (light) {
    var senddata = ‘click ‘ + light.currentTarget.dataset.lightnum
    console.log(senddata)

    this.udp.send({
      address: ‘gzlema.cn‘,//ip:47.92.29.6
      port: 60000,
      message: senddata
    })
  },
  //UDP 接收到数据的事件处理函数,参数res={message,remoteInfo}
  onUdpMessage: function (res) {
    if (res.remoteInfo.size > 0) {
      console.log(‘onUdpMessage() 接收数据 ‘ + res.remoteInfo.size + ‘ 字节:‘ + JSON.stringify(res, null, ‘\t‘))

      // 将 ArrayBuffer类型的res.message取出来
      let unit8Arr = new Uint8Array(res.message)
      let encodedString = String.fromCharCode.apply(null, unit8Arr)
      let decodedString = decodeURIComponent(escape((encodedString)))//没有这一步中文会乱码
      console.log(‘message:‘+decodedString)
      // 将 ArrayBuffer类型的res.message取出来

      this.setData({ udpRcvdata: ‘udp rcv: ‘ + decodedString}) // 更新str到UI

      this.setData({ udprcvshow: Number(this.data.udprcvshow)+2000})//延时统一加2秒
      console.log(this.data.udprcvshow)
      var pagethis = this
      setTimeout(function(){
        pagethis.setData({ udprcvshow: Number(pagethis.data.udprcvshow) - 2000 })//延时统一减2秒
        console.log(pagethis.data.udprcvshow)
      },2000) //只显示2秒后隐藏
    }
  },
  //页面加载完成事件由系统调用
  onLoad: function () {
    console.log(‘页面 index 加载完成事件onLoad()‘)
    this.udp = wx.createUDPSocket() //新建udp实例
    this.udp.bind() //udp绑定本机
    this.udp.onMessage(this.onUdpMessage) //指定接收事件处理函数
  }
})

4 较果图

原文地址:https://www.cnblogs.com/qinlongqiang/p/12300539.html

时间: 2024-10-12 03:25:21

微信小程序UDP通信,注意点 接收 onMessage 收到的message是ArrayBuffer缓冲,不能直接输出,要另转String处理的相关文章

微信小程序组件通信

父子通信 在子组件的对应js中 properties:{ prop名字:数据类型, prop名字:{ type:数据类型, value:默认值 } } 在父组件的wxml模板中找到子组件标签 <子组件 prop名字='值'></子组件> 2.子父通信 在子组件对应的元素身上绑定原生事件 <button bindtap = 'tapHandler'></button> // 在函数中,触发自定义事件 tapHandler(){ this.triggerEven

微信小程序组件通信(一)

当我们撸前端页面的时候,当发现一个页面内容很多.且有一定的分类,就应当考虑是否需要将页面拆分成一个个组件.当使用组件的时候,不可避免的需要知道父子页面通信以及兄弟页面的通信. 1.父向子通信 是通过properity去传递即可.properity是组件对外属性,有三个属性:type(必须).value.observer. 父组件: <view>*********我是父组件********</view> <view>父组件的文字</view> <view

微信小程序开发:http请求

在微信小程序进行网络通信,只能和指定的域名进行通信,微信小程序包括四种类型的网络请求. 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downloadFile) WebSocket通信(wx.connectSocket) 这里以介绍wx.request,wx.uploadFile,wx.dowloadFile三种网络请求为主 设置域名 要微信小程序进行网络通信,必须先设置域名,不然会出现错误: URL 域名不合法,请在 mp 后台配置后重试

01_微信小程序支付

[支付流程] 1.小程序内调用登录接口,获取到用户的openid(我们这一步骤让前端去获取) 2.服务端代码这边生成订单 3.服务端调用支付统一下单的api 4.服务端将再次签名,返回5个参数(前端得到数据后可以调起支付) 5.微信后台会回调我们服务端,我们通过回调更新订单状态 6.前端也会调用服务端订单查询接口,服务端查询订单状态(防止微信回调这边的一个时间差),如果成功了,在这个接口里会向用户发送一个小程序的模板消息(会消耗一个第3步的prepay_id,后续写模板消息的时候会说) [ 概述

微信小程序-WebSocket应用

为何有 HTTP 协议还需要 WebSocket ? Http协议 有个缺陷:通信只能由客户端发起.举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果.HTTP 协议做不到服务器主动向客户端推送信息.(单向请求)注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦.我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息.最典型的场景就是聊天室.轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开).因此,工程

大牛带您微信小程序基础

前言什么是微信小程序,它是一种轻量级的APP,它与常规App来说,无需下载安装即可使用,它嵌于微信App中,要使用微信小程序你只需要搜索一下微信小程序的名称就好,如近期的"Google的画图"小程序等,小程序不同于APP一点的是,小程序成本低,前期宣传,可以靠扫描二维码,分享群,朋友圈等,来提高微信小程序的使用.无需安装即可下载的特点,也深受广大群众的喜欢.介绍小程序是一种用完即走的那么一种模式,从开始的B2C模式,人与商品,到P2P模式,人与人,在到C2P模式,人与服务.小程序就是那

入门系列(一) 微信小程序简介

一.简介 1.目录结构 首先,我们使用微信公众平台提供的开发者工具,创建一个简单的小程序项目,观察项目的目录结构 不难看出,一个典型的微信小程序,通常包含一个描述整体的主体部分,以及一个描述页面的 pages 文件夹 主体:用于描述整体的程序,位于根目录下,通常由三个文件构成 app.js:小程序的逻辑代码文件,遵守 JavaScript 语言规范 app.json:小程序的公共配置文件,遵守 JSON 语言规范 app.wxss:小程序的公共样式文件,兼容 CSS 语法规范 页面:用于描述小程

微信小程序通过低功率蓝牙控制单片机上硬件设备

1.软件部分介绍 微信小程序是一种新的应用,用户不需要下载应用只用通过扫二维码或者打开链接就能使用,使用完后不需要卸载,直接关闭就行了.微信在2017年初推出微信小程序开发环境.任何企业,媒体,个人都可以注册开发.是一种全新的 开发模式.微信也因此受到许多程序员的一致好评,尤其是微信小程序的云开发,提供大量数据处理接口,让初学者也可以很快入手.不需要后端数据库的支持,自己一个人就可以开发前端和后台. 微信小程序为蓝牙模块提供了18个API.其中低功率蓝牙9个,传统蓝牙9个.本次设计使用了其中的9

微信小程序支付功能 C# .NET开发

微信小程序支付功能的开发的时候坑比较多,不过对于钱的事谨慎也是好事.网上关于小程序支付的实例很多,但是大多多少有些问题,C#开发的更少.此篇文档的目的是讲开发过程中遇到的问题做一个备注,也方便其他开发的同学作为参考! 1.首先建议把官方文档支付部分看上三遍,每个细节都不要放过,因为任何一个点和微信要求不符都会导致支付不成功.https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=3_1 2.经过验证的微信支付功能,会需要一些商