// private method // create packet include header private byte[] CreatePacketStream <T, U>(Packet <T, U> packet) { // data iniialize byte[] packetData = packet.GetPacketData(); PacketHeader header = new PacketHeader(); HeaderSerializer serializer = new HeaderSerializer(); // set header data header.length = (short)packetData.Length; header.id = (byte)packet.GetPacketID(); byte[] headerData = null; try { serializer.Serialize(header); } catch { } headerData = serializer.GetSerializeData(); // header / packet data combine byte[] data = new byte[headerData.Length + packetData.Length]; int headerSize = Marshal.SizeOf(header.id) + Marshal.SizeOf(header.length); Buffer.BlockCopy(headerData, 0, data, 0, headerSize); Buffer.BlockCopy(packetData, 0, data, headerSize, packetData.Length); return(data); }