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

Benjamin

靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數據加載中……

tcp中的粘包、半包的處理方法

      TCP粘包是指發送方發送的若干包數據到接收方接收時粘成一包,從接收緩沖區看,后一包數據的頭緊接著前一包數據的尾。

  出現粘包現象的原因既可能由發送方造成,也可能由接收方造成。
發送方引起的粘包是由TCP協議本身造成的,TCP為提高傳輸效率,發送方往往要收集到足夠多的數據后才發送一包數據。若連續幾次發送的數據都很少,通常TCP會根據優化算法把這些數據合成一包后一次發送出去,這樣接收方就收到了粘包數據。
      接收方引起的粘包是由于接收方用戶進程不及時接收數據,從而導致粘包現象。這是因為接收方先把收到的數據放在系統接收緩沖區,用戶進程從該緩沖區取數據,若下一包數據到達時前一包數據尚未被用戶進程取走,則下一包數據放到系統接收緩沖區時就接到前一包數據之后,而用戶進程根據預先設定的緩沖區大小從系統接收緩沖區取數據,這樣就一次取到了多包數據。
c++的解決方法如下:接收端
    int iRecvSize = PackteSize + 10;
    int iRet;
   int idx = 0;
   while (iRecvSize > 0)
   {
    iRet = recv(AcceptSocket, recvbuf+idx, iRecvSize, 0);
    if (iRet > 0)
    {
     idx += iRet;
     iRecvSize -= iRet;
    }
    else if (iRet == 0)
    {
     break;
    }
    else if ( iRet == SOCKET_ERROR)
    {
     break;
    }
   }
發送端:
   int iSendSize = PacketSize + 10;
   int iSent;
   int idx = 0;
   while (iSendSize > 0)
   {
    iSent = send(m_socket,sendbuffer+idx,iSendSize,0);
    if (iSent > 0)
    {
     idx += iSent;
     iSendSize -= iSent;
    }
    else if (iSent == 0)
    {
     break;
    }
    else if (iSent == SOCKET_ERROR)
    {
     wprintf(L"send failed with error: %d\n", WSAGetLastError());
     //closesocket(m_socket);
     //WSACleanup();
     break;
    }
   }
若傳輸的數據為不帶結構的連續流數據(如文件傳輸),則不必把粘連的包分開(簡稱分包),反之則必須分包。
c#中用socket的Available成員來表示是否還有數據需要讀取,如果Available>0,表示還有數據需有讀取,反之讀取完成。

  public class ConnectInfo
    {
        public ArrayList tmpList { get; set; }
        public SocketAsyncEventArgs SendArg { get; set; }
        public SocketAsyncEventArgs ReceiveArg { get; set; }
        public Socket ServerSocket { get; set; }
        public User user = new User();

    }


     if (client.Available > 0)
      {
                    Console.WriteLine("粘包處理");
                    for (int i = 0; i < rec; i++)
                        info.tmpList.Add(datas[i]);
                    Array.Clear(datas, 0, datas.Length);

                    datas = new byte[client.Available];
                    e.SetBuffer(datas, 0, datas.Length);
                    client.ReceiveAsync(e);
                   
       }
       else
       {
                    //檢查暫存數據的ArrayList中有沒有數據,有就和本次的數據合并
                    if (info.tmpList.Count > 0)
                    {
                        for (int i = 0; i < rec; i++)
                            info.tmpList.Add(datas[i]);
                        datas = info.tmpList.ToArray(typeof(byte)) as byte[];
                        rec = datas.Length;
                    }

                    //對接收的完整數據進行處理
       }

半包顧名思義,就不是一個完整的包,tcp發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
常見的解決方法就是制定規范的數據傳輸格式。

