using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NetFrame.auto { public class LengthEncoding { 粘包长度编码 [] encode(byte[] buff) { MemoryStream ms = new MemoryStream();//创建内存流对象 BinaryWriter sw = new BinaryWriter(ms);//写入二进制对象流 //写入消息长度 sw.Write(buff.Length); //写入消息体 sw.Write(buff); byte[] result = new byte[ms.Length]; Buffer.BlockCopy(ms.GetBuffer(), 0, result, 0, (int)ms.Length); sw.Close(); ms.Close(); return result; } 粘包长度解码 [] decode(ref List<byte> cache) { if (cache.Count < 4) return null; MemoryStream ms = new MemoryStream(cache.ToArray());//创建内存流对象,并将缓存数据写入进去 BinaryReader br = length = br.ReadInt32();//从缓存中读取int型消息体长度 (length > ms.Length - ms.Position) { return null; } [] result = br.ReadBytes(length); //清空缓存 cache.Clear(); //将读取后的剩余数据写入缓存 cache.AddRange(br.ReadBytes((int)(ms.Length - ms.Position))); br.Close(); ms.Close(); return result; } } }
delegate 是表示对具有特定参数列表和返回类型的方法的引用的类型。 在实例化委托时,可以将其实例与任何具有兼容签名和返回类型的方法相关联。通过委托实例调用方法。委托相当于将方法作为参数传递给其他方法,类似于 C++ 函数指针,但它们是类型安全的。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NetFrame { [] LengthEncode(byte[] value); [] LengthDecode(ref List<byte> value); [] encode(object value); decode(byte[] value); }