【Android】socket通信【客户端访问】
16lz
2021-01-23
package cn.face.faceDetection.Api;import android.util.Log;import cn.face.faceDetection.TemplatedActivity;import java.io.*;import java.net.Socket;import java.net.UnknownHostException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class SocketProxy extends TemplatedActivity { private ExecutorService mThreadPool; public static Socket socket; // 输入流对象 InputStream is; InputStreamReader isr; BufferedReader br; OutputStream os; private int intPort;//端口号 /** * 初始化 */ public void initView(){ mThreadPool = Executors.newCachedThreadPool(); } /** * 建立socket连接请求 */ public void connSocket(){ mThreadPool.execute(new Runnable() { @Override public void run() { //socket = new Socket(ApiUrl.URL_SERVER_SOCKET, ApiUrl.PORT_SERVER_SOCKET); /* int num = 0; while (socket == null){ num ++; makeToast("Socket服务重连中...已重连第" + "num" + "次"); socket = new Socket(ApiUrl.URL_SERVER_SOCKET, ApiUrl.PORT_SERVER_SOCKET); }*/ resetSocket(); System.out.print("请求连接" + socket.isConnected()); runOnUiThread(new Runnable() { @Override public void run() { if(socket.isConnected()){ Log.d("建立连接:","成功!"); }else { Log.d("建立连接:","失败!"); } } }); } }); } /** * 获取数据 */ private void getDataScoket(){ new Thread(new Runnable() { @Override public void run() { try{ is = socket.getInputStream(); DataInputStream input = new DataInputStream(is); byte[] b = new byte[1024]; int len = 0; String response = ""; while (true) { len = input.read(b); response = new String(b, 0, len); Log.e("datadadata", response); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** *断开socket连接 */ private void dissConnection() { try { // 断开 客户端发送到服务器 的连接,即关闭输出流对象OutputStream os.close(); // 断开 服务器发送到客户端 的连接,即关闭输入流读取器对象BufferedReader br.close(); // 最终关闭整个Socket连接 socket.close(); // 判断客户端和服务器是否已经断开连接 System.out.println(socket.isConnected()); } catch (IOException e) { e.printStackTrace(); } } /** * 发送数据给服务端 */ public void sendMessageToServer(String jsonBean) { long l = System.currentTimeMillis(); final String jsonObject = jsonBean; try { resetSocket(); Log.d("信息内容:",jsonObject); os = socket.getOutputStream(); } catch (Exception e) { e.printStackTrace(); } new Thread(new Runnable() { @Override public void run() { try { os = socket.getOutputStream(); os.write((jsonObject + "/n").getBytes("utf-8")); // 数据的结尾加上换行符才可让服务器端的readline()停止阻塞 os.flush(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } /** * 断开重连 */ public static void resetSocket(){ while(isServerClose(socket)){ try { socket = new Socket(ApiUrl.URL_SERVER_SOCKET, ApiUrl.PORT_SERVER_SOCKET); } catch (UnknownHostException e) { // TODO Auto-generated catch block //e.printStackTrace(); } catch (IOException e) { System.out.println("正在重连...."); // TODO Auto-generated catch block //e.printStackTrace(); } } } /** * 判断是否断开连接,断开返回true,没有返回false * @param socket * @return */ public static Boolean isServerClose(Socket socket){ try{ socket.sendUrgentData(0);//发送1个字节的紧急数据,默认情况下,服务器端没有开启紧急数据处理,不影响正常通信 return false; }catch(Exception se){ return true; } }}
通信测试:https://pan.baidu.com/s/1zq0keV6FREGL6T90uwbqGg 提取码:pl9j
更多相关文章
- 来往 android客户端发布
- Android之开源中国客户端源码分析(二)
- OSCHINA Android 客户端 - 手机相关软件 - 开源中国
- Android——数据存储(Login)
- android 读取串口数据的服务,android串口
- Android gson解析json数据工具类
- Android腾讯微薄客户端开发教程汇总
- 第三课:android数据相关---文件