posted on 2013-09-22 21:22 Benjamin 閱讀(4998) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲人成网在线播放| 亚洲午夜电影在线观看| 久久精品一区二区三区不卡| 亚洲无亚洲人成网站77777| 国产精品美女主播在线观看纯欲| 亚洲免费影院| 午夜在线视频一区二区区别 | 亚洲福利视频网站| 欧美成人国产一区二区 | 国产精品mm| 久久激情视频| 麻豆91精品| 亚洲永久精品国产| 久久久久久国产精品一区| 亚洲精品欧美日韩专区| 制服丝袜亚洲播放| 在线成人激情| 宅男噜噜噜66一区二区| 狠狠干综合网| 99精品国产在热久久婷婷| 国产亚洲欧美一区二区| 午夜精品久久久久久久久久久 | 欧美一级大片在线观看| 1204国产成人精品视频| 日韩亚洲欧美精品| 国产欧美日韩一区二区三区| 欧美激情视频一区二区三区不卡| 欧美日韩美女| 免费在线成人| 欧美揉bbbbb揉bbbbb| 久久精品视频在线看| 欧美区日韩区| 欧美成人免费在线| 国产精品综合网站| 日韩视频一区二区三区在线播放免费观看 | 亚洲伊人网站| 欧美高清视频一区二区三区在线观看| 午夜一区二区三区在线观看| 欧美大胆成人| 美腿丝袜亚洲色图| 国产精品一区二区你懂得| 亚洲第一在线综合网站| 韩日欧美一区二区| 亚洲你懂的在线视频| av成人免费| 欧美.日韩.国产.一区.二区| 久久久久久欧美| 国产精品一区二区久激情瑜伽| 亚洲欧洲另类| 91久久嫩草影院一区二区| 欧美亚洲一区三区| 性欧美激情精品| 国产精品久久午夜| 一区二区三区国产精品| 亚洲裸体俱乐部裸体舞表演av| 久久久久久九九九九| 欧美制服丝袜第一页| 国产精品影院在线观看| 夜色激情一区二区| 亚洲综合电影一区二区三区| 欧美日本韩国一区二区三区| 亚洲国产日韩欧美在线图片| 亚洲精品乱码久久久久久蜜桃91 | 欧美久久久久久蜜桃| 欧美激情久久久久| 亚洲日本欧美在线| 欧美成年视频| 99热免费精品在线观看| 亚洲综合精品一区二区| 国产精品久久久久7777婷婷| 国产精品99久久久久久有的能看| 亚洲亚洲精品在线观看| 国产精品色午夜在线观看| 亚洲欧美激情诱惑| 久久全国免费视频| 亚洲精选在线| 久热成人在线视频| 亚洲国产网站| 亚洲一区在线播放| 国产一区二区三区电影在线观看| 久久精品观看| 欧美va天堂va视频va在线| 亚洲精品中文字幕在线| 欧美视频精品一区| 午夜精品久久久久久| 猛男gaygay欧美视频| 亚洲人成久久| 国产精品人成在线观看免费| 久久国产夜色精品鲁鲁99| 91久久国产精品91久久性色| 亚洲午夜在线观看视频在线| 国产在线精品自拍| 欧美国产乱视频| 亚洲欧美日韩精品在线| 欧美成人高清视频| 亚洲一区中文| 亚洲日本成人在线观看| 国产精品日韩欧美一区二区三区| 久久精品久久99精品久久| 亚洲伦理在线免费看| 久久久另类综合| 在线视频一区二区| 亚洲大片精品永久免费| 欧美性一二三区| 蜜桃伊人久久| 性欧美videos另类喷潮| 亚洲欧洲日产国产网站| 久久久久综合网| 亚洲专区国产精品| 亚洲欧洲一区二区三区久久| 国产麻豆日韩| 欧美日韩一区二区在线| 嫩草影视亚洲| 久久久久久91香蕉国产| 亚洲一区二区伦理| 亚洲乱亚洲高清| 亚洲第一网站免费视频| 久久全球大尺度高清视频| 亚洲一区免费观看| 一区二区三区国产在线观看| 亚洲国产1区| 狠狠88综合久久久久综合网| 国产精品久久久久久久7电影| 欧美国产第二页| 蜜臀av一级做a爰片久久| 久久成人这里只有精品| 亚洲欧美日韩在线高清直播| 在线视频免费在线观看一区二区| 亚洲激情在线激情| 亚洲国产成人在线视频| 欧美wwwwww| 欧美国产日韩在线| 欧美91视频| 欧美国产免费| 欧美成人一品| 欧美激情亚洲一区| 亚洲第一精品夜夜躁人人躁 | 亚洲二区三区四区| 伊人男人综合视频网| 极品av少妇一区二区| 国产在线成人| 亚洲高清激情| 亚洲精品在线免费观看视频| 亚洲激情女人| 一本到12不卡视频在线dvd| 一本色道久久综合一区| 中文国产一区| 午夜精品久久久久久| 欧美一区二区三区婷婷月色 | 欧美美女视频| 欧美日韩直播| 国产精品视频不卡| 国产主播一区二区三区| 在线播放精品| 亚洲精品免费一二三区| 亚洲天堂黄色| 欧美一区国产一区| 蜜臀va亚洲va欧美va天堂 | 久久精品一本| 欧美a级一区| 亚洲免费观看| 亚洲欧美日韩一区二区三区在线| 欧美综合国产精品久久丁香| 蜜臀久久99精品久久久画质超高清| 欧美成年视频| 国产伦精品一区二区| 原创国产精品91| 一区二区三区免费网站| 欧美在线看片a免费观看| 裸体歌舞表演一区二区| 亚洲精选久久| 欧美亚洲综合另类| 欧美精品大片| 国产亚洲人成网站在线观看| 亚洲欧洲另类国产综合| 欧美一级淫片播放口| 欧美黑人一区二区三区| 亚洲综合三区| 欧美护士18xxxxhd| 国产欧美日韩综合| 夜夜爽夜夜爽精品视频| 久久久亚洲国产天美传媒修理工| 亚洲国产精品电影| 欧美一级视频免费在线观看| 欧美a级片网| 国内外成人免费激情在线视频网站| 亚洲精品一区二区三区不| 久久精品男女| 宅男精品视频| 欧美激情一区二区三级高清视频 | 国产精品久久久久久模特| 亚洲国产精品久久| 久久成人亚洲| 日韩一级裸体免费视频| 免费成人小视频| 一区二区三区亚洲| 久久av资源网站| 中日韩男男gay无套| 欧美理论电影在线观看| 亚洲国产欧美一区|