uni-app开发安卓APP 使用原生 TCP Socket连接


前言

使用uni-app开发安卓APP的时候,需要与基站服务器产生TCP连接,但是uni-app并没有提供可用的API。


一、TCP连接

HBuliderX的代码如下:

testSocket(){
          
     
			    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生命周期下调用较好。

二、补充

如果想要判断服务器是否断开,可以在

var msgBeReceived = socketReader.readLine();

判断msgBeReceived如果等于null,就认为服务器断开。

写入操作是始终都会成功,所以不能作为服务器是否断开的判断条件。

经验分享 程序员 微信小程序 职场和发展