一个基于XML的传输协议解析

1、背景介绍

       在涉及到网络请求的场景中,网络协议是必不可少的组件。但是针对不同的应用程序,网络协议又大不相同。一般来说,不涉及到资金操作的网络请求,并不需要做过多的协议处理,一般常见的数据结构就可以了。但是在一些特定的场合,比如说购物,涉密文件信息这样的信息在传送的时候,一定要有特殊的协议去传送。

       这里简单介绍一个购物时候,使用到的一个协议的封装。


2、发送协议

我们先看看发送协议的文件,如下XML文件:



     
568941 ivr DES 201411131045215896412 20141113104521 7ec8582632678032d25866bd4bce114f 287910 78145652515141
10 2

这是选中商品的协议,可以看到分为两个部分,header头部和body正文部分。


3、协议解析

3.1 解析图示

在上面,我们看到协议的明文示例,那么根据上面的xml文件,我们可以整理出如下的解析图示:

一个基于XML的传输协议解析_第1张图片

3.2 常量分析

568941
agenterid:代理id
ivr
DES
body里面的数据加密的算法


3.3 简单代码处理

20141113104521
时间戳:SimpleDataformat       
201411131045215896412 
时间戳+六位的随机数
SimpleDataformat+Random+六位(数字的格式化DecimalFormat)
7ec8582632678032d25866bd4bce114f
数据摘要:MD5
MD5的原始数据的组成:时间戳+代理的密码+完整body(明文)


3.4 无法处理

287910
请求的唯一的标示
78145652515141
用户名,自动登录


4、接收协议

        有了上面协议的分析基础,我们这里就直接给出接收协议的xml明文,不再过多解释其中的含义。接收协议的明文也是一个xml文件定义:



    
201411131045215896412 20141113104521 12002 7ec8582632678032d25866bd4bce114f DES 568941
0 操作成功 10 茶叶 2012070 86400

5、协议解析总结

        在做协议封装的时候,一般只需要封装关键的信息,一些常量或者说一些简单的数据,并没有太大的封装意义,比如上面这条消息的id值,时间戳就没有太大的封装意义,但是选中的商品信息,商品的数量信息,这类敏感型数据,应当做一个加密的操作。

        在协议的封装过程中,我们应该在前期的设计中,考虑到协议的可扩展性,比如上面的elements这样的一个节点,里面好像也只有一个element元素,那么外层的elements节点似乎就很多于。实际上呢?我们这里只是给出了一个示例而已,这里用户仅仅是选择了茶叶这样一个元素,那么试想一下,在购买商品的时候,用户购买了多个商品,我们又该如何处理这个协议呢?

你可能感兴趣的:(Android4.0网络开发,网络协议)