使用uni-app开发安卓APP的时候,需要与基站服务器产生TCP连接,但是uni-app并没有提供可用的API。
initSocket(){
if (plus.os.name == "Android") {
var Socket = plus.android.importClass("java.net.Socket");
var PrintWriter = plus.android.importClass("java.io.PrintWriter");
var BufferedWriter = plus.android.importClass("java.io.BufferedWriter");
var OutputStreamWriter = plus.android.importClass("java.io.OutputStreamWriter");
var BufferedReader = plus.android.importClass("java.io.BufferedReader");
var InputStreamReader = plus.android.importClass("java.io.InputStreamReader");
//测试改良
var StrictMode = plus.android.importClass("android.os.StrictMode");
var Build = plus.android.importClass("android.os.Build");
if (Build.VERSION.SDK_INT > 9) {
var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
console.log("链接服务器中...")
var socket = new Socket("10.42.66.207", 6000);
socket.setSoTimeout(5000);
// 字节流通向字符流的桥梁
var inputStreamReader = new InputStreamReader(socket.getInputStream());
// 从字符输入流中读取文本
var socketReader = new BufferedReader(inputStreamReader);
// 从字符流桥接字节流
var outputStreamWriter = new OutputStreamWriter(socket.getOutputStream());
var bufferWriter = new BufferedWriter(outputStreamWriter);
// 创建一个文件并向文本文件写入数据
var socketWriter = new PrintWriter(bufferWriter, true);
socketWriter.println('cf 03 00 00 00 00 1e 59 ce 96 7f 01 00 00 a5');
var msgBeReceived = socketReader.readLine();
console.log('读取信息',msgBeReceived);
}
},
TCP正常连接后,收发数据都可以完成!
记得在onReady生命周期下调用较好。
// 判断msgBeReceived等于null,就认为服务器断开
var msgBeReceived = socketReader.readLine();
写入操作是始终都会成功,所以不能作为服务器是否断开的判断条件。