报文解析(java版)
报文解析工作
1.报文数据
报文数据:应用层的信息分组称为报文。报文数据的分层:
2.报文解析逻辑
将报文数据作为字符串,分段解析。
3.报文数据解析代码
Model(存储数据的类)
package atotommi;
public class atotommiModel extends CommonMsg {
//应用层报头
public String Mtype;
public String MLength;
public String getMtype() {
return Mtype;
}
public void setMtype(String mtype) {
Mtype = mtype;
}
public String getMLength() {
return MLength;
}
public void setMLength(String mLength) {
MLength = mLength;
}
//ATO工作模式
private String ATOWork;
public String getATOWork(){
return this.ATOWork;
}
public void setATOWork(String t_ATOWork){
this.ATOWork=t_ATOWork;
}
//ATS车组匹配状态
private String ATSCommandType;
public String get_ATSCommandType(){
return this.ATSCommandType;
}
public void set_ATSCommandType(String t_ATSCommandType){
this.ATSCommandType=t_ATSCommandType;
}
//ATO软件版本
private String M_ATSGROUP_CO ;
public String get_M_ATSGROUP_CO(){
return this.M_ATSGROUP_CO;
}
public void set_M_ATSGROUP_CO(String t_M_ATSGROUP_CO){
this.M_ATSGROUP_CO=t_M_ATSGROUP_CO;
}
//ATO数据版本
private String M_DATA_VERSION ;
public String get_M_DATA_VERSION(){
return this.M_DATA_VERSION;
}
public void set_M_DATA_VERSION(String t_M_DATA_VERSION){
this.M_DATA_VERSION=t_M_DATA_VERSION;
}
//ATO故障代码
private String M_CHECK_ERRCODE ;
public String get_M_CHECK_ERRCODE(){
return this.M_CHECK_ERRCODE;
}
public void set_M_CHECK_ERRCODE(String t_M_CHECK_ERRCODE){
this.M_CHECK_ERRCODE=t_M_CHECK_ERRCODE;
}
//ATO故障代码
private String M_START_ERRCODE ;
public String get_M_START_ERRCODE(){
return this.M_START_ERRCODE;
}
public void set_M_START_ERRCODE(String t_M_START_ERRCODE){
this.M_START_ERRCODE=t_M_START_ERRCODE;
}
//ATO牵引制动状态
private String M_FORCE_STATUS;
public String get_M_FORCE_STATUS(){
return this.M_FORCE_STATUS;
}
public void set_M_FORCE_STATUS(String t_M_FORCE_STATUS){
this.M_FORCE_STATUS=t_M_FORCE_STATUS;
}
//门控模式
private String M_DOORMODE;
public String get_M_DOORMODE(){
return this.M_DOORMODE;
}
public void set_M_DOORMODE(String t_M_DOORMODE){
this.M_DOORMODE=t_M_DOORMODE;
}
//车组号
private String NID_VEHICLE;
public String get_NID_VEHICLE(){
return this.NID_VEHICLE;
}
public void set_NID_VEHICLE(String t_NID_VEHICLE){
this.NID_VEHICLE=t_NID_VEHICLE;
}
//车组次
private String NID_TRAIN;
public String get_NID_TRAIN(){
return this.NID_TRAIN;
}
public void set_NID_TRAIN(String t_NID_TRAIN){
this.NID_TRAIN=t_NID_TRAIN;
}
//目的地号
private String NID_DESTINATION;
public String get_NID_DESTINATION(){
return this.NID_DESTINATION;
}
public void set_NID_DESTINATION(String t_NID_DESTINATION){
this.NID_DESTINATION=t_NID_DESTINATION;
}
//司机号
private String NID_DRIVER;
public String get_NID_DRIVER(){
return this.NID_DRIVER;
}
public void set_NID_DRIVER(String t_NID_DRIVER){
this.NID_DRIVER=t_NID_DRIVER;
}
//区间运行调整命令
private String M_RUNTIME_STATUS;
public String get_M_RUNTIME_STATUS(){
return this.M_RUNTIME_STATUS;
}
public void set_M_RUNTIME_STATUS(String t_M_RUNTIME_STATUS){
this.M_RUNTIME_STATUS =t_M_RUNTIME_STATUS;
}
//跳停状态
private String M_SKIP_STATUS;
public String get_M_SKIP_STATUS(){
return this.M_SKIP_STATUS;
}
public void set_M_SKIP_STATUS(String t_M_SKIP_STATUS){
this.M_SKIP_STATUS=t_M_SKIP_STATUS;
}
//扣车状态
private String M_TASK_STATUS;
public String get_M_TASK_STATUS(){
return this.M_TASK_STATUS;
}
public void set_M_TASK_STATUS(String t_M_TASK_STATUS){
this.M_TASK_STATUS=t_M_TASK_STATUS;
}
//下一停车站台 ID
private String NID_NEXT_PLATFORM;
public String get_NID_NEXT_PLATFORM(){
return this.NID_NEXT_PLATFORM;
}
public void set_NID_NEXT_PLATFORM(String t_NID_NEXT_PLATFORM){
this.NID_NEXT_PLATFORM=t_NID_NEXT_PLATFORM;
}
//制动力状态
private String M_BRAKE_STATUS;
public String get_M_BRAKE_STATUS(){
return this.M_BRAKE_STATUS;
}
public void set_M_BRAKE_STATUS(String t_M_BRAKE_STATUS){
this.M_BRAKE_STATUS=t_M_BRAKE_STATUS;
}
}
Analyze(解析报文的类)
package atotommi;
public class atotommiAnalyze extends AnalyzeMsg{
public atotommiModel m_atotommi;
public atotommiAnalyze() {
m_atotommi = new atotommiModel();
}
//父类方法的重载,对这个方法增加新的功能
//长度是5+36个字节,对报头信息进行解析
public void analyzeMsg(byte[] bytes){
//byte转string
StringBuffer sb = new StringBuffer();
for(int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(bytes[i] & 0xFF);
if(hex.length() < 2){
sb.append(0);
}
sb.append(hex);
}
String p_data = sb.toString();
int GMsgLength = Integer.parseInt(p_data.substring(14,18), 16);// 应用层数据包的长度
String HGMsg = p_data.substring(0,18);//总长度
//报文类型、源设备、目的设备、长度
int index =0;
m_atotommi.setMsgtype(HGMsg.substring(index, index+2));//2
index +=2;
m_atotommi.setSendid(HGMsg.substring(index, index+2));//2
index +=2;
m_atotommi.setReceiveid(HGMsg.substring(index, index+2));//2
index +=2;
m_atotommi.setMsglength(HGMsg.substring(index, index+4));//4
index +=4;
m_atotommi.setMtype(HGMsg.substring(index, index+4));//4
index +=4;
m_atotommi.setMLength(HGMsg.substring(index, index+4));//4
index +=4;
String AMsg = p_data.replaceFirst(HGMsg, "");//应用层数据
int TMsgLength = AMsg.length() / 2;//报文中应用层的长度实际的
if (TMsgLength == GMsgLength) { //
// 将各信息包进行拆分
int index1 =0;
m_atotommi.setATOWork(HGMsg.substring(index1, index1+2));//2
index1 +=2;
m_atotommi.set_ATSCommandType(HGMsg.substring(index1, index1+2));//2
index1 +=2;
m_atotommi.set_M_ATSGROUP_CO(HGMsg.substring(index1, index1+8));//8
index1 +=8;
m_atotommi.set_M_DATA_VERSION(HGMsg.substring(index1, index1+8));//8
index1 +=8;
m_atotommi.set_M_CHECK_ERRCODE(HGMsg.substring(index1, index1+8));//8
index1 +=8;
m_atotommi.set_M_START_ERRCODE(HGMsg.substring(index1, index1+2));//2
index1 +=2;
m_atotommi.set_M_FORCE_STATUS(HGMsg.substring(index1, index1+2));//2
index1 +=2;
m_atotommi.set_M_DOORMODE(HGMsg.substring(index1, index1+2));//2
index1 +=2;
m_atotommi.set_NID_VEHICLE(HGMsg.substring(index1, index1+4));//4
index1 +=4;
m_atotommi.set_NID_TRAIN(HGMsg.substring(index1, index1+4));//4
index1 +=4;
m_atotommi.set_NID_DESTINATION(HGMsg.substring(index1, index1+8));//8
index1 +=8;
m_atotommi.set_NID_DRIVER(HGMsg.substring(index1, index1+4));//4
index1 +=4;
m_atotommi.set_M_RUNTIME_STATUS(HGMsg.substring(index1, index1+4));//4
index1 +=4;
m_atotommi.set_M_SKIP_STATUS(HGMsg.substring(index1, index1+2));//2
index1 +=2;
m_atotommi.set_M_TASK_STATUS(HGMsg.substring(index1, index1+2));//2
index1 +=2;
m_atotommi.set_NID_NEXT_PLATFORM(HGMsg.substring(index1, index1+8));//8
index1 +=8;
m_atotommi.set_M_BRAKE_STATUS(HGMsg.substring(index1, index1+2));//2
} else {
System.out.println("报文解析出现错误!");
}}
//ATO工作模式/ATS车组匹配状态/ATO软件版本/ATO数据版本/ATO故障代码/ATO故障代码/ATO牵引制动状态
//门控模式/车组号/车组次/目的地号/司机号/区间运行调整命令/跳停状态/扣车状态/下一停车站台 ID/制动力状态
// System.out.println("解析成功");
public atotommiModel getModel(){
return m_atotommi;
}
@Override
public void analyzeMsg(String p_data) {
// TODO 自动生成的方法存根
}
}
报文解析(java版)相关推荐
- iso8583 java解析源码_iso8583报文解析java
8583报文详解 4页 免费 8583报文格式介绍 1页 免费 8583报文及各域详解 48页 1下载券 解析ISO8583报文实例 4页 1下载券 8583报文 48页 免费 ...... Pos ...
- java 数学表达式解析插件_数学表达式解析-JAVA版
1 .工具介绍 String exp = "v>=10&&v<=2000&&v%10==0"; 在 js 中,能够直接运行 eval 得 ...
- java执行数学表达式_数学表达式解析-JAVA版
1 .工具介绍 String exp = "v>=10&&v<=2000&&v%10==0"; 在 js 中,能够直接运行 eval 得 ...
- 2019年8月14号抖音更新后单个解析java版源码
19-06-04:接口变更(https://aweme.snssdk.com/aweme/v1/aweme/detail/) 19-06-05:新增长视频,userId.抖音id 19-06-13:提 ...
- Modbus通信协议+Modbus串口调试工具+Java版协议解析源码
网络与串口二合一调试助手TCPCOM: https://download.csdn.net/download/liuyuan_java/87454762 Modbus调试工具,模拟串口调试工具 htt ...
- java版银联8583协议解析,超简单超直观的实现及示例(全互联网最简单)
一直以来做嵌入式软件开发,跟银联8583协议通信打交道太多了. 最近有需要把8383协议的解析用到android上,但是搜遍了整个互联网,没发现有哪个简单好用点的java版8583解析库.就自己动手自 ...
- java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)
解析: 首先是读取字节: /*** 读取输入流中指定字节的长度 * * 输入流 * *@paramlength 指定长度 *@return指定长度的字节数组*/ public static byte[ ...
- 深入解析棋牌湖南放炮罚,跑胡子手游源码(java版)
深入解析棋牌湖南放炮罚,跑胡子手游后台源码(java版) 最近开发了一款湖南放炮罚的房卡模式带三级分销的手游,现在我就将我开发中的思路给朋友们分享一下. 首先介绍一下棋牌游戏最近的火热度吧. 最近微信 ...
- JAVA实现报文解析:协议的数据类型和完整的报文结构解析
**JAVA实现GBT32960报文解析系列文章链接:** JAVA实现GBT32960报文解析(一):协议的数据类型和完整的报文结构解析 JAVA实现GBT32960报文解析(二):数据包结构解析源 ...
- 解析java程序设计第二版答案,解析Java程序设计答案
解析Java程序设计答案 java作业 5. 答:由于第一个catch子句将捕获所有异常,因此,第二个catch子句永远不会被执行.不能通过编译. 6. 答: public class first_e ...
最新文章
- 面试热点Redis分布式锁,再细说一次
- mongodb php 存储文件大小,PHP MongoDB GridFS 存储文件的方法详解
- .net数据库操作类2
- COGS 930. [河南省队2012] 找第k小的数 主席树
- 2008R2Win7管理九DNS冗余和恢复
- PLSQL 查询结果只显示年月日不显示时分秒的解决方法
- 表格列求和_Excel表格的基本操作,包含制作一个表格10方面的知识
- 大盘指数的定义及其计算方法
- 全球最大电子展2018再度起航,镁客网在香港带你深度探讨人工智能
- vue脚手架学习笔记
- 基于matlab的心电信号预处理
- 一天干掉一只Monkey计划(三)——延迟渲染,及材质ID
- 启动Hadoop集群,出现Cannot set priority of nodemanager(resourcemanager) process xxx问题
- 客户协作 over 合同谈判
- (Hankson的逆问题)
- MaxCompute 助力衣二三构建智能化运营工具
- DeFi保险协议InsurAce.io宣布与Mushrooms Finance达成战略合作为其平台用户提供智能合约安全相关保险服务
- 从华为P20开始的脑洞之旅:AI如何改变未来手机生活
- Android 平台语音通话及回音消除、噪音消除研究
- SQL WEEK()函数
热门文章
- python gif压缩_压缩gif的正确姿势
- 200plc与施耐德ATV610变频器modbus通讯
- 用计算机新字库打出的文字,为什么用五笔打字有很多字打不出来(GBK和GB2312字库的区别)...
- 【AI面试题】随机森林算法的原理、随机性、优缺点
- 妹妹系列:哥哥,机器人示教器有错别字??聊聊国产示教器!!
- php 事件流转,php46公文流转
- 2020年下半年软件设计师下午真题及答案解析
- IO、NIO和Netty
- 打印时显示预服务器,域服务器如何设置打印机
- 计算机专业人才需求调研背景,计算机专业人才需求调研报告