服务器与客户端之间通信格式以及协议字

服务器与客户端之间通信格式以及协议字
版本号: Ver 1.0.0.2
作者:刘扬
声明:
因为时间有限,所以现在暂时以 WSAEventSelect Select 消息模型为主,并对 IOCP 留有必要的连入接口,所以这份报文以这两种模型为基础。
1.        报文头:
l         版本号:
10个字符,以Ver开头,例如:Ver1.0.0.0=Ver1000。
l         报文类型( 命令字)
最长不超过20个字符。
l         报文驱动者:
客户端(当前登录的帐号),服务端(当前服务器名)(最长不超过20个字符)。
l         有无参数指示器:
当有参数时,指示器为1,当无参数时,指示器为0。目的是加快解析速度。
l         报文长度:
最长不超过10个字符
l         参数体:
长度可变,但是报文头+参数体不超过2K字节,(相当于2048个char型数据,其中连命令字之间的“,“也包括在里面。)参数与参数之间应用“,”隔开,参数体最大长度为1024个字节,相当于1K
l         整体报文格式:
版本号,报文类型,报文驱动者,参数指示器,报文长度, Value (参数 1 ,参数 2 ,。。。。。。。)
例如:
ABC 服务器认证请求的报文:
Ver1000,Login,ABC,0,报文长度,Value()
ABC 客户端登录的报文:
Ver1000,Login,ABC,1,报文长度,Value(账号,密码,IP地址)
l         报文结构体:
Struct Server/CustomMessage
{
       char              m_cVersion[10];                   //版本号
       char               m_cCommandType[20];              //报文类型
       char               m_cDriver[20];                    //报文驱动者
       char               m_cValueSwitch;                  //参数指示器
       char               m_cMessageLen[10];           //报文长度
       char               m_cInputValue[1024];           //参数体
}
2.        具体的报文
定义:->:表示发向那里。
为了明了,以及方便,直接将参数填入结构体内。
设定服务器为 ABC ,客户端为 CDE Sizeof 返回值为字符串。
在“”内表示值为字符串
参数体以 Value 开头的字符串。

客户端的登录与认证 (命令字与参数)
1、 服务器->客户端:要求客户端把账号、密码等信息传过来。
GetLogin()
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“GetLogin”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
2、 服务器<-客户端:客户端上传账号、密码等信息。
Login(账号,密码,IP地址)
struct CustomMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“Login”;
m_cDriver=“CDE”;
m_cValueSwitch=1;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=“Value(账号,密码,IP地址)”; 
}
3、 服务器->客户端:错误提示,表示账号错误,一般为无此账号。
AccountError()
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“AccountError”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
4、 服务器->客户端:错误提示,表示账号对,但密码不对。
PasswordError()
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“PasswordError”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
5、 服务器->客户端:错误提示,表示帐号被封,请和管理人员联系。
BlockAccount()
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“BlockAccount”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
6、 服务器->客户端:错误提示,表示已有相同的帐号登陆。
HaveSameAccount()
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“HaveSameAccount”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
7、 服务器<-客户端:客户端已显示错误提示,并将自己与服务器断开
ErrorMsgReceive()
struct CustomMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“ErrorMsgReceive”;
m_cDriver=“CDE”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=NULL;
}
8、 服务器->客户端:客户端已通过服务器的认证,服务器向客户端发送帐号,一次最多40个,估计1K左右。
SendCustomList(客户端的账号1,客户端账号2,。。。。。。。)
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“SendCustomList”;
m_cDriver=“ABC”;
m_cValueSwitch=1;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=“Value(客户端的账号1,客户端账号2,。。。。。。。)”;
}
9、 服务器<-客户端:表示40个账号已收到
SendCustomOk()
struct CustomMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“SendCustomOk”;
m_cDriver=“CDE”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=NULL;
}
10、              服务器->客户端:表示服务器把当前已接入进的所有客户账号发送完毕
SendCustomEnd()
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“SendCustomEnd”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=NULL;
}
11、              服务器->客户端:向当前已连接上的所有的客户端发送刷新消息,客户端和服务器会重复9、10、11的动作。
FlashCustomList()
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“FlashCustomList”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=“Value(客户端的账号1,客户端账号2,。。。。。。。)”;
}
12、              服务器<-客户端:表示向某个客户发送消息。
Message(对方客户端帐号,自己客户端帐号,客户信息)
struct CustomMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“Message”;
m_cDriver=“CDE”;
m_cValueSwitch=1;
m_cMessageLen=sizeof(CustomMessage);
m_cInputValue=“Value(对方客户端帐号,自己客户端帐号,客户信息)”;
}
 
13、              服务器->客户端:转发某个客户端的消息给另一个客户端。
Message(对方客户端帐号,客户信息)
struct ServerMessage
{
        m_cVersion=“Ver1000 ”;
        m_cCommandType=“Message”;
m_cDriver=“ABC”;
m_cValueSwitch=0;
m_cMessageLen=sizeof(ServerMessage);
m_cInputValue=“Value(对方客户端帐号,客户信息)”;
}
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值