一、什么是UDP?
UDP 是User Datagram Protocol的简称, 即用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议。
UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层
二、在小程序中封装UDP连接的方法
在小程序的utils包中建立udp.js文件,将下例代码导入后即可在小程序全局调用相对应的方法
var app = getApp()
var udp = null
var UDPSocket = {
//连接目标
linkUDP(address, port) {
udp.close()
udp = wx.createUDPSocket()
udp.bind(1110)
udp.connect({
address: address,
port: port,
})
console.log('连接成功')
},
//发送信息
sendUDP(address, port, message) {
console.log('发送udp')
if (udp == null) {
udp = wx.createUDPSocket()
udp.bind() //udp绑定本机
udp.send({
address: address,
port: port,
message: message
})
} else {
udp.send({
address: address,
port: port,
message: message
})
}
app.globalData.sendUDPCount++
},
//监听接收到的数据
onUdpMessage(res) {
udp.onMessage((res) => {
//处理接收到的数据
if (res.remoteInfo.size > 0) {
//将监听到的消息转换为字符串,必须要转换才能正常显示,因为监听到的消息是二进制的数组
let unit8Arr = new Uint8Array(res.message)
let encodedString = String.fromCharCode.apply(null, unit8Arr)
let decodedString = decodeURIComponent(escape((encodedString)))//没有这一步会出现中文乱码
console.log('UDP Received message', decodedString)
var obj = decodedString;
app.globalData.currMsg = JSON.parse(obj.trim());
console.log(typeof app.globalData.currMsg)
} else {
failure('接收到的信息为空!')
}
})
},
}
//导出UDP连接的方法
module.exports = {
UDPSocket: UDPSocket
}