Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }