uni-app中安卓板块增加UDP收发
将下面的代码直接建一个udp.js放起来,然后在你要用的时候调用一下udpsend()就可以了,icon参数是控制是不是要接收回收值的。
import {udpsend,returnVal,ret_flag} from '@/js/udp.js';//引用js文件
/*********调用方式***********/
var jsonObj = {};
jsonObj.package = "read";
udpsend(jsonObj,'192.168.10.1',2);
udp.js
var DatagramPacket = plus.android.importClass("java.net.DatagramPacket"); //udp接收信息引用的java类
var DatagramSocket = plus.android.importClass("java.net.DatagramSocket"); //udp创建udp引用java类
var InetAddress = plus.android.importClass("java.net.InetAddress"); //绑定ip引用java类
var InetSocketAddress = plus.android.importClass("java.net.InetSocketAddress"); //绑定ip引用java类
var JString = plus.android.importClass("java.lang.String"); //字符串转换类
var ds = new DatagramSocket(1972); //绑定1972端口
var messageReceived = false;
export var returnVal={};
var jsonArray = [];
export var ret_flag="";
export function udpsend(jsonObj,ipAddress,icon) {
messageReceived = false;
var Strings=JSON.stringify(jsonObj);
console.log(Strings);
var data = new JString(Strings).getBytes("gb2312"); //发送数据转换
var iAdd = new InetAddress();
var socket = new DatagramPacket(data, data.length, iAdd.getByName(ipAddress), 1972);//发送地址,端口,数据
ds.send(socket); //发送数据
if(icon>=2){
udpReceived(icon);
}
}
function udpReceived(icon) {
jsonArray = [];
var flag=0;//当有多条的时候接收多条
while (!messageReceived) { //开始接收数据
try{
// 设置接收缓存,需要用0填充,否则为 null 无法接收。
var buffer = new Array(1024).fill(0);
ds.setSoTimeout(30); //设置超时时间
var dp2 = new DatagramPacket(buffer, buffer.length); //创建接收消息通道
ds.receive(dp2); //开始接收消息
var dpData = new JString(dp2.getData(),"gb2312").trim();
console.log(dpData);
if (dpData.length == 0){
// 接收超时,结束接收
messageReceived = true;
}else{
if(icon==2){
var j_obj=JSON.parse(dpData);
if(j_obj.flag>=0){
var datas=j_obj.data;
if(j_obj.line==1){
returnVal.taskid=datas.taskid;
}
var tObj={};
tObj.itemCss="list_item_area";
jsonArray.push(tObj);
}
if(j_obj.flag==j_obj.line){
returnVal.data=jsonArray;
console.log(returnVal);
// 接收超时,结束接收
messageReceived = true;
}
}
if(icon==3){
var j_obj=JSON.parse(dpData);
ret_flag=j_obj.flag;
}
// console.log('===========收到数据============',dpData);
}
}catch(ex){
messageReceived = true;
}
}
}