private byte[] readPacket() throws IOException { byte[] reslutPacket = null; byte p_head, p_type; byte[] p_lenByte = new byte[4]; int p_lenInt; int index, buf; while (true) { try { p_head = in.readByte(); if (p_head == ProtocolVar.PacketType.PACKET_HEAD) { p_type = in.readByte(); in.read(p_lenByte); p_lenInt = (int) ConvertTools.byteArrToLong_littleEnd(p_lenByte, 0); reslutPacket = new byte[p_lenInt]; reslutPacket[0] = p_head; reslutPacket[1] = p_type; ConvertTools.copyByteArr(p_lenByte, reslutPacket, 0, 2, 4); index = 6; /** 直到收到所有数据 */ while (index < p_lenInt) { if (in.available() != 0) { buf = in.read(reslutPacket, index, p_lenInt - index); if (buf != -1) { index += buf; } } } break; } } catch (ArrayIndexOutOfBoundsException ex) { Logger.getLogger(CameraTask.class.getName()).log(Level.INFO, devSeqStr, ex); } } return reslutPacket; }
private void clearStreamResource() { if (in != null) { try { in.close(); } catch (IOException ex) { Logger.getLogger(CameraTask.class.getName()) .log( Level.INFO, ConvertTools.devSeqByteArr2Str(devSeq) + "inputStream close 异常 in closeLink()Method", ex); } } if (out != null) { try { out.close(); } catch (IOException ex) { Logger.getLogger(CameraTask.class.getName()) .log( Level.INFO, ConvertTools.devSeqByteArr2Str(devSeq) + "outputStream close 异常 in closeLink()Method", ex); } } if (cameraSocket != null && !cameraSocket.isClosed()) { try { cameraSocket.close(); } catch (IOException ex) { Logger.getLogger(CameraTask.class.getName()).log(Level.SEVERE, null, ex); } } }
public void connect() { try { devSeqStr = cameraUtil.getDevSeq(); devSeq = ConvertTools.devSeqStr2ByteArr(devSeqStr); serverIP = cameraUtil.getServerIP(); cameraSocket = new Socket(); SocketAddress sa = new InetSocketAddress(ConvertTools.ipByteArr2Str(serverIP), 22616); cameraSocket.connect(sa, 60 * 1000); port = cameraSocket.getLocalPort(); cameraUtil.setOnline(true); localIP = cameraSocket.getInetAddress().getAddress(); in = new DataInputStream(cameraSocket.getInputStream()); out = new DataOutputStream(cameraSocket.getOutputStream()); heartbeatTimer = new Timer(); alarmTimer = new Timer(); } catch (IOException ex) { Logger.getLogger(CameraTask.class.getName()) .log(Level.INFO, "设备:" + devSeqStr + " 端口:" + port, ex); destoryTask(CLEAR_LEVEL_3); return; } // ---------先登录注册 建立可发送指令的连接 if (proKeyReq() == GlobalVar.SUCCESSED) { try { if (proLoginReq() == GlobalVar.SUCCESSED) { Camera.addCameraTask(devSeqStr, this); receivePacket(); } } catch (IOException ex) { Logger.getLogger(CameraTask.class.getName()).log(Level.SEVERE, devSeqStr, ex); destoryTask(CLEAR_LEVEL_3); } } destoryTask(CLEAR_LEVEL_3); }
/** * 发送 申请密钥 数据包 * * @return * @throws IOException */ private int proKeyReq() { // -------------------------------------发送 申请密钥 数据包 byte[] keyReqByteArr, keyRespByteArr; try { keyReqByteArr = InitReqSecretKeyPacket.init(ConvertTools.devSeqStr2ByteArr(cameraUtil.getDevSeq())) .toByteArray(); // Logger.getLogger(CameraTask.class.getName()).log(Level.INFO, "申请密钥数据包:"); // PrintHelper.printByteArr(keyReqByteArr, 0); sendPacket(keyReqByteArr); // -------------------------------------接收 申请密钥 数据包 keyRespByteArr = readPacket(); // Logger.getLogger(CameraTask.class.getName()).log(Level.INFO, "回复密钥数据包:"); // PrintHelper.printByteArr(keyRespByteArr, 0); Kaer_SecretKey_resp keyResp = new Kaer_SecretKey_resp(); if (GlobalVar.FAILED == keyResp.parsePacket(keyRespByteArr)) { Logger.getLogger(CameraTask.class.getName()).log(Level.INFO, "申请密钥数据包解析错误"); return GlobalVar.FAILED; } // 判断是不是申请密钥 请求类型 if (keyResp.getP_type() != ProtocolVar.PacketType.SCRETKEY_PRO) { Logger.getLogger(CameraTask.class.getName()).log(Level.INFO, "申请密钥数据包类型错误"); return GlobalVar.FAILED; } PUID = keyResp.getPUID(); MD5Key = keyResp.getSecretKey(); } catch (IOException ex) { Logger.getLogger(CameraTask.class.getName()) .log(Level.SEVERE, devSeqStr + "申请密钥操作失败 端口:" + port, ex); return GlobalVar.FAILED; } return GlobalVar.SUCCESSED; }