登录 | 成为卖家 | 管理QQ:283853318
1024商城
  • JTT808-2019道路运输车辆卫星定位系统终端通讯协议

    2019年7月将施行JTT808-2019道路运输车辆卫星定位系统终端通讯协议

    ¥1.00 | 立即购买
  • 通过字节对调的文件加密算法

    1、读取文件字节码

    2、字节码位置调换

    3、存储字节码到文件

    说明:第一次运行为加密,第二次运行为解密。

    ¥1.00 | 立即购买
  • 部标JT808的指令构造详解及示例

    很多人问题JT808的指令怎么构造,在这在给大家介绍下哈。

    首先要掌握JT808的报文格式、转义处理、校验码。

    标识位 7E

    消息头 功能号,如0200,消息上报

    消息体 需要转义处理

    检验码 异或校验码

    标识位 7E

    如:7E80010004013600000003AE5C00010200407E

    先来段简单代码,异或校验,作用是保证数据的一致性

     

    public static String yh(String temp){
    		byte xor=0;
    		byte array[]=Utils.hexToBytes(temp);
    		for(byte b :array)xor=xor ^= b;
    		return Utils.bytesToHex(new byte[]{xor}, 1);
    	}

    转义处理麻烦些,核心思想是不要出现7E,有的话转义

     

    
    	public  String decode(String str) {
    		StringBuilder sb = new StringBuilder();
    		sb.append("7E");
    		for (int i = 2; i < str.length() - 2; i += 2) {
    			switch (Integer.parseInt(str.substring(i, i + 4), 16)) {
    			case 0x7D01:
    				sb.append("7D");
    				i += 2;
    				break;
    			case 0x7D02:
    				sb.append("7E");
    				i += 2;
    				break;
    			default:
    				sb.append(str.substring(i, i + 2));
    			}
    		}
    		sb.append(str.substring(str.length() - 2));
    
    		return sb.toString();
    
    	}
    
    	public String encode(String str) {
    		StringBuilder sb = new StringBuilder();
    		sb.append("7E");
    		for (int i = 2; i < str.length() - 2; i += 2) {
    			switch (Integer.parseInt(str.substring(i, i + 2), 16)) {
    			case 0x7D:
    				sb.append("7D01");
    				break;
    			case 0x7E:
    				sb.append("7D02");
    				break;
    			default:
    				sb.append(new String(str.substring(i, i + 2)));
    			}
    		}
    		sb.append("7E");
    		return sb.toString();
    	}
    

    有这两个做为基础接入来会好很多,可以先写个基类把公共部分写到一起再继承。接下来写子信令时就写简单了

    基类如下:

     

    package com.mall1024.jt808.cmd;
    
    import java.util.Random;
    
    /**
    7E
    8100指令
    0005 数据长度
    088888888888
    0000 包序
    0001 收到注册的包序
    00  成功
    3131 鉴权码11
    05 校验
    7E
     * @author lingx
     *
     */
    public class CmdBubiao {
    
    	static Random random=new Random();
    	private String cmd,body,tid;
    	public CmdBubiao(String cmd,String body,String tid){
    		this.cmd=cmd;
    		this.body=body;
    		this.tid=tid;
    	}
    	public String toCommand(){
    		StringBuilder sb=new StringBuilder();sb.append("7E");
    		sb.append(this.cmd).append(Utils.leftAdd0(Integer.toHexString(this.body.length()/2), 4)).append(this.tid).append(getXh());
    		sb.append(body).append(Utils.yh(sb.toString().substring(2)));sb.append("7E");
    		String temp=encode(sb.toString());
    		return temp.toUpperCase();
    	}
    	/**
    	 * 取序号
    	 * @return
    	 */
    	public String getXh(){
    		return Utils.leftAdd0(Integer.toHexString(random.nextInt(65535)),4).toUpperCase();
    	}
    	
    
    	public  String decode(String str) {
    		StringBuilder sb = new StringBuilder();
    		sb.append("7E");
    		for (int i = 2; i < str.length() - 2; i += 2) {
    			switch (Integer.parseInt(str.substring(i, i + 4), 16)) {
    			case 0x7D01:
    				sb.append("7D");
    				i += 2;
    				break;
    			case 0x7D02:
    				sb.append("7E");
    				i += 2;
    				break;
    			default:
    				sb.append(str.substring(i, i + 2));
    			}
    		}
    		sb.append(str.substring(str.length() - 2));
    
    		return sb.toString();
    
    	}
    
    	public String encode(String str) {
    		StringBuilder sb = new StringBuilder();
    		sb.append("7E");
    		for (int i = 2; i < str.length() - 2; i += 2) {
    			switch (Integer.parseInt(str.substring(i, i + 2), 16)) {
    			case 0x7D:
    				sb.append("7D01");
    				break;
    			case 0x7E:
    				sb.append("7D02");
    				break;
    			default:
    				sb.append(new String(str.substring(i, i + 2)));
    			}
    		}
    		sb.append("7E");
    		return sb.toString();
    	}
    
    	public String getTid(){
    		return this.tid;
    	}
    }
    

    有了基类写具体的功能就很快,比如通用指令8001

     

    package com.mall1024.jt808.cmd;
    
    
    public class Cmd8001 extends CmdBubiao {
    
    	public Cmd8001(String tid,String mainCmd,String subCmd){
    		super("8001",subCmd+mainCmd+"00",tid);
    	}
    	
    	public Cmd8001(String tid,String mainCmd,String subCmd,int code){
    		super("8001",subCmd+mainCmd+Utils.leftAdd0(Integer.toHexString(code), 2),tid);
    	}
    	public static void main(String args[]){
    		Cmd8001 cmd=new Cmd8001("013600000003","0102","00");//7E80010004013600000003AE5C00010200407E
    		System.out.println(cmd.toCommand());
    	}
    }
    

     

     

    ¥10.00 | 立即购买
  • 基于netty写的部标JT808压力测试工具源码

    JT808协议是国家交通部制定的车载定位监控设备的数据报文格式,运营车辆需要有关部门监管,这里要用到jt809平台间的转发

    平时所见的打车app例如:滴滴打车,曹操专车......都是走的JT808协议。该测试工具是为了对808平台进行并发测试。

    ¥10.00 | 立即购买
  • 基于javafx开发的jt808模拟器

    基于javafx开发的jt808模拟器

    ¥3.00 | 立即购买
  • JTT809-2019道路运输车辆卫星定位系统平台数据交换

    JTT809-2019道路运输车辆卫星定位系统平台数据交换

    ¥1.00 | 立即购买
  • 部标JT808的0200位置上报解析算法

    部标JT808的0200位置上报解析算法

    0200的原始报文7E020000220888888888880056000000000000100301584EA806CB10280000000000E91608071610060104000000005A7E

    ¥3.00 | 立即购买
  • 在tomcat中启动netty通信端口监听的实例

    netty是高性能的异步通信框架,是物联网方向开发的首选。集成于tomcat中,方便统一部署与管理。

    ¥1.00 | 立即购买

泉州市领新信息科技有限公司 闽ICP备18012930号-2  
Copyright © 2018 -2019 mail1024.com All Rights Reserved