在網(wǎng)絡(luò)游戲中,會(huì)涉及到數(shù)據(jù)傳送,所以就有一個(gè)要解決的問(wèn)題,如何定義數(shù)據(jù)包格式,就目前我所知道的數(shù)據(jù)定義方式描述一下,歡迎各位高手指點(diǎn),
第一種方式:
定義數(shù)據(jù)頭:
//網(wǎng)絡(luò)包頭
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;
定義數(shù)據(jù)體:
//網(wǎng)絡(luò)數(shù)據(jù)包體
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; //這里數(shù)據(jù)長(zhǎng)度代表的是,長(zhǎng)度以后要取的字節(jié)的個(gè)數(shù)
tstring m_strContent;
tstring m_strBuf;
byte* m_pBuf;
PacketHeader m_pHeader;
};
在數(shù)據(jù)包里面包含 包頭, 用函數(shù)來(lái)實(shí)現(xiàn)對(duì)包頭和包內(nèi)容的操作。
第二種定義方式:
//網(wǎng)絡(luò)包頭
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;
定義數(shù)據(jù)體:
//網(wǎng)絡(luò)數(shù)據(jù)包體
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; //這里數(shù)據(jù)長(zhǎng)度代表的是,長(zhǎng)度以后要取的字節(jié)的個(gè)數(shù)
tstring m_strContent;
tstring m_strBuf;
byte* m_pBuf;
};
這兩種方式的區(qū)別,就是一個(gè)用包含包頭,一個(gè)用派生。歡迎有更好解決辦法的朋友寫(xiě)出來(lái)分享一下.