March 01, 2004

数据包处理

上技术论坛,帮一个菜鸟兄弟作了一个打包解包的处理示范,也不知道会不会误人子弟,哈,管不了那么多了。唉,tnnd,现在的年轻人,比我们那时候还牛逼,C++语言还没搞利索就出来混饭吃了!还有一个更傻冒的,居然问我这个打包解包处理方法,在VB里面应该怎么搞,靠,当场让他自己去挖个坑把自个儿给埋了算了!不知道是中国教育界的耻辱还是中国IT界的耻辱,这样的兄弟,也能一个月几千块人民币,这工资还真TM好赚啊。

//---------------------------------------------------------------------------------
//文件名: StructTest.h
//功能: 数据包处理,打包、解包
//创建人: sam young
//创建时间:2004-3-1
//---------------------------------------------------------------------------------

//结构定义
struct STRUCT_TEST
{
   char szTemp[20];
   int iChannel;
   int iID;
   long lID2;

   STRUCT_TEST()
   {
   //定义结构时,将整个结构清零
   ZeroMemory(this,sizeof(STRUCT_TEST));
   }
};

//打包函数
//char* OutBuf:
//void* InputStruct:传入的数据结构
UINT MakeStructBuff(char* OutBuf,void* InputStruct)
{
   STRUCT_TEST *pStruct=(STRUCT_TEST *)InputStruct;

   int pos=0;//pos为当前位置,
   memcpy(OutBuf[pos],pStruct->szTemp,strlen(pStruct->szTemp)+1);//这里我们一般将字符后面加一个二进制0,当然了,这个看习惯

   pos=pos+strlen(pStruct->szTemp)+1;
   memcpy(OutBuf[pos],pStruct->iChannel,2);

   pos=pos+2;
   memcpy(OutBuf[pos],pStruct->iID,2);

   pos=pos+2;
   memcpy(OutBuf[pos],pStruct->LID,4);
}


//解包函数
//void* ReceiveBuf:生成的数据结构
//char* buf:传入的数据包
void GetFromBuf(void* ReceiveBuf,char* buf)
{
   int pos=0;

   //强制使ReceiverBuf与数据结构一致,这样,这个ReceiverBuf就与结构同样使用了
   STRUCT_TEST *pStructReceive=(STRUCT_TEST *)ReceiveBuf;

   int len=StrnCopy(pStructReceive->szTemp,20,&buf[pos]);

   pos=pos+len+1;
   pStruct->iChannel=(int)buf[pos];

   pos=pos+2;
   pStruct->iID=(int)buf[pos];

   pos=pos+2;
   pStruct->LID=(long)buf[pos];

}


//拷贝最大化的字符串
int StrnCopy(char* szbuf,int nMaxstrlen,char* szSource)
{
   int nStrlen=strlen(szSource);
   nStrlen=(nStrlen>nMaxstrlen)?nMaxstrlen:nStrlen;
   strncpy(szbuf,szSource,nStrlen);
   return nStrlen;
}

Posted by 三更天 at March 1, 2004 11:40 PM
Comments
Post a comment









Remember personal info?