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

我的玻璃盒子

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

原文:http://m.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>
            午夜激情亚洲| 欧美日韩免费看| 国产女主播一区| 久久精彩视频| 久久影视三级福利片| 欧美精品 日韩| 亚洲综合好骚| 久久综合久久综合久久综合| 在线视频精品| 欧美专区18| 亚洲午夜激情在线| 久久综合伊人77777蜜臀| 亚洲性感激情| 老妇喷水一区二区三区| 亚洲欧美电影院| 免费影视亚洲| 久久九九热re6这里有精品| 欧美激情视频在线播放| 久久精品视频va| 欧美午夜片欧美片在线观看| 欧美大片第1页| 国产日韩欧美91| 99热精品在线观看| 亚洲欧洲在线免费| 欧美中文在线视频| 亚洲欧美日韩国产成人精品影院| 亚洲欧美日韩专区| 亚洲精品久久久久久久久久久| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产在线一区二区三区四区 | 久久亚洲精品一区| 午夜亚洲视频| 欧美日韩精品免费观看视频| 久久综合色播五月| 国产香蕉久久精品综合网| 在线亚洲国产精品网站| 一本色道久久综合狠狠躁篇怎么玩| 欧美成人情趣视频| 激情久久久久久久久久久久久久久久| 亚洲天堂网在线观看| 一区二区三区 在线观看视| 免费的成人av| 欧美a级片网站| 好吊视频一区二区三区四区| 亚洲欧美在线免费| 午夜视黄欧洲亚洲| 国产欧美日韩综合| 亚洲免费一在线| 香蕉免费一区二区三区在线观看 | 欧美一区二区视频在线观看2020| 亚洲一区二区三区视频| 欧美一区二区视频观看视频| 性欧美xxxx大乳国产app| 国产精品theporn| 中文无字幕一区二区三区| 亚洲免费视频中文字幕| 国产精品成人一区二区网站软件| 9久re热视频在线精品| 亚洲午夜在线观看| 欧美视频福利| 一区二区三区精密机械公司 | 亚洲午夜激情| 麻豆成人在线观看| 亚洲欧美网站| 国产精品久久久久天堂| 一本一道久久综合狠狠老精东影业| 亚洲破处大片| 欧美激情综合色综合啪啪| 亚洲精选久久| 亚洲免费在线观看| 国产一区二区三区最好精华液| 欧美一区日韩一区| 欧美成人日本| 一区二区激情视频| 国产精品色一区二区三区| 性亚洲最疯狂xxxx高清| 麻豆91精品91久久久的内涵| 亚洲乱码国产乱码精品精| 欧美色网在线| 久久不射2019中文字幕| 亚洲第一精品在线| 一本色道久久综合精品竹菊 | 久久只有精品| 亚洲美女淫视频| 国产精品老牛| 久久久久久高潮国产精品视| 亚洲第一偷拍| 欧美一区二区播放| 亚洲人成在线免费观看| 国产精品乱码妇女bbbb| 久久综合九色综合欧美就去吻| av不卡在线观看| 老司机67194精品线观看| 亚洲另类黄色| 国产午夜精品全部视频播放 | 亚洲娇小video精品| 欧美日韩国产综合视频在线| 亚洲男人天堂2024| 欧美激情亚洲| 欧美在现视频| 亚洲麻豆av| 国产欧美1区2区3区| 欧美福利电影在线观看| 午夜精品影院| 亚洲日本aⅴ片在线观看香蕉| 亚洲在线1234| 91久久精品久久国产性色也91| 国产精品久久久久9999吃药| 亚洲天天影视| 蜜桃av一区| 亚洲专区在线| 亚洲黄色影片| 久久婷婷av| 亚洲综合不卡| 亚洲精选久久| 曰韩精品一区二区| 国产精品入口福利| 欧美日韩美女| 欧美电影免费观看高清完整版| 亚洲欧美综合v| 日韩视频在线观看国产| 欧美高清在线一区| 久久人人爽人人爽爽久久| 久久精品道一区二区三区| 小辣椒精品导航| 亚洲精品日韩在线观看| 黄色精品一区| 国产日韩欧美精品| 欧美性大战久久久久| 欧美精品色综合| 欧美丰满高潮xxxx喷水动漫| 久久久精彩视频| 久久精品亚洲| 欧美在线黄色| 欧美在线视频播放| 亚洲免费中文| 亚洲欧洲av一区二区| 亚洲一区二区在线免费观看| 国产精品99久久久久久宅男| 91久久久亚洲精品| 亚洲一区二区av电影| 亚洲社区在线观看| 亚洲一卡久久| 亚洲网站视频| 亚洲欧美一区二区精品久久久| 亚洲一区二区在线播放| 亚洲一区二区三区中文字幕在线| 99在线精品观看| 在线综合亚洲欧美在线视频| 亚洲天堂偷拍| 午夜精品久久久久| 久久精品欧美日韩精品| 噜噜噜久久亚洲精品国产品小说| 蜜臀av国产精品久久久久| 欧美激情亚洲一区| 日韩午夜av电影| 亚洲一区二区精品| 久久岛国电影| 欧美大成色www永久网站婷| 欧美精品久久久久a| 国产精品国产精品国产专区不蜜| 国产精品久久久久天堂| 狠狠色狠狠色综合系列| 亚洲精品中文字幕在线| 亚洲自拍偷拍网址| 久久久精品一区二区三区| 欧美大片在线观看| 一本久道久久综合狠狠爱| 亚洲综合视频网| 麻豆成人综合网| 欧美先锋影音| 黑人中文字幕一区二区三区| 亚洲日本欧美| 欧美伊人久久久久久午夜久久久久| 老司机免费视频一区二区三区 | 国产精品一区亚洲| 一色屋精品视频免费看| 一本一本久久a久久精品牛牛影视| 亚洲在线视频| 你懂的视频一区二区| 99精品欧美一区二区三区综合在线| 午夜精品视频在线| 欧美高清在线播放| 国产精品卡一卡二| 在线日韩中文字幕| 亚洲欧美一区二区原创| 亚洲砖区区免费| 欧美大片91| 久久九九久久九九| 久久国产精品免费一区| 亚洲精品欧美激情| 亚洲精品日韩在线| 欧美顶级艳妇交换群宴| 久久精品日韩| 欧美黄色视屏| 99日韩精品| 午夜在线播放视频欧美| 欧美在线|欧美| 欧美成人性生活| 国产精品黄视频|