J2ME版移动飞信协议 (2)
J2me版飞信(以下简称飞信)的通信协议,基于HTTP协议。它和服务器之间的通信,是通过POST这个动作来完成的,需要传送的数据,放在POST请求的data部分。
每个请求都是有客户端发起的,POST出数据之后,接受服务器的响应,然后关闭连接。对响应进行处理。
=== 数据包格式 ===
包含在HTTP请求(或者响应)DATA部分的数据格式:
可以看到,每个包都分为Header和Payload两部分。
header是固定长度4个字节,其中,前三个字节(Length)表示整个数据包的程度,包括Header本身的长度,第4个字节(Code)表示请求的命令吗。表示长度的三个字节是按大端(big-endian)的格式(也就是网络字节序)来表示一个整数的。具体说就是,字节0表示长度的最高8位,字节1表示长度的中间8位,字节2表示长度的低8位。字节3表示请求码。
这个长度可以表示的很大,当然,暂时还用不上这么大。
Header后的有效数据(Payload)是变长的。该部分长度可以为0。一些简单的命令比如退出登录,只需要设置Code为对应的代码,Payload部分是不需要数据的。
服务器返回的数据格式和客户端发出的具有相同的格式。
=== 特殊的包 ===
在服务器响应中,有一个特殊的包,Code为 -1。 Code 为-1的包,实际上是有多个包组成的。需要把这些包全部分离出来,逐个处理它们。
[我不清楚是不是可以用Code为-1的包同时发送多个包到服务器,不过在飞信的代码里,没有看到这样的应用,只有从服务器收到的响应中有code为 -1的包]