Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96289
  • 博文数量: 41
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-18 20:09
文章分类

全部博文(41)

文章存档

2016年(1)

2015年(1)

2014年(9)

2013年(30)

我的朋友

分类: C/C++

2013-06-03 15:42:18

len + type + buf + 校验码 长度是为了解决tcp粘包问题。 type是解析消息类型 buf为消息参数,利用异或来加解密,封包秘钥又可以防止非法客户端能正确解析..       两次异或可以得到原来值。天龙八部就是用异或来加解密的。 //↓这样在可执行文件中将是汉字显示,上线前要改成随机KEY↓KEY不得小于10个字节 #define GAMESERVER_TO_CLIENT_KEY "服务器端对客户端的封包密钥" #define CLIENT_TO_GAMESERVER_KEY "服务器端对客户端的封包密钥" #define LOGIN_TO_CLIENT_KEY      "服务器端对客户端的封包密钥" #define CLIENT_TO_LOGIN_KEY      "服务器端对客户端的封包密钥" #define OSTREAM_KEY              "底层全局封包流通用密钥"   //↑这样在可执行文件中将是汉字显示,上线前要改成随机KEY↑KEY不得小于10个字节 #define PACK_COMPART "$-$"//封包分隔符 #define PACK_COMPART_SIZE strlen(PACK_COMPART) #ifndef ENCRYPT #define ENCRYPT(x,xlen,KEY,BeginPlace) if( (x)!=NULL ) \   { \   \    CHAR* t_pBuffer = (x); \    CHAR* pKey = {KEY}; \    UINT KeyLen = (UINT)strlen(pKey); \    for (UINT i = 0; i < (xlen); i++) \    { \     *t_pBuffer ^= pKey[(i+BeginPlace)%KeyLen]; \     t_pBuffer++; \    } \   } #endif #ifndef ENCRYPT_HEAD #define ENCRYPT_HEAD(x,KEY) if( (x)!=NULL ) \   { \    CHAR* t_pBuffer = (x); \    CHAR* pKey = {KEY}; \    UINT KeyLen = (UINT)strlen(pKey); \    for (UINT i = 0; i < PACKET_HEADER_SIZE; i++) \    { \     *t_pBuffer ^= pKey[i%KeyLen]; \     t_pBuffer++; \    } \   } #endif 校验码是为了保证包完整和防止非法客户端发来的消息。
阅读(788) | 评论(0) | 转发(0) |
0

上一篇:网络层的连接管理

下一篇:知识点-异常2

给主人留下些什么吧!~~