NIO通讯框架之阿堂教程:Mina学习笔记-高级进阶篇(三)
来源:互联网 发布:黑莓q5软件 编辑:程序博客网 时间:2024/04/25 05:03
哦,前段时间阿堂一直比较忙,也没有写些什么了,想着高级进阶篇一直没有去弄,心中有觉得有些什么事情没有完成似的,所以就有了此文了。
第一步:制定协议:
协议需求:向服务端发送请求(频道的ID和说明文字),返回响应结果(该频道下所有的节目信息);
协议格式如下
请求格式
响应格式
协议解释如下:
1. 协议前两个字节(16Bits)是协议的唯一标识值; 如上:请求部分的tag = 0x0001,响应部分的 tag = 0x8001
2. 接着四个字节(32Bits)是传输消息的长度;
3. 接下来是数据区;
分析请求部分:
请求部分是客户端(机顶盒)向服务端发送的请求;
协议I的请求只发送了两个个参数:channelID和channel_dec(频道描述信息)
a. descriptor tag:请求的唯一标识; -- 2个字节
b. descriptor length:数据区长度; -- 4个字节
c. ID:channelID; -- 2个字节
d. channel_dec_len:频道说明信息的字节长度 -- 1个字节
e. for循环:存放频道说明信息的真实数据(字节数组中)
响应部分分析略……
// ===================协议格式总结===========================
前面2个部分称为报文头,固定6个字节;
中间1个部分称为基本数据区,用Java的8个基本数据类型描述;
最后的部分称为真实数据区,所有String类型的信息都放在这里;
基本数据区+真实数据区 =数据区
协议格式:报文头+数据区
总之,对于基本数据类型,直接存放在基本数据区,对于String类型,在基本数据区描述它的长度和在真实数据区的地址,然后存在在真实数据区;而Java对象,则是把对象属性分解为基本数据类型和String类型发送;
a. 请求标识:根据请求的不同进行不同的解码
b. 数据区总长度:定是否接受数据成功;
c. 偏移地址:知道真实数据区位置,就可以解码String数据;
图示如下:
阿堂在本地测试效果图如下
相关测试代码,由于文件较多,阿堂就不粘上来了,如果感兴趣的网友,可以给阿堂留下email,我会单独发送给你的!
- NIO通讯框架之阿堂教程:Mina学习笔记-高级进阶篇(三)
- NIO通讯框架之阿堂教程:Mina学习笔记-中级进阶篇(二)
- NIO通讯框架之阿堂教程:Mina学习笔记-入门篇(一)
- NIO通讯框架之Mina
- Java NIO框架之 Mina
- NIO框架之MINA详解
- Mina框架学习笔记(三)
- Mina框架学习笔记(三)
- Mina框架学习笔记(三)
- Java NIO笔记(三):NIO Buffer(缓冲区)之进阶
- mina框架之三
- Java NIO框架MINA中文教程
- mina框架学习笔记
- MINA框架学习笔记
- apache mina框架以及nio学习
- NIO框架之MINA源码解析(三):底层通信与责任链模式应用
- NIO框架之MINA源码解析(三):底层通信与责任链模式应用
- 学习socket nio 之 mina实例
- Catalan number
- Linux 关机 重启 命令 注销 韩顺平
- boost锁的概述
- ADB not responding. If you'd like to retry, then please manually kill "adb.exe" and click 'Restart'
- DOM事件侦听--适应各浏览器
- NIO通讯框架之阿堂教程:Mina学习笔记-高级进阶篇(三)
- jeewx-api 1.0.5 版本发布,微信SDK接口封装(支持微信第三方开放平台)
- Android 发送UDP包
- Extjs6自学笔记之使用Sencha Cmd6建立工程项目(二)
- 最老程序员创业开发实训8---IOS---在Swift中用定时任务显示Splash页面
- 字符串数组和字符串指针
- 游戏服务器架构设计(一)
- 调用百度地图 5.0手机报错java.lang.UnsatisfiedLinkError: No implementation found for int
- Android-Socket基于UDP传输