写协议解析程序的过程(关于通信解析函数的理解)
来源:互联网 发布:学点什么技术好 知乎 编辑:程序博客网 时间:2024/06/07 23:41
最近在公司实习,需要写一个协议的解析程序。开始没有感觉会有多麻烦,感觉就是按照协议说的一步步走下去就行了。在写的过程中,慢慢发现没有自己想的那么简单。由于以前没有写过这方面的程序,在一开始就陷入了误区。对于上行数据,与下行数据的解析的描述,自己就搞错了。一直看着下行数据的描述,去想上行数据的代码怎么从数据中提取出来。开始忙了一周,程序还是很混沌。
第二周在将协议看了看,又问了问同事,才闹明白了自己所操作的主要接收下行数据,所以主要负责对下行数据的解析。知道上边发下的命令后,在组织一段上行数据发出去。如此就是一个解析程序。如此一个循环,即解析了下行数据。之后自己总结了当时理解的:
什么是协议解析?
将发送方发过来的数据,依照协议的要求规则进行数据的翻译,找出发送方要求接收方实现的动作,接收方将动作完成(给发送方回复它需要的数据,ACK或相应的数据记录)。
当时没有考虑,一个节点可能即要解析下行数据,又要解析上行数据。这样自己最早写的代码,就不能用了。因为它主要解析下行协议,对于接收的上行协议,没有解析。因为当时没有想到要接收上行数据,认为就是一个终端了。
现在在想如果这个节点只是通信中的一个既要负责接收下行数据,又要对别的节点发过来的上行数据做出反应,那样的协议解析程序,才算是比较完整的。
现在自己理解的一个协议的解析程序是这样组织:
1、发出数据的打包:
首先组织一个数据帧,打包函数将此帧依照协议的帧结构,将其解析到一个数组中,计算出长度,将其发送出去。
2、接收数据的解析:
有数据接受时,首先判断此数据是否为正确的帧(符合协议要求的校验规则),之后解析出功能码(或者到数据标识),在功能码解析函数中,依据协议的上下行标志,调用相应的代码进行数据解析。(这样即可以解析下行数据,也可以解析上行数据,构成一个完好的正解析模块)
补充 :在解析接收过来的数据时,首先判断一下长度,对于长度不符合的可以跳出。有时候如果不判断这个,可能造成以后在判断时出现错误。
如何写协议解析程序:
读协议时,首先分析整个帧的结构,了解帧有几部分组成,各个标识是什么,含义什么。例如:长度,控制字,等一些关键信息的分析。
当然这些只是自己的理解。
- 写协议解析程序的过程(关于通信解析函数的理解)
- JS---函数的解析过程
- 关于Oracle过程,函数的经典例子及解析
- 关于Oracle过程,函数的经典例子及解析
- 关于Oracle过程,函数的经典例子及解析
- 关于Oracle过程,函数的经典例子及解析
- 关于Oracle过程,函数的经典例子及解析
- ARP协议-地址解析的过程
- 关于GPS的NMEA0831协议的解析
- 关于虚拟机的通信原理解析
- 解析SWD协议,烧写程序
- dig理解DNS的解析过程
- 转:关于对SSDP协议的解析
- JAXP的SAX解析方式(理解过程)
- 关于写程序的一些理解
- 实例解析-Java程序的加载过程
- 实例解析-Java程序的加载过程
- Java 解析java程序的过程图
- 跟我一起写 Makefile
- 解决VC++中类从Class View中消失的问题
- c++应注意的小问题
- Linux驱动之设备模型(2)
- WAC是神马!(HTML/Android)
- 写协议解析程序的过程(关于通信解析函数的理解)
- POJ3009 Curling 2.0(DFS+剪枝)
- VMWare下Fedora Core 9(FC9)安装过程完整图解以及虚拟工具的安装
- 为RT-N16刷DD-WRT系统
- UNIX下的文件权限解析
- 写Spider中遇到的问题
- ubuntu apt命令解析
- Hibernate事务,及其并发处理
- 多重背包问题、、、