首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络协议 >

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

2012-12-23 
网络通信基础第五式——实现自定义字节流协议的KTM其实KTM的第五版,即实现自定义字节流协议的KTM,我早在半个

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

KTM自定义字节流协议一条消息=消息头+消息体
Message=MessageHead+MessageBody
一、消息头类(所有其他消息的父类):

0、消息头(MsgHead)
字段名 数据类型字节数描述
TotalLenint4一条消息的字节总长(包含消息头长度)
typebyte1消息类型标志
destint4消息目的地,为消息接收者的KTM号,服务器的KTM号统一为0
srcint4消息源,为消息发送者的KTM号,服务器的KTM号统一为0
备注所有消息的消息头格式都是固定的

二、其他消息类(消息头类的子类)的消息体:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

21、远程控制中断消息(MsgControlStop)
无消息体
备注用户中断远程控制时,消息头中的dest值为正在被控制的用户的KTM号或者服务器KTM号,src值为用户的KTM号

热点排行