失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 微信小程序用udp协议与服务器通信(一):连接服务器 将数据传输给服务器

微信小程序用udp协议与服务器通信(一):连接服务器 将数据传输给服务器

时间:2021-08-26 19:38:50

相关推荐

微信小程序用udp协议与服务器通信(一):连接服务器 将数据传输给服务器

在微信小程序中udp通信传送的message支持两种格式: ArrayBuffer和string,可按服务器要接受的格式传送

ArrayBuffer格式传送

要使用ArrayBuffer格式传送,就需要将String转化为ArrayBuffer,这里我在util.js写了一个函数作为转化工具

//字符串内容转arrayBufferfunction stringToArrayBuffer (str) {var bytes = new Array(); var len,c;len = str.length;for(var i = 0; i < len; i++){c = str.charCodeAt(i);if(c >= 0x010000 && c <= 0x10FFFF){bytes.push(((c >> 18) & 0x07) | 0xF0);bytes.push(((c >> 12) & 0x3F) | 0x80);bytes.push(((c >> 6) & 0x3F) | 0x80);bytes.push((c & 0x3F) | 0x80);}else if(c >= 0x000800 && c <= 0x00FFFF){bytes.push(((c >> 12) & 0x0F) | 0xE0);bytes.push(((c >> 6) & 0x3F) | 0x80);bytes.push((c & 0x3F) | 0x80);}else if(c >= 0x000080 && c <= 0x0007FF){bytes.push(((c >> 6) & 0x1F) | 0xC0);bytes.push((c & 0x3F) | 0x80);}else{bytes.push(c & 0xFF);}}var array = new Int8Array(bytes.length+10);//10个字节的包头+包长+版本号//4个字节表示包头(以下包头填自己的udp协议包头,用十六进制对应的十进制表示,如ef用239)array[0]=239;array[1]=xxx;array[2]=xxx;array[3]=xxx;//包长(填自己包长的计算方法,我这里是2个字节版本号+内容字节长度)var leng=2+bytes.length;console.log('leng='+leng)if(leng<=255){array[4]=leng;array[5]=0;array[6]=0;array[7]=0;}else{array[4]=leng%256;array[5]=parseInt(leng/256);array[6]=0;array[7]=0;}//版本号array[8]=0;array[9]=1;//内容for(var i=0 ;i<=bytes.length;i++){array[i+10] =bytes[i];}return array.buffer;}// ArrayBuffer转Strfunction ArrayBufferToStr(value) {//取去掉10个字节包头后的数据var buffer = value.slice(10)var dataview = new DataView(buffer)var ints = new Uint8Array(buffer.byteLength)var str = ''for (var i = 0; i < ints.length; i++) {str += String.fromCharCode(dataview.getUint8(i)) }return str}//没有加包头的转换// function stringToArrayBuffer(str) {// var bytes = new Array(); // var len,c;// len = str.length;// for(var i = 0; i < len; i++){// c = str.charCodeAt(i);// if(c >= 0x010000 && c <= 0x10FFFF){// bytes.push(((c >> 18) & 0x07) | 0xF0);// bytes.push(((c >> 12) & 0x3F) | 0x80);// bytes.push(((c >> 6) & 0x3F) | 0x80);// bytes.push((c & 0x3F) | 0x80);// }else if(c >= 0x000800 && c <= 0x00FFFF){// bytes.push(((c >> 12) & 0x0F) | 0xE0);// bytes.push(((c >> 6) & 0x3F) | 0x80);// bytes.push((c & 0x3F) | 0x80);// }else if(c >= 0x000080 && c <= 0x0007FF){// bytes.push(((c >> 6) & 0x1F) | 0xC0);// bytes.push((c & 0x3F) | 0x80);// }else{// bytes.push(c & 0xFF);// }// }// var array = new Int8Array(bytes.length);// for(var i in bytes){//array[i] =bytes[i];// }// return array.buffer;// }//不写这个,其他的js页面就找不到我们所写的函数module.exports = {ArrayBufferToStr:ArrayBufferToStr,stringToArrayBuffer:stringToArrayBuffer}

此时要在要使用udp通信的js文件中引用utils.js:在该js文件第一行写var util=require('../../utils/util');

//建立套接字const udp = wx.createUDPSocket()udp.bind()udp.send({//要连接的服务器地址和端口号 address:'XXXXXX',port: 'XXXX', // ArrayBuffer格式传送 message:util.stringToArrayBuffer('"user_name":"'+this.data.user_name+'",'+'"user_pwd":"'+this.data.user_pwd+'"}'),// string格式传送 })

用网络调试助手模拟服务器查看收到的数据(要用网络调试助手的地址和端口号)

String格式传送

string可以直接传送

const udp = wx.createUDPSocket()udp.bind()udp.send({//要连接的服务器地址和端口号 address:'XXXXXX',port: 'XXXX', message:'"user_name":"'+this.data.user_name+'",'+'"user_pwd":"'+this.data.user_pwd+'"}',})

用网络调试助手模拟服务器查看收到的数据(要用网络调试助手的地址和端口号)

如果觉得《微信小程序用udp协议与服务器通信(一):连接服务器 将数据传输给服务器》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。