#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[]>,这个数据就是有可能粘包的数据,如果不粘包.则仅有一条数据..