UdpClient C# Отправка пакетов по определенному протоколу
У меня возникла проблема с кодированием пакетов по определенному протоколу. Мне нужно отправить массив байтов. Но проблема в том, что этот пакет должен иметь определенную структуру. Структура заголовка на картинке:
Обратите внимание на длину элемента "Резерв" (6 бит). Как мне закодировать такой заголовок, используя массив байтов (byte[])?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Возмите перечисление
[Flags]
public enum HeaderFlags : byte
{
R = 2,
C = 1,
None = 0
}
Заголовок может выглядеть примерно так
public struct Header
{
public ushort Length;
public byte Version;
public byte TTL;
public ushort SN;
public byte Type;
public HeaderFlags Options;
}
Header header = new();
header.Options = HeaderFlags.R | HeaderFlags.C;
Сериализация может выглядеть так
byte[] headerBytes = new byte[8];
BinaryPrimitives.WriteUInt16LittleEndian(headerBytes, header.Length);
headerBytes[2] = header.Version;
headerBytes[3] = header.TTL;
BinaryPrimitives.WriteUInt16LittleEndian(headerBytes.AsSpan()[4..], header.SN);
headerBytes[6] = header.Type;
headerBytes[7] = (byte)header.Options;