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 较果图

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

  1. 微信小程序UDP通信

    前言 UDP通信分为单播 广播 组播,基础库2.7.0之后,小程序开始支持UDP通信,目前小程序只支持单播. 小程序API 小程序UDP通信这一块可以说是很简单了就一个UDPSocket实例.然后bi ...

  2. 微信小程序页面通信

    目录 微信小程序页面通信 方式一:通过URL 方式二:通过全局变量 方式三:通过本地存储 方式四:通过路由栈 微信小程序页面通信 方式一:通过URL // A 页面 wx.navigateTo({ u ...

  3. 微信小程序组件通信

    父子通信 在子组件的对应js中 properties:{ prop名字:数据类型, prop名字:{ type:数据类型, value:默认值 } } 在父组件的wxml模板中找到子组件标签 < ...

  4. 微信小程序组件通信入门及组件生命周期函数

    组件生命周期函数链接地址:https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.h ...

  5. 微信小程序 组件通信相关知识整理

    1.自定义组件间通信与事件 https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.htm ...

  6. 微信小程序组建通信

    子组件传递父组件需要用到triggerEvent方法,当子组件(自定义组件)点击button的时候调用triggerEvent方法传递一些数据,首先第一个属性为自定义名称(myevent)对应父组件( ...

  7. 让微信小程序开发如鱼得水

      关于微信小程序开发一直想写一篇相关的文章总结和记录下,结果拖延症犯了迟迟没有下笔:这不最近天气不错,于是找一个空闲的下午将这篇文章输出下(好像跟天气没啥关系),那我们就开始吧! 注意:本文默认开发 ...

  8. 微信小程序image组件中aspectFill和widthfix模式应用详解

    aspectFill 与 widthfix 都是保持宽高比不变 aspectFill 保持纵横比缩放图片,只保证图片的短边能完全显示出来.也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发 ...

  9. 图片的URL上传至阿里云OSS操作(微信小程序二维码返回的二进制上传到OSS)

    当我们从网络中获取一个URL的图片我们要存储到本地或者是私有的云时,我们可以这样操作  把url中的图片文件下载到本地(或者上传到私有云中)  public String uploadUrlToOss ...

随机推荐

  1. GNU Screen使用

    基本使用 SSH时可以方便地resume工作 # open new screen session screen # restore screen -r  Steps Using GNU Screen ...

  2. 《深入理解java虚拟机》读书笔记六——第七章

    第七章 虚拟机类加载机制 1.类加载的时机 虚拟机的类加载机制: 虚拟机把描述类的数据从class文件中加载到内存,并对数据进行校验.转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这 ...

  3. python实用30个小技巧

    python实用30个小技巧 展开1.原地交换两个数字Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: In [1]: x,y = 10 ,20 In [2]: ...

  4. 解决VMware中Ubuntu18.04全屏问题

    在VMware中Ubuntu18.04全屏问题   在虚拟机机中安装完Ubuntu18.04之后界面显示的特别小,默认的好像是800*600分辨率,看着不舒服.先是在设置->设备->显示 ...

  5. Spring-Boot-2.0.0-M1版本将默认的数据库连接池从tomcat jdbc pool改为了hikari

    spring-configuration-metadata.json spring-boot-autoconfigure-2.0.0.M7.jar!/META-INF/spring-configura ...

  6. Mvc-WebAPI特性路由(自定义路由)Demo

    Demo由VS2017编写. 1.先建一个WebApi项目 2.WebApiConfig.cs需要注册特性路由,config.MapHttpAttributeRoutes(); 3.项目默认有2个Co ...

  7. Java生鲜电商平台-生鲜电商订单结算系统的深入解析与反思总结

    Java生鲜电商平台-生鲜电商订单结算系统的深入解析与反思总结 说明:最近疫情影响,生鲜电商这个行业被彻底的激活了,全中国人民都知道用小程序或者APP可以进行买菜了,但是可惜的是,我的生鲜电商在去年经 ...

  8. 打开UML类图的正确姿势

    UML(Unified Modeling Language) 统一建模语言,又称标准建模语言.是用来对软件密集系统进行可视化建模的一种语言.UML的定义包括UML语义和UML表示法两个元素.UML是在 ...

  9. hibernate跟Mybatis/ ibatis 的区别,为什么选择?(转)

    第一章 Hibernate与MyBatisHibernate 是当前最流行的O/R mapping框架,它出身于sf.NET,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀的O/R ...

  10. fnt文字

    //fileName是fnt文件的path.在fnt文件的相同目录下有同名png文件.使用ShoeBox.exe生成fnt文件.在fnt文件中修改路径为类似number 及 number.png的格式 ...