含有章节索引的中文 文章模板
-- HD [2004-08-10 22:23:57]
OpenGNS协议规范
Version 1.0alpha
OpenGNS协议规范用以规定OpenGNS Client与OpenGNS Server、OpenGNS Server与OpenGNS Server之间沟通的信息内容、格式以及详细的说明。
连接方式
OpenGNS的通信是基于TCP连接进行会话,会话方式为短连接。一个TCP短连接的会话通常会有以下几个步骤:
- Client向Server发起TCP连接
- Client向Server发送认证请求报文
- Server向Client回头认证回复报文
- 如认证不通过Server断开连接
- 如认证通过Client向Server发送指定报文
- Server向Client发送报文回复
- Client向Server发送断开连接请求报文
- Server向Client发送断开连接回复报文
- Server断开该连接
- Client断开该连接
短连接有以下特点:
- 由Client发起连接和请求报文
- 按需连接
- 每次连接的请求报文是按顺序发送,得到回复报文后再发送下一条报文
- 报文发送完成后就会断开TCP连接
报文定义
报文格式定义
所有的报文包括两部分:
字段 |
说明 |
Message Header |
报头 |
Message Body |
报体 |
每条报文的报头长度和字段定义完全相同,而报体依据所发送的报文不同而自定义。所有报文的定义请见报头定义一节,报体的定义可见报体定义一节,具体的报文ID定义请见报文ID定义一节。
数据格式定义
在报文中只会使用到两种数据格式:
数据类型 |
数据说明 |
uint |
无符号整型(unsigned int) |
int |
整数,可为正整数、负整数或零 |
string |
定长字符串,位数不足时,如果左补0则补ASCII表示的零,如果右补0则补二进制的零 |
int和unit长度为4个字节,string是由n个长度为8位的char组成。
报头定义
由于系统的报文发送方式为短连接,所以报头只需要定义以下字段:
字段名 |
数据类型 |
长度(字节) |
字段说明 |
size |
uint |
4 |
报文长度 |
msgid |
unit |
4 |
报文ID |
size定义了报文全部的长度,msgid定义了报文的ID,msgid的内容必须已经在报文ID定义中说明的数值。
报文ID定义
报文ID定义说明了OpenGNS所支持的请求和回复报文的名称、编码、说明。 在定义中遵循了以下规则:
- 请求报文以第一位均为0
- 对应请求报文的回复报文高位均为一个f,其它与请求报文相同
通用报文
通用报文是指无论客户机和服务器在任何情况下都会使用到的报文。
报文ID名称 |
编码 |
说明 |
GNS_CONNECT |
0x00000001 |
连接请求 |
GNS_CONNECT_RESP |
0xf0000001 |
连接请求回复 |
GNS_DISCONNECT |
0x00000002 |
断开连接请求 |
GNS_DISCONNECT_RESP |
0xf0000002 |
断开连接请求回复 |
GNS服务标准操作
报文ID名称 |
编码 |
说明 |
GNS_RESERVICE |
0x00000003 |
注册服务 |
GNS_RESERVICE_REP |
0xf0000003 |
注册服务回复 |
GNS_DERESERVICE |
0x00000004 |
注销服务 |
GNS_DERESERVICE_REP |
0xf0000004 |
注销服务回复 |
GNS_GETAPPLICATION |
0x00000005 |
得到应用的可用服务清单 |
GNS_GETAPPLICATION_REP |
0xf0000005 |
得到应用的可用服务清单回复 |
||
报体定义
通用报文
请求连接到服务器(GNS_CONNECT)
GNS_CONNECT用于让客户机在连接完成后向服务器进行认证连接的操作,在注册认证能过后即在客户机和服务器间建立了应用层的连接,就可以进行进一步的报文请求操作。服务器端会向客户机回复GNS_CONNECT_RESP响应请求。
GNS_CONNECT定义(C->S)
字段名 |
字节数 |
数据类型 |
描述 |
clientid |
6 |
string |
客户端id |
authcode |
16 |
string |
验证码,由md5(clientid+password+timestamp)生成 |
version |
4 |
uint |
版本 |
timestamp |
4 |
uint |
时间戳的明文,由客户端产生。 |
GNS_CONNECT_RESP定义(S->C)
字段名 |
字节数 |
数据类型 |
描述 |
status |
4 |
uint |
状态 0:正确 1:命令结构错 2:非法客户端标识 3:认证错 4:版本太高 5~ :其他错误 |
version |
4 |
uint |
服务器支持的最高版本号 |
断开连接请求(GNS_DISCONNECT)
GNS_DISCONNECT用于客户机和服务器拆除应用层的连接,拆除连接后对方会在回复报文后断开TCP的连接。
GNS_DISCONNECT定义(C<->S)
无报文体。
GNS_DISCONNECT_RESP定义(C<->S)
无报文体。
GNS服务标准操作
注册服务(GNS_RESERVICE)
任何一个服务在启动时,都有义务向GNS服务器通知其在线工作。通过向GNS的通知,就使得应用系统中增加了一个服务。
GNS_RESERVICE定义(C->S)
字段名 |
字节数 |
数据类型 |
描述 |
serviceid |
6 |
string |
服务ID |
parasize |
4 |
uint |
注册参数长度 |
parameter |
parasize |
string |
注册附加参数 |
GNS_RESERVICE定义(C->S)
字段名 |
字节数 |
数据类型 |
描述 |
status |
4 |
uint |
状态 0:更新成功 1:更新失败 2:命令结构错 3~ :其他错误 |
注销服务(GNS_DERESERVICE)
任何一个服务在停止时,都有义务向GNS服务器通知其下线停止工作。通过向GNS的通知,就使得应用系统中将一个服务取消。
GNS_DERESERVICE定义
字段名 |
字节数 |
数据类型 |
描述 |
serviceid |
6 |
string |
服务ID |
parasize |
4 |
uint |
注销参数长度 |
parameter |
parasize |
string |
注销附加参数 |
GNS_DERESERVICE_RESP定义
字段名 |
字节数 |
数据类型 |
描述 |
status |
4 |
uint |
状态 0:更新成功 1:更新失败 2:命令结构错 3~ :其他错误 |