登录 | 成为卖家 | 管理QQ:283853318
1024商城
  • 通过字节对调的文件加密算法

    1、读取文件字节码

    2、字节码位置调换

    3、存储字节码到文件

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

    ¥1.00 | 立即购买
  • 车载定位天琴协议解析源码

    车载定位天琴协议解析源码

    天琴报文示例:

    2A48572C303033303030343537322C56312C3037343232322C412C333235382E343832332C4E2C31313430312E32303131313131382C453133334646463623

    *HQ,865205034151422,V1,021023,A,2249.3433,N,11424.9248,E, 19.05,011,131218,FFFFFBFF#

    ¥1.00 | 立即购买
  • OCR图片识别

    OCR图文识别demo安卓源码,可直接编译生成app使用

    ¥20.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 | 立即购买
  • 地心坐标【WGS-84】转火星坐标系【GCJ-02】偏移算法

    地心坐标【WGS-84】转火星坐标系【GCJ-02】偏移算法,另送方向算法与两个经纬度之间的距离算法

    ¥10.00 | 立即购买
  • 《java基础教程》

    这是专门针对小白的零基础Java教程。

    为什么要学Java?

    因为Java是全球排名第一的编程语言,Java工程师也是市场需求最大的软件工程师,选择Java,就是选择了高薪。

    high-salary

    为什么Java应用最广泛?

    从互联网到企业平台,Java是应用最广泛的编程语言,原因在于:

    • Java是基于JVM虚拟机的跨平台语言,一次编写,到处运行;

    • Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理;

    • Java虚拟机拥有工业级的稳定性和高度优化的性能,且经过了长时期的考验;

    • Java拥有最广泛的开源社区支持,各种高质量组件随时可用。

    Java语言常年霸占着三大市场:

    • 互联网和企业应用,这是Java EE的长期优势和市场地位;

    • 大数据平台,主要有Hadoop、Spark、Flink等,他们都是Java或Scala(一种运行于JVM的编程语言)开发的;

    • Android移动平台。

    这意味着Java拥有最广泛的就业市场。

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

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

    0200的原始报文7E020000220888888888880056000000000000100301584EA806CB10280000000000E91608071610060104000000005A7E

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

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

    ¥1.00 | 立即购买
  • SpringBoot实战开发视频教程(58集)

    本教程包括了SpringBoot的基本使用及SpringBoot如何和各项技术整合,具体如下:

    1.SpringBoot简介

    2.SpringBoot入门案例

    3.SpringBoot创建父工程

    4.SpringBoot的配置文件

    5.SpringBoot访问静态资源

    6.SpringBoot整合日志

    7.SpringBoot全局异常处理器

    8.SpringBoot整合Jsp

    9.SpringBoot事务

    10.SpringBoot整合多数据源

    11.SpringBoot异步调用

    12.SpringBoot打包发布基于

    13.SpringBoot的thymeleaf模板引擎

    14.基于SpringBoot+JPA+JSP实战开发

    15.基于SpringBoot的多模块实战开发

    16.基于SpringBoot的热部署

    17.基于SpringBoot的文件上传

    18.基于SpringBoot的ActiveMQ消息队列实战开发

    19.基于SpringBoot的Data REST实战开发

    20.基于SpringBoot的Data Solr搜索引擎开发

    21.基于SpringBoot的Elasticsearch实战开发

    22.基于SpringBoot的Email邮件发送

    23.基于SpringBoot的FastJson解析Json数据

    24.基于SpringBoot的Freemarker模板引擎实战开发

    25.基于SpringBoot的GemFire实战开发

    26.基于SpringBoot的JdbcTemplate数据模板

    27.基于SpringBoot的Kafka实战开发

    28.基于SpringBoot的Logging日志配置

    29.基于SpringBoot的MongoDB实战开发

    30.基于SpringBoot的Neo4j实战开发

    31.基于SpringBoot的QuartZ Scheduler实战开发

    32.基于SpringBoot的RabbitMQ实战开发

    33.基于SpringBoot的Redis实战开发

    34.基于SpringBoot的Rest Services实战开发

    35.基于SpringBoot和AngularJS实战开发

    36.基于SpringBoot的WebSocket开发

    ¥1.00 | 立即购买

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