请求协议格式
req{
short tag;// 16位,0x0001
int length;// 32位,从下一字节开始至末尾的数据长度即数据区长度(后面会提到数据区)
short channelId;// 16位,频道id
byte channelDes;// 8位,频道信息说明(类似说明信息的长度)
for(i=0;i<challelDes;i++){
byte_data;// 8位
}
}
【说明】
tag:请求的唯一标识符,2字节
length:数据区长度,4字节
channelId:2字节
channelDes:频道说明信息的长度,1字节
for循环:存放频道说明信息的真实数据
前面2个绿色的部分称为报头,固定6字节
中间2个蓝色的部分称为基本数据区
最后红色部分称为真实数据区,所有String信息都放在这里
数据区=基本数据区+真实数据区
协议=报头+数据区
即:
协议:tag length 基本数据区 真实数据区
报头 数据区
对于基本数据类型,直接存放在基本数据区,对于String类型,在基本数据区描述它的长度和真实数据区的地址,然后存到真实数据区
解码必须获得的信息:
1、请求标识:根据不同的类型进行解析
2、数据区总长度:可判断是否接收数据成功
3、偏移地址:知道真实数据区的位置(偏移地址即tag+length+基本数据区的长度,接下来一个字节肯定会走到真实数据区,目的就是定位真实数据区的开始下标)
响应协议格式
res{
short tag;// 16位,0x0002
int length;//从下一字节开始至末尾的数据长度
int channelAddress;
byte channelLen;
int count;
for(i=0;i<count;i++){
byte index;// 下标
int num;// 编号
int size;// 大小
int startTime;// 开始时间
int totalTime;// 总时间
byte status;// 状态
}
}
协议的格式根据需求可以很灵活的进行变动。以上只是举例。
for循环中可以存放一组对象数据。
本文作用主要用于学习mina方面的知识,为了加深理解和记忆特记。
本来是有图片的,很清晰直观,但上传图片需要图片链接,本地图片无法上传,希望各位高手可以给个解决办法。
图片以附件形式上传了。
本文内容整理自Mina2.0完全剖析,顺带上传PDF供大家学习。