public static MessageHeader ParseHeader(byte[] bytes) { if (bytes.Length != MsgHeaderLength) { throw new Exception("参数错误"); } MessageHeader recieveHeader = new MessageHeader(); var cursor = 0; var shortLength = BuildTcpProto.GetTypeLength <short>(); var intLength = BuildTcpProto.GetTypeLength <int>(); var uintLength = BuildTcpProto.GetTypeLength <uint>(); var signBytes = bytes.Take(shortLength).ToArray(); recieveHeader.StartSign = Util.BytesToShort(signBytes); cursor += signBytes.Length; var lengthBytes = bytes.Skip(cursor).Take(intLength).ToArray(); recieveHeader.Length = Util.BytesToInt(lengthBytes); cursor += lengthBytes.Length; var crc32Bytes = bytes.Skip(cursor).Take(intLength).ToArray(); recieveHeader.Crc32 = Util.BytesToUInt(crc32Bytes); cursor += crc32Bytes.Length; return(recieveHeader); }
public static MessageHeader SeperatePecketBuffer(byte[] pBytes, out string message) { var msgResult = string.Empty; var headerLength = GetStructLength <MessageHeader>(); var headerBytes = pBytes.Take(headerLength).ToArray(); var messageBytes = pBytes.Skip(headerLength).Take(pBytes.Length - headerLength).ToArray(); MessageHeader recieveHeader = new MessageHeader(); var cursor = 0; var shortLength = BuildTcpProto.GetTypeLength <short>(); var intLength = BuildTcpProto.GetTypeLength <int>(); var uintLength = BuildTcpProto.GetTypeLength <uint>(); var signBytes = headerBytes.Take(shortLength).ToArray(); recieveHeader.StartSign = Util.BytesToShort(signBytes); cursor += signBytes.Length; var lengthBytes = headerBytes.Skip(cursor).Take(intLength).ToArray(); recieveHeader.Length = Util.BytesToInt(lengthBytes); cursor += lengthBytes.Length; var crc32Bytes = headerBytes.Skip(cursor).Take(intLength).ToArray(); recieveHeader.Crc32 = Util.BytesToUInt(crc32Bytes); cursor += crc32Bytes.Length; var rmsg = Encoding.UTF8.GetString(messageBytes); var rCrc32 = Crc32Algorithm.Compute(messageBytes, 0, messageBytes.Length); if (rCrc32 == recieveHeader.Crc32) { message = rmsg; } else { throw new Exception("wdnmd"); } return(recieveHeader); }