首先我们要搞清下面几个问题:<o:p></o:p>
1.这个协议主要完成那些实际功能.例如对手机用户进行管理,或者查询手机用户信息等等<o:p></o:p>
2.支持TCP/IP协议还是UDP协议,如果支持TCP/IP协议,那么它是基于长连接还是短连接.
3.这个协议所定义的数据类型
4.协议包头(HEADER)的定义。
5.协议包体(BODY)的定义。
在说明实现过程之前,我们来了解几个概念:
数据包(PDU) - 通信协议中定义的数据包既通信数据。它主要包括请求和应答(TCP/IP)
包头(HEAD) - 通信协议中定义的数据包的一些重要的信息。如果包的长度,功能命令。
包体 – BODY包含一些为了完成HEADER中定义的功能所需要的一些数据。注意有的时候一个包是可以没有包体的。如:心跳包。
实现过程:
1. 实现协议所定义的基本的数据类型。如:定长字符串、整形的字节数组、协议定义的特殊数据类型。
2. 协议基本的常量,我们可以定义一个类或者接口来将协议中的常量统一的保存起来。但有些业务常量还是跟随业务类或者接口在一起比较好,具体情况具体分析。
3. PDU包装器和PDU解析器,在各种PDU使用。这个是我们实现这个协议的一个关键。
· PDU包装器 :这个类可以将协议的数据类型转换成字节数组,并保存在包装器中。我们用它来将我们包装的PDU中的信息装换成字节数组的形式,因为只有转化成字节数组的形式才能在网络上传输。
· PDU解析器:这个类可以将字节数组(通过socket inputstream读出来的)的信息解析包装成协议中定义的各种类型。这个类的工作过程是和PDU包装器反相的。
PDU包装器和PDU解析器都包含一个字节数组,并有一个可以移动的当前位置标志。数组的作用是保存pdu 字节信息,而位置标志用来记录当前读取位置或者当前转换位置。只有这样才能依次读取或者转换字节数组。
<o:p> </o:p>
4. 实现HEADER,在实现的过程中我们需要协议定义的一些特殊的数据类型,所以我们需要把这个步骤定义在后面。
5. 实现PDU,从面向对象设计的角度出发,我们首先要找出所有完成不同功能的PDU的公共部分(如相同的字段或相同的功能)抽象出来定义成接口、抽象类或者公共的基类(BASE CLASS),具体设计依照协议的具体定义。然后通过实现PDU接口或者继承公共的PDU抽象类或者基类来实现不同的PDU. 它应该有两个重要的方法:
1) Input Method :
将输入字节流(Socket InputStream )包装成当前的PDU对象,用于进一步处理。
2) Output Method
将当前的PDU对象转换成字节流的形式,用于通过(Socket OutputStream )在网络中传输。
6. PDU 管理器,用来读取和创建PDU.
<o:p> </o:p>
完成协议中的功能:我们可以通过发用消息包和得到消息包来完成协议功能。
下面介绍完成协议功能的步骤:
I. 创建请求对象
II. 根据不同功能设置 header的字段值
III. 保存header到请求对象中
IV. 根据header中设置的PDU的功能,保存功能必须的字段到请求对象中。
V. 发送请求对象字节流
VI. 得到响应对象
VII. 解析响应对象
VIII. 得到结果
上面总结了协议实现的思路、架构以及调用过程,希望能够对大家有所帮助,能够达到抛砖引玉的效果。
<o:p> </o:p>