{threadNotes}
剑侠情缘——游戏与账号数据库的Socket层通讯协议定义
希望大家一起来研究,来破金山的神话. 一、数据包字节顺序结构:8 bits 64 bits
变长的(unfixed)
Tag(=0)
KLoginStructHead
Data
32 bits 32 bits
Size(DWORD)
Param(int)
其中Size是除掉标记位(Tag)后的数据包的大小,其单位为Byte。 二、参数宏、结构体定义: #define LOGIN_ACCOUNT_MIN_LEN 4 #define LOGIN_ACCOUNT_MAX_LEN 30 #define LOGIN_PASSWORD_MIN_LEN 6 #define LOGIN_PASSWORD_MAX_LEN 30 //login action return value
//the folloin' value is used in login connect operaion #define LOGIN_ACTION_FILTER 0xffff0000 //登陆过程中的操作类型过滤数值 // Parameters from client to server #define LOGIN_A_CONNECT 0x010000 //连接 #define LOGIN_A_NEWACCOUNT 0x020000 //新建账号 #define LOGIN_A_SERVERLIST 0x030000 //获取服务器列表 #define LOGIN_A_REPORT 0x040000 //通知服务器在线(定期向服务器发送) #define LOGIN_A_LOGIN 0x050000 //登陆服务器 #define LOGIN_A_LOGOUT 0x060000 //注销 // Parameters from server to client
#define LOGIN_R_CONNECT LOGIN_A_CONNECT #define LOGIN_R_NEWACCOUNT LOGIN_A_ NEWACCOUNT #define LOGIN_R_SERVERLIST LOGIN_A_SERVERLIST #define LOGIN_R_LOGIN LOGIN_A_LOGIN #define LOGIN_R_REPORT LOGIN_A_REPORT #define LOGIN_R_LOGOUT LOGIN_A_LOGOUT #define LOGIN_R_REQUEST 0x0 //when the login request is send from client to server #define LOGIN_R_SUCCESS 0x1 #define LOGIN_R_FAILED 0x2 #define LOGIN_R_ACCOUNT_OR_PASSWORD_ERROR 0x3 #define LOGIN_R_ACCOUNT_EXIST 0x4 #define LOGIN_R_TIMEOUT 0x5 #define LOGIN_R_IN_PROGRESS 0x6 #define LOGIN_R_NO_IN_PROGRESS 0x7 #define LOGIN_R_VALID 0x8 //合法用户 #define LOGIN_R_INVALID 0x9 //非法用户 struct KLoginStructHead
{ DWORD Size; // size of the struct, if the struct is been inherit,the size is ref the the derive struct int Param; // be one of the LOGIN_R_* define value combin with a LOGIN_A_* value. }; struct KLoginAccountInfo : KLoginStructHead { char Account[32]; //account char Password[32]; //password }; struct KLoginGameServer { char Title[32]; //服务器文字说明 DWORD Address; //服务器域名地址 DWORD ID; //服务器ID }; struct KLoginServerList : KLoginStructHead { DWORD Count; //此次传送的服务器项的数目 KLoginGameServer* Server; //服务器信息(变长数组) }; 三、示范
* 登陆流程及数据包字节顺序 Step1: 客户端——〉服务器 发送请求数据包 Tag(=0) KLoginAccountInfo
其中KLoginStructHead::Param = LOGIN_A_LOGIN。 字节顺序如下: 8 bits 32 bits
32 bits
8*32 bits
8*32 bits
Tag(=0)
Size(=72 bytes)
Param
Account
Password
如上Size的计算方法为:Size = 32 + 32 + 8*32 + 8*32 = 576 bits = 72 bytes,也就是除掉标记(Tag)位后的数据包的大小。 Step2:服务器——〉客户端
反馈请求响应数据 如果成功,发送数据包 Tag(=0) KLoginServerList
其中KLoginServerList::Param = LOGIN_R_LOGIN | LOGIN_R_VALID(服务器信息还未全部反馈), 或者KLoginServerList::Param = LOGIN_R_LOGIN | LOGIN_R_SUCCESS(服务器信息已全部发送完毕)。 字节顺序如下: 8 bits 32 bits
32 bits
32 bits
Count * 64 bits
Tag(=0)
Size
Param
Count(所含服务器项数目)
KLoginGameServer
如果失败,发送数据包
Tag(=0) KLoginStructHead
其中 KLoginStructHead::Param = LOGIN_R_LOGIN | LOGIN_R_FAILED 或者 KLoginStructHead::Param = LOGIN_R_LOGIN | LOGIN_R_ACCOUNT_OR_PASSWORD_ERROR。 Step3:客户端——〉服务器
1、如果登陆成功并选择好游戏服务器后 定期向服务器发送在线消息,发送数据包如下 Tag(=0) KLoginAccountInfo
DWORD(游戏服务器ID)
其中KLoginAccountInf:Param = LOGIN_A_REPORT。 2、如果退出游戏 发送数据包如下 Tag(=0) KLoginAccountInfo
其中 KLoginAccountInf:Param = LOGIN_A_LOGOUT。 Step4:服务器——〉客户端 返回数据包 Tag(=0) KLoginStructHead
其中如果该用户合法,相应的有 1、KLoginStructHead::Param = LOGIN_R_REPORT | LOGIN_R_VALID, 2、KLoginStructHead::Param = LOGIN_R_LOGOUT | LOGIN_R_VALID 否则 1、KLoginStructHead::Param = LOGIN_R_REPORT | LOGIN_R_INVALID, 2、KLoginStructHead::Param = LOGIN_R_LOGOUT | LOGIN_R_INVALID。 Step5:客户端 如果收到成功消息——1、重复Step3;2、通讯结束。 如果失败——错误处理,通讯结束。 * 申请新账号流程及数据包字节顺序
Step1:客户端——〉服务器 发送数据包 Tag(=0) KLoginAccountInfo
其中 KLoginAccountInf:Param = LOGIN_A_NEWACCOUNT。 Step2:服务器——〉客户端 发送数据包 Tag(=0) KLoginStructHead
如果创建信账号成功 KLoginStructHead::Param = LOGIN_R_NEWACCOUNT | LOGIN_R_SUCCESS; 如果创建新账号失败 KLoginStructHead::Param = LOGIN_R_NEWACCOUNT | LOGIN_R_FAILED 或者 KLoginStructHead::Param = LOGIN_R_NEWACCOUNT | LOGIN_R_ACCOUNT_EXIST。(账号已经被其它用户申请) Step3:客户端——〉服务器 收到创建账号成功消息 索取游戏服务器列表,发送数据包 Tag(=0) KLoginAccountInfo
其中 KLoginAccountInf:Param = LOGIN_A_SERVERLIST。 Step4:服务器——〉客户端 如果成功 Tag(=0) KLoginServerList
其中KLoginServerList::Param = LOGIN_R_SERVERLIST | LOGIN_R_VALID(服务器信息还未全部反馈), 或者KLoginServerList::Param = LOGIN_R_SERVERLIST | LOGIN_R_SUCCESS(服务器信息已全部发送完毕)。 字节顺序如下: 8 bits 32 bits
32 bits
32 bits
Count * 64 bits
Tag(=0)
Size
Param
Count(所含服务器项数目)
KLoginGameServer
如果失败,发送数据包
Tag(=0) KLoginStructHead
其中 KLoginStructHead::Param = LOGIN_R_SERVERLIST | LOGIN_R_FAILED, 或者 KLoginStructHead::Param = LOGIN_R_SERVERLIST | LOGIN_R_INVALID。 Step5以后步骤:类似登陆流程Step3以后步骤。
本主题包含附件: sf_20056221640.rar (16663bytes) 此文件由用户上传,GameRes.com无法确定其安全性,请慎重使用!
 fccy309 2005-6-5 0:34:24
|