在网络游戏中,会涉及到数据传送,所以就有一个要解决的问题,如何定义数据包格式,就目前我所知道的数据定义方式描述一下,欢迎各位高手指点,
第一种方式:
定义数据头:
//网络包头
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;
};
这两种方式的区别,就是一个用包含包头,一个用派生。欢迎有更好解决办法的朋友写出来分享一下.