自定义协议 与 TLV格式 的总结

来源:互联网 发布:java方法重写 编辑:程序博客网 时间:2024/03/29 23:44

在实习的时候,听得最多的一个词就是协议了。串口通信,各种自定义的协议,说得我太晕了。反正我不懂,正好最近一直在打酱油,那我不趁机恶补恶补,说不定下学期在学网络编程的时候,可以用得到。。

参考资料:

http://blog.csdn.net/phunxm/article/details/5086080 应用层通信协议开发浅析        
http://blog.csdn.net/chexlong/article/details/6974201  TLV 格式及编解码示例      

 
找了一天资料,上面两个博客写得真心不错,还有源码对照。
这里说的协议,都是基于应用层的协议,一切应用层的“协议”说白了,就是“数据包的结构定义”。

至于TLV格式,就是Type-Lenth-Value  数据包里放数据,要么用定长,可么就用TLV这种可变长度的,其它深奥的不管。  定长的太浪费空间了。就用这种咯。


有关应用层协议,数据包的自我总结:
1. 应用层协议,就是 定义数据包的结构 的一种规格。
    比如,定义一个 部标协议,规定数据包的格式为 包头+数据+校验码。采用TLV格式。
2. 数据包格式:(由协议规定的,以后我就统一使用下面这种常用格式)
    1字节Start Flag + 2字节Length + n字节数据 + 1字节End Flag (最后这个 End Flag改成校验Flag也不错。。 以后要用时再考虑。)
    start flag,lenth,end flag都是定长, 内容数据 采用 TLV格式,一个一个解析出来。
3. 在TCP通信中,数据包太大,网络会自动将之切割,到了目的地的时候会自己重组。  我们要做的时候就是 不断地从流中recv 包头中指定的长度 个字节就可以了。在读取的时候,注意不要读取太多。(串口通信就没这么方便了,我不会。不过公司里串口通信的数据包都好小。。)
4. 通信的双方约定好这种协议。将内容打包成数据包容易,将数据包解析成内容也容易。。( 打包和解析的目的要理解,打包就是一堆数据想要一次发送。 解析就是,从缓冲区一堆数据中,一条一条分析出来。。差不多这样子。。有时,也可以把一堆参数打包成一条字符串(其实这也是一个数据包), 也可以 把一条字符串,解析出一堆参数。。)
5.一个完整的数据包,就是一帧。。


以后学习网络编程,要发送数据包的时候再来实现。 先把上面两个网址的两个样例保存起来嘿嘿。


 


原创粉丝点击