2014-12-28 6 views
0

TK06A GPS 추적기를 사용하고 있으며 자체 서버 자바 파일을 개발 중이며 TK06A 설명서에 따라 초기 로그인 메시지 패킷을 받았으며 이제는 ack GPS 메시지 패킷을 얻기 위해 장치에 연결합니다.메시지를 서버에서 GPS 장치로 보냅니다.

좌표를 저장하는 GPS 메시지 패킷이 표시되지 않습니다. 아래 코드를 추가합니다. 나는 LOC에서 IMEI 번호를 얻을 때까지 정확하고 출력 스트림/ACk를 보내는 데 문제가 있다고 확신합니다. 나는 여기에서 완전히 맞았다. 내가 어디로 잘못 가고 있는지 모르겠다.

친절히 도움!

public void run() { 
DataInputStream inputS = null; 
DataOutputStream dos = null; 
try { 
    inputS = new DataInputStream(socket.getInputStream()); 
    if (inputS.available() > 0) { 
     byte[] bb = getBytesFromInputStream(inputS); 
     ChannelBuffer buf = toByteBuffer(bb); 
     String imei = readImei(buf); 
     System.out.println("IMEI::::: " + imei); 
     buf.skipBytes(5); // End 

     OutputStream os = socket.getOutputStream(); 
     dos = new DataOutputStream(os); 
     byte[] response = parseHex(); 

     dos.write(response); 
     Thread.sleep(1000); 
     dos.flush(); 

    } 

} catch (Exception e) { 
    e.printStackTrace(); 
} 

finally { 
    try { 
     inputS.close(); 
     if (dos != null) 
      dos.close(); 
     socket.close(); 
    } catch (IOException e) { 

    } 
} 

}

public byte[] parseHex() { 
    String hexACKlogin = "787805010001D9DC0D0A"; // String in HEX format 
    int len = hexACKlogin.length(); 
    byte[] data = new byte[len/2]; 
    for (int i = 0; i < len; i += 2) { 
     data[i/2] = (byte) ((Character.digit(hexACKlogin.charAt(i), 16) << 4) 
          + Character.digit(hexACKlogin.charAt(i+1), 16)); 
    } 
    return data; 
} 
+0

당신이 구현하는지 프로토콜 알려주세요. 그것이 없으면 우리는 당신을 도울 수 없을 것입니다. –

+0

기본적으로 데이터 소켓에서 읽는 방법은 read 및 * Reader 대신 * Writer 클래스의 메서드를 사용하여이 데이터 소켓에 쓰는 방법이기도합니다. – laune

+0

왜 태그가 달린 GPS입니까 ?? – laune

답변

0

나는 GPS 추적 장치 (TK06A)에 대한 로직을 구현하고있다. 클라이언트는 추적기에서 보낸 데이터를 읽는 데 사용하는 GPS 추적기 및 서버입니다.

위도가 &이며 위도가 포함되지 않은 로그인 메시지 패킷 인 것으로 밝혀진 18 바이트의 데이터가 수신되었습니다.

클라이언트에게 ACK 응답을 보내야한다고합니다. [여기에 붙어 있습니다.]

내 경우에는 클라이언트에 대한 응답으로 바이트를 보내야합니다. Gps 추적기 바이트 [] 응답 = {0x78 0x78 0x05 0x01 0x00 0x01 0xD9 0xC 0x0D 0x0A};

나는 ack를 보내기 위해 portpeeker를 사용했으며 36 바이트의 응답을 반환했다.

PS : 나는 데이터 전송을 위해 TCP를 사용하고

try { 
     inputS = new DataInputStream(socket.getInputStream()); 
     oos = new ObjectOutputStream(socket.getOutputStream()); 
     if (inputS.available() > 0) { 
      System.out.println("Bytes Cap::: "+inputS.available()); 
      byte[] bb = getBytesFromInputStream(inputS); 
      ChannelBuffer buf = toByteBuffer(bb); 
      buf.skipBytes(4); 
      String imei = readImei(buf); 
      System.out.println("IMEI::::: " + imei); 
      buf.skipBytes(5); // End 

      byte[] response = sendOutputMessage(); 
      oos.write(response); 
      oos.flush(); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    }finally{ 
     try { 
      inputS.close(); 
      oos.close(); 
      socket.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

public byte[] sendOutputMessage() { 
    byte buf[] = new byte[10]; 
    // Start of the body of setOutput 
    // Message type 0x78 0x78 0x05 0x01 0x00 0x01 0xD9 0xDC 0x0D 0x0A 
    buf[0] = (byte) 0x78; 
    buf[1] = (byte) 0x78; 
    buf[2] = (byte) 0x05; 
    buf[3] = (byte) 0x01; 
    buf[4] = (byte) 0x00; 
    buf[5] = (byte) 0x01; 
    buf[6] = (byte) 0xD9; 
    buf[7] = (byte) 0xDC; 
    buf[8] = (byte) 0x0D; // end f1 
    buf[9] = (byte) 0x0A; 
    return buf; 
} 
+0

이 응답을 보내면 어떤 오류가 발생합니까? 들려요? – user1807337

+0

내 업데이트로 내 질문을 수정하겠습니다. –

관련 문제