青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

我的玻璃盒子

(轉載)一個struct結構,一次發送多個邏輯結構信息

原文:http://www.shnenglu.com/tonykee/archive/2008/01/24/41766.html

游戲里面的數據,最重要的就是如何組織,常見的包結構就是type+len+data這樣的結構
//所有包的基類型
struct BasePack
{
  unsigned short type;  //類型
  unsigned short len;   //長度
  BasePack();
  unsigned short size();
};
//////////////////////////////////////////////////////////////////////////
//比如這個是登錄包結構
struct LoginPack :public BasePack
{
  char username[15];
  char password[10];
  LoginPack();
  unsigned short size();
};
//..還有很多類型的包結構,自己去擴展
//下面這個包結構就很特別了:
這個struct 結構能保存變長的子結構體,也就是結構體的容器,如果一次要發送大量查詢的數據,可以用這個容器來裝載。結構大致如下:
//////////////////////////////////////////////////////////////////////////
//集合包,這是個很特殊的包,里面的數據是變長的(buffer 將作為子包的首指針)
//當然也有個上限,只不過和StringPack一樣,每次發送的數據量不固定,并不一定是包體的長度,
//使用這個包的注意事項:1.如果用tcp,總長不要超過4096, 如果用udp總長不要超過1024(安全指數)
//                      2.一般一個包不會共享給多個線程來處理,而且都是臨時拼發,并未考慮線程安全
struct CollectionPack:public BasePack
{
  unsigned short mSubPackCount;   //子包的數量

  char buffer[4096];           //最大限度的包長度,做緩沖

  CollectionPack();

  //清除CollectionPack里面的內容
  void clear();

  //得到子包的數量
  unsigned short getSubpackCount();

  //添加子包,添加是否成功,集合包的大小,默認不超過MTU的大小,當然如果是TCP傳輸,則沒有這個限制,最大可以是4096
  bool   append(BasePack &pack,  unsigned short  maxsize=1500);

  //本集合包的總長度
  unsigned short size();

  //重載數組運算符,這樣就可以數組迭代的方式訪問子包了,不過用索引迭代沒有next迭代的效率高
  BasePack *operator[](int idx);

  //p迭代的指針,返回當前取出來的包的指針使用方法如下:
  //   BasePack *p = 0;
  //while(collection.next(&p))
  //{
  //  p就是當前你找到的包了
  //}
  BasePack * next(BasePack ** p);
};
CollectionPack::CollectionPack()
{
memset(buffer,0, 4096);
type = COLLECTION_PACK;
mSubPackCount = 0;
}

//清除CollectionPack里面的內容
void CollectionPack::clear()
{
mSubPackCount = 0;
memset(buffer,0, 4096);
}

//得到子包的數量
unsigned short CollectionPack::getSubpackCount()
{
return mSubPackCount;
}

//添加子包,添加是否成功
bool   CollectionPack::append(BasePack &pack, unsigned short maxsize)
{
unsigned int currentlen = size(); //當前整個包的長度
unsigned int psize = pack.size(); //即將要加入的包的長度

if(psize + currentlen > maxsize || psize + currentlen > SESSION_BUFFER_LONGTH)
{
  return false; //不能夠再裝了
}

int len  = size() - 6;

memcpy(buffer + len, &pack,  pack.size());

//StringPack *p = (StringPack *) (buffer + len);
mSubPackCount ++;
return true;
}

//本集合包的總長度
unsigned short CollectionPack::size()
{
len = 0;
for(unsigned short i = 0; i < mSubPackCount; i ++)
{
  BasePack * p = (BasePack *) (buffer + len);
  len += p->size();
}
len += 6;     //(type len  SubPackNum 共6個字節)
return len;
}

//重載數組運算符,這樣就可以數組迭代的方式訪問子包了,不過用索引迭代沒有next迭代的效率高
BasePack * CollectionPack::operator[](int idx)
{
if(idx < 0 || idx >=mSubPackCount)
{
  return 0; //下標越界
}

int ln = 0;
for(unsigned short i = 0; i < mSubPackCount; i ++)
{
  BasePack * p = (BasePack *) (buffer + ln);

  if(idx == i)
   return p;
  else
   ln += p->size();
}

return 0;
}

