网络通信基础第五式——实现自定义字节流协议的KTM

[size=medium] 其实KTM的第五版,即实现自定义字节流协议的KTM,我早在半个月前就已经搞定了,但是由于最近在研究Android手机端的Socket通信编程,便无暇顾及博客。
今晚,由于KTM即时通信软件在Android手机端的开发有了全新突破,我可以稍作调整,于是,抽出时间完成对两个星期前的任务的总结。
实现自定义字节流协议的KTM在功能上较之实现自定义xmpp协议的KTM主要有三方面的提升。一是增加了注册的功能,简单的说就是用到了数据库,在用户注册成功的时候,服务器会分配给用户一个KTM号,这样整个流程就更加人性化了;二是增加了文件传输的功能,客户端与客户端之间,服务器与客户端之间都可以发送文件大小适中的各类文件;三是增加了远程控制的功能,目前只实现了客户端远程控制服务器,即服务器先向客户端发出远程协助申请,客户端确认后便可以控制服务器端的主机,客户端控制客户端的原理和客户端远程控制服务器的原理是一样的,我打算将这些功能在日后完善,目前就不耽误开发新功能的时间了。
当然,在我看来,实现自定义字节流协议的最大优势不是功能的增加,而是可以实现跨平台的通信,确切的讲是开发平台。比如说,服务器用的是Java语言开发的,而客户端是用C++语言开发的,对于xmpp协议的KTM来说,便无法实现通信,而字节流协议的KTM可以做到这点,只要协议制定的合理,便能很流畅的进行通信。
因为我把主要经历放在了提升功能上,所以界面没有太大变化,实现发送文件的功能只加了一个按钮,实现远程控制时也只增加了一个菜单项,所以下面我就仅仅展示一下协议的具体内容:[/size]

[align=center][size=large]KTM自定义字节流协议 [/size][/align][align=center][size=medium]一条消息=消息头+消息体
Message=MessageHead+MessageBody[/size][/align]
[size=medium]一、消息头类(所有其他消息的父类):[/size]

0、消息头(MsgHead)
字段名 数据类型 字节数 描述
TotalLen int 4 一条消息的字节总长(包含消息头长度)
type byte 1 消息类型标志
dest int 4 消息目的地,为消息接收者的KTM号,服务器的KTM号统一为0
src int 4 消息源,为消息发送者的KTM号,服务器的KTM号统一为0
备注 所有消息的消息头格式都是固定的
[size=medium]
二、其他消息类(消息头类的子类)的消息体: [/size]

1、注册请求消息(MsgReg)
字段名 数据类型 字节数 描述
name String 10 注册用户昵称
pwd String 10 注册用户密码
备注 用户注册时,消息头中的dest值为服务器KTM号

2、注册应答消息(MsgRegResp)
字段名 数据类型 字节数 描述
result byte 1 服务器返回的注册结果应答
备注 若result为0,则消息头中的dest值为注册成功KTM号;非0则注册失败

3、登录请求消息(MsgLog)
字段名 数据类型 字节数 描述
pwd String 10 登录用户的密码
备注 用户登录时,消息头中的dest值为服务器KTM号,src值为用户的KTM号

4、登录应答消息(MsgLogResp)
字段名 数据类型 字节数 描述
result byte 1 服务器返回的登录结果应答
备注 0:成功 1:账号错 2:ip验证失败

5、上线消息(MsgOnline)
字段名 数据类型 字节数 描述
name String 10 消息源的用户昵称
备注 消息头中的src字段为上线人的KTM号,后由服务器转发给其他在线用户

6、在线用户表消息(MsgOnlineUsers)
字段名 数据类型 字节数 描述
userCount int 4 当前在线用户个数
userNames String 总长-消息头长(13)-4 所有在线用户的昵称和KTM的字符串集
备注 userNames的格式:用户1昵称(用户1KTM号),用户2昵称(用户2KTM号),。。。

7、聊天消息(MsgChat)
字段名 数据类型 字节数 描述
name String 10 消息源的用户昵称
content String 总长-消息头长(13)-10 聊天的消息内容
备注 聊天的消息内容在发送前由字符串转化为字节数组

8、文件传输消息消息(MsgFile)
字段名 数据类型 字节数 描述
fileNameSize byte 1 传送的文件名的大小
fileName String fileNameSize 传送的文件名字
fileData String 总长-消息头长(13)-fileNameSize 文件内容
备注 发送的文件大小有限制

9、服务器踢人消息(MsgHead)
无消息体
备注 消息头中的dest字段为服务器踢掉的用户的KTM号

10、下线消息(MsgLogOff)
字段名 数据类型 字节数 描述
name String 10 消息源的用户昵称
备注 消息头中的src字段为下线人的KTM号

11、远程控制请求消息(MsgControl)
字段名 数据类型 字节数 描述
name String 10 消息源的用户昵称
备注 用户请求远程控制时,消息头中的dest值为想要控制的用户的KTM号或者服务器KTM号,src值为用户的KTM号

12、远程控制应答消息(MsgControlResp)
字段名 数据类型 字节数 描述
result byte 1 服务器返回的远程控制结果应答
备注 0:成功 1:被拒绝

13、截屏消息(MsgScreen)
字段名 数据类型 字节数 描述
screenData byte[] 总长-消息头长(13) 截屏字节数据
备注

14、鼠标移动消息(MsgMouseMove)
字段名 数据类型 字节数 描述
x int 4 鼠标点的横坐标
y int 4 鼠标点的纵坐标
备注 控制端的鼠标一移动便立即发送该消息给被控制端

15、鼠标按键按下消息(MsgMousePress)
字段名 数据类型 字节数 描述
button int 4 鼠标的按键类型
备注 控制端的鼠标按键一按下便立即发送该消息给被控制端

16、鼠标按键释放消息(MsgMouseRelease)
字段名 数据类型 字节数 描述
button int 4 鼠标的按键类型
备注 控制端的鼠标按键一释放便立即发送该消息给被控制端

17、鼠标滚动消息(MsgMouseWheel)
字段名 数据类型 字节数 描述
button int 4 鼠标的按键类型
备注 控制端的鼠标一滚动便立即发送该消息给被控制端

18、鼠标拖动消息(MsgMouseDrag)
字段名 数据类型 字节数 描述
x int 4 鼠标点的横坐标
y int 4 鼠标点的纵坐标
备注 控制端的鼠标一拖动便立即发送该消息给被控制端

19、键盘按键按下消息(MsgKeyPress)
字段名 数据类型 字节数 描述
key int 4 键盘的按键类型
备注 控制端的键盘按键一按下便立即发送该消息给被控制端

20、键盘按键释放消息(MsgKeyRelease)
字段名 数据类型 字节数 描述
key int 4 键盘的按键类型
备注 控制端的键盘按键一释放便立即发送该消息给被控制端

21、远程控制中断消息(MsgControlStop)
无消息体
备注 用户中断远程控制时,消息头中的dest值为正在被控制的用户的KTM号或者服务器KTM号,src值为用户的KTM号
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值