解决粘包问题

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值