tcp 粘包问题

#region  " 发送包 "
         /// <summary>
         /// 
         /// </summary>
         /// <param name="data">实际发送的数据</param>
         /// <returns>添加包头长度的数据</returns>
         private  byte [] SendPack( byte [] data)
         {
             //data长度不能超出65535
             byte [] result =  new  byte [data.Length + 2];
             BitConverter.GetBytes((UInt16)data.Length).CopyTo(result, 0);
             data.CopyTo(result, 2);
             return  result;
         }
         #endregion
 
         #region  " 接收包 "
         /// <summary>
         /// 
         /// </summary>
         /// <param name="data">接收到的数据</param>
         /// <returns>粘包的数组,实际发送的数据</returns>
         private  List< byte []> BackPack( byte [] data)
         {
             List< byte []> result =  new  List< byte []>();
             int  index = 0;
             do
             {
                 int  len = BitConverter.ToUInt16(data, index);
                 index += 2;
                 if  (index + len <= data.Length)
                 {
                     byte [] tmp =  new  byte [len];
                     Array.Copy(data, index, tmp, 0, len);
                     index += len;
                     result.Add(tmp);
                 }
                 else
                 break ; }
             while  (index + 2 < data.Length);
             return  result;
         }
         #endregion

给你列个最简单的代码.
发送包前.调用SendPack方法得到发送包.再发送.
接收包后,调用BackPack方法得到List<byte[]>,这个数据就是有可能粘包的数据,如果不粘包.则仅有一条数据..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值