uni-app建立原生TCP socket连接

在uni-app中建立socket连接我参考了https://ask.dcloud.net.cn/question/60的内容。并在我的android4.4.4的系统里测试通过。代码先贴上如下:

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("27.129.167.3", 10000);
	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("发送的消息");
	var msgBeReceived = socketReader.readLine();
	console.log(msgBeReceived);
}

这里提一下如何判断服务器断开:写入操作始终会成功的,无法判断服务器是否断开,只有读操作,我们可以在var msgBeReceived = socketReader.readLine();处判断msgBeReceived如果等于null,就认为服务器断开。当然此处前提是业务上的确是服务器收到了消息就马上回返回给客户端应答状态,否则JS代码客户端是无法判断服务器已断开的。
如果不调用setSoTimeout设置SO_TIMEOUT,readLine将一直阻塞直到服务器退出(注意不是断网)或发送消息。如果服务器断网,客户端会卡死在这一步!注意UNI-APP做的APP是单线程的(JS本身就运行在单独线程里),这样页面会卡死。设置5秒的超时时间,那么业务上如果页面操作点击按钮发送消息后,建议加上一个请求中的锁死提示,否则页面会处于卡死状态,用户无法进行任何操作。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值