public List <Order> SlicePack(byte[] buff) { Console.WriteLine("在SlicePack中 buff len:" + buff.Length); int nowZero = 0;//这个是目前的封包起始索引,每次回圈推后索引,直到到达尾部为止 List <Order> final = new List <Order>(); while (buff.Length - nowZero >= 3) { int len = BitConverter.ToChar(buff, nowZero); byte order = buff[nowZero + 2]; Console.WriteLine("Order 为:" + order); Order newo = null; switch (TypeDict[order]) { case STRING: { newo = new Order(order, ToBytes.getString(buff, nowZero + 3, len)); break; } case INT: { newo = new Order(order, ToBytes.getInt(buff, nowZero + 3)); break; } } final.Add(newo); nowZero += 3 + len; } return(final); }
public byte[] buildBytes(byte order, string data) { byte[] s_part = ToBytes.toBytes(data);//string资料部分 char len = (char)(s_part.Length); byte[] header = BitConverter.GetBytes(len); byte[] o_part = new byte[] { order };//order部分 byte[] final = new byte[s_part.Length + header.Length + o_part.Length]; Console.WriteLine("final len:" + final.Length); header.CopyTo(final, 0); o_part.CopyTo(final, header.Length); s_part.CopyTo(final, o_part.Length + header.Length); return(final); }
public byte[] buildBytes(byte order, int data) { byte[] s_part = ToBytes.toBytes(data);//int资料部分 char len = (char)(s_part.Length); byte[] header = BitConverter.GetBytes(len); //header代表这个封包有多长(不包括header本身),这个存在的原因是防止粘包 Console.WriteLine("header Len:" + header.Length); byte[] o_part = new byte[] { order }; //order部分 byte[] final = new byte[s_part.Length + header.Length + o_part.Length]; Console.WriteLine("final len:" + final.Length); header.CopyTo(final, 0); o_part.CopyTo(final, header.Length); s_part.CopyTo(final, o_part.Length + header.Length); Console.Write("在bulid byte 结束,封包长度为:" + final.Length); return(final); }