//p迭代的指針,返回當前取出來的包的指針使用方法如下:
//   BasePack *p = 0;
//while(collection.next(&p))
//{
//  p就是當前你找到的包了
//}
BasePack *  CollectionPack::next(BasePack ** p)
{
char *cur = 0;

if((*p)==0)
  cur = buffer;
else
  cur = (char *)(*p);

//指針后移,定位到下一個包的位置
(*p)=(BasePack *)(cur + ((BasePack *)cur)->size());

if((*p)->type == 0)
  return 0; //沒有類型為0類型的包,如果為0,顯然是到末尾了
else
  return (*p);
}

有了以上這個容器,要把一些小包組合起來一起發送就非常方便了,但是組合的時候,還是要考慮不能超出上限范圍的
不過在真實的游戲服務器里面,包不一定是采用結構體的方式來發送的,有的是把對象串行化成為字節流的方式來發送。
我覺得這樣比較麻煩,要encoding decoding,效率調試都不方便,直接法結構體,高效,簡單,可就是不太安全。

posted on 2008-01-24 16:28 深藍色系統 閱讀(218) 評論(0)  編輯 收藏 引用

導航

<2008年1月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

統計

常用鏈接

留言簿(75)

隨筆分類

隨筆檔案

文章分類

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国外成人在线视频| 久久综合网hezyo| 久久性色av| 亚洲一级在线| 久久久久国产一区二区三区| 久久久久欧美精品| 欧美va亚洲va国产综合| 亚洲国产日韩欧美| 夜夜爽av福利精品导航| 亚洲欧美制服中文字幕| 麻豆精品传媒视频| 欧美精品色综合| 久久久久久久久久码影片| 久久在精品线影院精品国产| 欧美成人免费大片| 欧美亚州韩日在线看免费版国语版| 国产农村妇女精品一区二区| 一区在线播放视频| 一区二区三区你懂的| 亚洲小说春色综合另类电影| 国产精品亚洲一区| 在线日本成人| 午夜精品久久久久久久 | 亚洲一区二区免费| 久久久精品tv| 日韩视频在线播放| 久久精品欧美日韩| 欧美淫片网站| 国产一区亚洲一区| 亚洲日本精品国产第一区| 欧美在线日韩| 亚洲伦理精品| 欧美黄免费看| 亚洲国产专区| 久久精品色图| 亚洲永久在线| 欧美日本精品一区二区三区| 怡红院精品视频在线观看极品| 亚洲一区二区免费看| 欧美好骚综合网| 久久精品91久久久久久再现| 欧美视频专区一二在线观看| 亚洲区国产区| 欧美刺激性大交免费视频 | 亚洲国产精品一区在线观看不卡| 国产精品v欧美精品v日本精品动漫 | 国产精品99久久久久久人 | 亚洲一区二区三区免费在线观看 | 国产麻豆9l精品三级站| 亚洲国产美女精品久久久久∴| 亚洲欧美在线高清| 日韩一区二区高清| 欧美精品在线网站| 一区二区久久久久久| 亚洲国产日韩欧美在线99| 久久综合999| 伊人成人网在线看| 久久久免费观看视频| 午夜影院日韩| 国内精品久久久久国产盗摄免费观看完整版 | 欧美高清在线视频| 亚洲人体大胆视频| 欧美电影免费观看网站 | 国产精品www| 亚洲一区中文| 日韩亚洲欧美在线观看| 亚洲欧美日韩精品| 性色av一区二区怡红| 亚洲一区三区视频在线观看| 国产精品毛片在线看| 久久成年人视频| 久久精品视频一| 尤物精品国产第一福利三区| 免费成人av在线看| 久久国产视频网站| 亚洲国产高清在线| 亚洲精品久久久久久久久久久久| 欧美日韩伦理在线| 先锋影音国产精品| 久久久噜久噜久久综合| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲一级二级在线| 国产精品一卡| 免费在线一区二区| 欧美日韩国产在线播放| 欧美一区二区三区喷汁尤物| 久久久久久久成人| 一区二区三区免费网站| 久久aⅴ国产欧美74aaa| 一本大道久久精品懂色aⅴ | 久久久亚洲人| 99国产精品视频免费观看一公开| 一区二区三区不卡视频在线观看 | 欧美激情综合色综合啪啪| 亚洲欧美另类中文字幕| 久久久久国色av免费看影院| 99国产精品久久久久久久| 欧美一二三区在线观看| 日韩亚洲国产精品| 久久国产精彩视频| 中文欧美字幕免费| 久久中文字幕一区| 午夜欧美大尺度福利影院在线看| 久久国产天堂福利天堂| 亚洲一区视频在线| 国产精品每日更新| 亚洲男人的天堂在线aⅴ视频| 久久av一区二区三区| 欧美激情精品久久久久| 久久久精品日韩欧美| 欧美日韩一区在线观看视频| 牛夜精品久久久久久久99黑人| 国产精品久久久久av| 亚洲高清激情| 激情久久综合| 欧美一级久久久| 亚洲自拍偷拍视频| 欧美日韩亚洲一区二区| 亚洲一区二区三区成人在线视频精品| 亚洲国产精品专区久久| 久久精品电影| 久久久国产精品一区二区中文| 国产精品黄视频| 一区二区不卡在线视频 午夜欧美不卡在 | 久久婷婷国产麻豆91天堂| 亚洲欧美国产日韩天堂区| 欧美本精品男人aⅴ天堂| 老司机午夜精品视频| 国产一区二区三区免费不卡| 亚洲免费一区二区| 欧美一级大片在线免费观看| 国产精品视频网站| 欧美一级大片在线观看| 久久精品官网| 一区二区三区亚洲| 久久亚洲综合色一区二区三区| 玖玖玖国产精品| 久久久久网站| 欧美顶级艳妇交换群宴| 亚洲国产另类久久久精品极度| 久久精品夜色噜噜亚洲a∨ | 久久美女性网| 美女主播精品视频一二三四| 激情懂色av一区av二区av| 国产精品美女午夜av| 亚洲精品免费在线播放| 一本色道久久综合亚洲91| 欧美日韩一视频区二区| 亚洲一区二区视频在线观看| 欧美综合77777色婷婷| 韩国欧美国产1区| 久久性天堂网| 亚洲国产精品女人久久久| 一本久道久久综合中文字幕| 国产精品大片wwwwww| 欧美伊人久久大香线蕉综合69| 久热综合在线亚洲精品| 日韩午夜剧场| 国产日韩精品综合网站| 久久亚洲欧洲| 一区二区av| 免费视频一区| 亚洲永久免费| 国产一区深夜福利| 欧美日本中文字幕| 性高湖久久久久久久久| 亚洲国产一区二区精品专区| 欧美日韩亚洲一区在线观看| 亚洲欧美日韩综合aⅴ视频| 欧美成人综合一区| 午夜在线成人av| 亚洲欧洲精品一区二区三区不卡| 国产精品高潮在线| 免费短视频成人日韩| 亚洲在线观看免费| 最近中文字幕日韩精品 | 欧美 日韩 国产在线| 久久久久久网址| 亚洲视屏在线播放| 亚洲高清免费在线| 免费永久网站黄欧美| 鲁大师成人一区二区三区| 一区二区成人精品 | 国产精品日韩在线播放| 裸体一区二区| 欧美一区二区三区在| 夜夜夜久久久| 亚洲国产一成人久久精品| 久久精品夜色噜噜亚洲a∨ | 午夜精品三级视频福利| 亚洲人久久久| 精品成人在线视频| 欧美午夜激情视频| 欧美精品久久久久久久久久| 久久亚洲视频| 久久久久国产成人精品亚洲午夜| 亚洲婷婷在线| 亚洲视频观看| 一区二区激情视频| 99精品国产福利在线观看免费 |