如何修改游戏服务器数据包,游戏数据包的定义
在網絡游戲中,會涉及到數據傳送,所以就有一個要解決的問題,如何定義數據包格式,就目前我所知道的數據定義方式描述一下,歡迎各位高手指點,
第一種方式:
定義數據頭:
//網絡包頭
typedef struct PacketHeader
{
byte? id[4];??//u_int32 lb
byte? len[4];??//u_int32 lb
byte? version[2];?//u_int16 lb
byte? type[2];??//u_int16 lb
}PacketHeader;
定義數據體:
//網絡數據包體
class CPackage
{
public:
CPackage(void);
//CPackage(byte* pParam, int nLen);
~CPackage(void);
public:
u_int16?GetType();
void?SetType(u_int16 nType);
DWORD?GetLen();
void?SetLen(int nLen);
tstring GetContent();
void?SetContent(tstring strContent);
virtual void*?GetPackage();
void?SetBuf(byte* pParam);
virtual byte*?? GetBuf(u_int32 nLen);
protected:
u_int16? m_nType;
int?? m_nLen;? //這里數據長度代表的是,長度以后要取的字節的個數
tstring?? m_strContent;
tstring?? m_strBuf;
byte*?? m_pBuf;
PacketHeader m_pHeader;
};
在數據包里面包含 包頭, 用函數來實現對包頭和包內容的操作。
第二種定義方式:
//網絡包頭
typedef struct PacketHeader
{
byte? id[4];??//u_int32 lb
byte? len[4];??//u_int32 lb
byte? version[2];?//u_int16 lb
byte? type[2];??//u_int16 lb
}PacketHeader;
定義數據體:
//網絡數據包體
class CPackage: public PacketHeader
{
public:
CPackage(void);
//CPackage(byte* pParam, int nLen);
~CPackage(void);
public:
u_int16?GetType();
void?SetType(u_int16 nType);
DWORD?GetLen();
void?SetLen(int nLen);
tstring GetContent();
void?SetContent(tstring strContent);
virtual void*?GetPackage();
void?SetBuf(byte* pParam);
virtual byte*?? GetBuf(u_int32 nLen);
protected:
u_int16? m_nType;
int?? m_nLen;? //這里數據長度代表的是,長度以后要取的字節的個數
tstring?? m_strContent;
tstring?? m_strBuf;
byte*?? m_pBuf;
};
這兩種方式的區別,就是一個用包含包頭,一個用派生。歡迎有更好解決辦法的朋友寫出來分享一下.
總結
以上是生活随笔為你收集整理的如何修改游戏服务器数据包,游戏数据包的定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django+djangorestfra
- 下一篇: 室内设计手绘表现手法基础教程