Разбирать двоичные данные для сервера загрузки С#?

StackOverflow https://stackoverflow.com/questions/2238523

  •  19-09-2019
  •  | 
  •  

Вопрос

Мне нужно, чтобы одно из моих приложений C# .NET работало в качестве сервера загрузки.Протокол довольно прост, но я не знаю простого способа создания/анализа двоичных данных.

Есть идеи:alt text
(источник: tcpipguide.com)

Это было полезно?

Решение

Есть несколько способов сделать это.Возможно, вам удастся поиграть с атрибуты маршалинга например, StructLayout, чтобы упаковать структуру в массив байтов, но это, вероятно, сложно и не стоит затраченных усилий.

Вы можете использовать специализированную структуру, такую ​​​​как Протобуф атрибутировать класс таким образом, чтобы он был сериализован в соответствии с нужной вам структурой.

Но, по моему опыту, самый простой, быстрый и гибкий метод создания такой двоичной структуры — использовать класс MemoryStream для хранения буфера данных, а затем использовать Двоичный писатель вокруг него, чтобы фактически записать двоичные данные в поток.

В любом случае полезно иметь работающий сервер, на который можно ссылаться.Используйте такой инструмент, как Wireshark или Microsoft Network Monitor, для захвата проводного трафика, чтобы вы могли сравнить свой проводной формат с примером, который, как известно, работает.

Другие советы

Вы можете создать простую структуру, например:

[Serializable]
[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct MyData {
    public byte OpCode;
    public byte HardwareType;
    public byte HardwareAddressType;
    public byte Hops;

    public int TransactionId;

    public short Seconds;
    public short Flags;

    public int ClientIPAddress;

    public int CurrentIP;

    // all other fields in the required sequence  
}  

и используйте код из этот пост в блоге для сериализации/десериализации пакетов.Но может возникнуть проблема с ServerName и BootFilename из-за различий в кодировке и, возможно, вам нужно указать точное FieldOffset для каждого из полей (см. эта тема на msdn подробности).
Надеюсь, это поможет :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top