switch-这个代码对于这个数据包什么意思?它是怎么算出来的?

问题描述

这个代码对于这个数据包什么意思?它是怎么算出来的?

int splitFlag=0;
int splitNextFlag=0;
//int byteLength=1;
//int byteLengthTemp=newBytes[2]& 0xFF;
//byteLength=byteLengthTemp+2;
//boolean runFlag=true;
while(splitNextFlag<newBytes.length){
try {
splitFlag=splitNextFlag;//每次都更新读取的起始位置

            if(newBytes[splitFlag] != (byte)0xFF){
                throw new RuntimeException("设备"+recEntity.getDeviceId()+"接收数据异常,信息分组首字节不是FF : "+CommUtils2.toHexString(newBytes));

// throw new RuntimeException("接收数据异常,信息分组首字节不是FF:" + logMsg);

            }

            byte recFlag=newBytes[splitFlag+1]; //标识符位
            int byteLengthTemp=newBytes[splitFlag+2]& 0xFF;//车道字节所占长度
            int splitFlagTemp=splitFlag;

            splitNextFlag=splitFlagTemp+byteLengthTemp+4;//读取下条数据起始位置
            if(newBytes.length==170){
            switch (recFlag) {
            case 0x20:
                flowBytes2=ArrayUtils.subarray(newBytes, splitFlag,splitNextFlag);
                System.out.println("中车流量"+CommUtils2.toHexString(flowBytes2));
                break;

解决方案

通过代码去理解数据包的格式,就好比根据脚印去推测人的长相一样。
你应该优先去看文档、或者询问制定协议的人。

解决方案二:

如果你实在没有文档,也找不到协议制定者,那么你也不是傻看代码,你应该尽量采集更多的数据包样本。
同时尝试修改你的程序,对各种你不确定的地方做各种修改尝试,找出规律。

解决方案三:

根据协议来定义的数据包,开发者应该配合协议来查看代码! if(newBytes[splitFlag] != (byte)0xFF)该协议的开始码应该是0xff,
至于后面的是什么以及该协议的长度是多少以及结束码、校验码等等都应该看协议。

解决方案四:

根据协议来定义的数据包,开发者应该配合协议来查看代码! if(newBytes[splitFlag] != (byte)0xFF)该协议的开始码应该是0xff,
至于后面的是什么以及该协议的长度是多少以及结束码、校验码等等都应该看协议。

解决方案五:

看你这代码,感觉数据最小包格式应该是:0xff(1byte头)+标识符(1byte)+该数据包有效字节长度(1byte)+有效数据(该数据包有效字节长度byte)+结束符(1byte)。然后代码里的“newBytes”应该是有可能包含多个这样的完整包。然后代码中意思就是“newBytes”的长度为170并且最小包标识符为0x20时,将该最小包数据的所有字节以十六进制打印出来。

时间: 2024-12-20 20:07:14

switch-这个代码对于这个数据包什么意思?它是怎么算出来的?的相关文章

数据包偏移量的计算 我想获得相应的位置 这个代码怎么算的?

问题描述 数据包偏移量的计算 我想获得相应的位置 这个代码怎么算的? 示例数据(包括:帧头.包长.数据包内容.CRC 校验.帧尾): AA AA AA 00 01 30 30 31 31 31 31 30 32 30 36 30 39 30 30 30 31 47 31 30 32 4C 32 30 36 31 32 30 32 32 35 00 00 01 D6 07 08 11 05 0F 00 04 0B 33 19 00 2A 00 00 00 03 00 53 03 00 66 02

代码-linux的xterm开启的终端里使用原始套接字发送数据包出错,求助

问题描述 linux的xterm开启的终端里使用原始套接字发送数据包出错,求助 xterm下原始套接字可以接收数据包,但是发送数据包时出错,怎么解决? 错误是[error 101]network is unreachable. 代码如下: proto = socket.getprotobyname('tcp') # only tcp sock = socket.socket( socket.AF_INET, socket.SOCK_RAW, proto ) packet_base = sock.

建立连接时无法将数据包发送给任意主机,帮忙看下代码,看怎样可以建立起通讯关系。我在调试是总是出错!

问题描述 voidSendData(byte[]data){try{IPAddressips=IPAddress.Parse(ControlIp);//("192.168.1.1");192.168.10.1IPEndPointipe=newIPEndPoint(ips,int.Parse(Port));//把ip和端口转化为IPEndPoint实例;1376UdpClientc=newUdpClient(23456);//创建一个Socketc.Connect(ipe);//连接到服

5万余首圣诞歌词数据包+Kaggle数据科学家的脑洞=?(附数据包+代码)

昨天在python给你的圣诞帽上意犹未尽的动手党(点击查看相关文章),今天的话题依然和圣诞节有关. 前几天,文摘菌发现了一个Kaggle上的圣诞歌曲数据礼包.这里有你能想到所有的圣诞歌曲,总计超过5万首.而Kaggle上的数据科学家用各种方式要把它们玩儿坏了,一起看看有哪些有趣的结论! 又是圣诞节,有没有被大街小巷的圣诞歌曲洗耳朵?有没有想过这些圣诞歌曲到底有什么魔力?他们的歌词又有什么共同点? 我们把所有跟圣诞有关的歌曲都打包起来,总计超过5万首歌曲.在这篇文章里,文摘菌将首先用朴素贝叶斯对这

内核模块加载-netfilter钩子拦截数据包获取数据包源MAC地址

问题描述 netfilter钩子拦截数据包获取数据包源MAC地址 本人大学生,最近在研究arp防火墙,想实现主机拦截从本机出去发送的所有数据包,获取其源mac地址,以防止主机欺骗.在网上大量调研后采用了netfilter钩子来实现截获数据包,但是在加载内核模块时出现了问题.因为之前没有接触过网络和内核,只能在几天的时间里自学了一下.所以问题比较多.现在贴出我的程序和makefile文件请大神帮忙解答!!小弟感谢不尽,这次开发对我真的很重要哈,但毕竟本人能力有限,先谢谢大家了! #include#

linux网络实现分析(3)——数据包的发送(IP层到链路层)

二层(链路层)数据包发送过程分析         当上层准备好一个包之后,交给链路层,链路层数据包发送主要通过dev_queue_xmit函数处理.数据包的发送可分为两种,一种是正常的传输流程,即通过网卡驱动,另一种是通过软中断(见注3).为了理解方便,首先看一下dev_queue_xmi函数的整体调用关系图.     dev_queue_xmit     本函数用来将带发送的skb加入一个dev的队列(Queue),调用这个函数前必须设置好skb的device和priority,本函数可以在中

tcprstat源码分析之tcp数据包分析

tcprstat是percona用来监测mysql响应时间的.不过对于任何运行在TCP协议上的响应时间,都可以用.本文主要做源码分析,如何使用tcprstat请大家查看博文<tcprstat分析服务的响应速度利器> tcprstat和tcpdump一样,使用libpcap库进行抓包,然后再通过程序对抓取的tcp包进行分析. tcprstat对tcp包分析的大概流程如下: <img src="http://www.bo56.com/wp-content/uploads/2014/

手把手教你解决ECshop导入淘宝数据包乱码问题

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 公司打算将重点从淘宝转移到B2C上边,于是把我招进来了,经过两个月的时间,B2C网站搭建起来,但是在导入淘宝数据包的时候出现问题了,那就是数据乱码,在网上找了很久都没有找到真正可以解决的办法,那就只能自己搞了,还好最好被我捣鼓出来了. 我用的是ecshop2.73的版本,其他版本没有验证,本人只保证同版本的可以用. 前期准备: 1.利用淘宝助

C#实现的多线程异步Socket数据包接收器框架

几天前在博问中看到一个C# Socket问题,就想到笔者2004年做的一个省级交通流量接收服务器项目,当时的基本求如下: 接收自动观测设备通过无线网卡.Internet和Socket上报的交通量数据包 全年365*24运行的自动观测设备5分钟上报一次观测数据,每笔记录约2K大小 规划全省将有100个左右的自动观测设备(截止2008年10月还只有30个) 当时,VS2003才发布年多,笔者也是接触C#不久.于是Google了国内国外网,希望找点应用C#解决Socket通信问题的思路和代码.最后,找