package com.basic.security.utils.yuv.pull.client; import com.basic.security.utils.Constants; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParseException; import com.google.gson.JsonParser; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; public class SocketClient2 extends Thread { // private ServerSocket mServer; Socket socket; private DataListener mDataListener; private BufferManager mBufferManager; private String ip; public SocketClient2(String ip) { this.ip = ip; } @Override public void run() { super.run(); BufferedInputStream inputStream = null; BufferedOutputStream outputStream = null; Socket socket = null; ByteArrayOutputStream byteArray = null; try { while (!Thread.currentThread().isInterrupted()) { if (byteArray != null) byteArray.reset(); else byteArray = new ByteArrayOutputStream(); socket = new Socket(); // socket.connect(new InetSocketAddress("192.168.1.102", 8888), 10000); socket.connect(new InetSocketAddress(ip, Constants.yuvServerPort), 10000); System.out.println("new socket"); inputStream = new BufferedInputStream(socket.getInputStream()); outputStream = new BufferedOutputStream(socket.getOutputStream()); byte[] buff = new byte[256]; byte[] imageBuff = new byte[460800]; int len = 0; String msg = null; // read msg while ((len = inputStream.read(buff)) != -1) { msg = new String(buff, 0, len); msg = msg.substring(0, msg.lastIndexOf("}") + 1); // JSON analysis JsonParser parser = new JsonParser(); boolean isJSON = true; JsonElement element = null; try { element = parser.parse(msg); } catch (JsonParseException e) { System.out.println("exception: " + e); isJSON = false; } if (isJSON && element != null) { JsonObject obj = element.getAsJsonObject(); element = obj.get("type"); if (element != null && element.getAsString().equals("data")) { element = obj.get("length"); int length = element.getAsInt(); element = obj.get("width"); int width = element.getAsInt(); element = obj.get("height"); int height = element.getAsInt(); element = obj.get("rotation"); int rotation = element.getAsInt(); imageBuff = new byte[length]; mBufferManager = new BufferManager(length, width, height); mBufferManager.setOnDataListener(mDataListener); break; } } else { byteArray.write(buff, 0, len); break; } } if (imageBuff != null) { // JsonObject jsonObj = new JsonObject(); // jsonObj.addProperty("state", "ok"); // outputStream.write(jsonObj.toString().getBytes()); // outputStream.flush(); mBufferManager = new BufferManager(460800, 640, 480); mBufferManager.setOnDataListener(mDataListener); // read image data DataInputStream dataInputStream = new DataInputStream(inputStream); byte[] data11 = new byte[460800]; while (true) { dataInputStream.readFully(data11, 0, data11.length); mBufferManager.fillBuffer(data11, data11.length); } // while ((len = inputStream.read(imageBuff)) != -1) { // mBufferManager.fillBuffer(imageBuff, len); // } } if (mBufferManager != null) { mBufferManager.close(); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { if (outputStream != null) { outputStream.close(); outputStream = null; } if (inputStream != null) { inputStream.close(); inputStream = null; } if (socket != null) { socket.close(); socket = null; } if (byteArray != null) { byteArray.close(); } } catch (IOException e) { } } } public void setOnDataListener(DataListener listener) { mDataListener = listener; } }