Язык определения протокола

Какое определение протокола Вы рекомендуете? Я оценил буферы протокола Google, но это не позволяет мне управлять размещением полей в создаваемом пакете. Я предполагаю, что то же верно для Экономии. Мои требования:

  1. укажите местоположение полей в пакете
  2. допускайте битовые поля
  3. условные выражения: флаг (битовое поле) = верный означает, что данные могут появиться в более позднем местоположении в пакете
  4. способность определить структуру пакета путем обращения к другому пакетному определению

Спасибо.

("Разновидность" на SourceForge, используемой для определения MPEG-4, могла бы быть кандидатом, но я ищу что-то, что, кажется, имеет больше сообщества и предпочтительно работает в среде.NET.)

7
задан Anssssss 1 August 2013 в 21:26
поделиться

2 ответа

Я был бы заинтересован по причинам ваших требований. Зачем вам нужно контролировать положение полей? Почему билетные поля важны? Условные условные

Похоже, у вас есть (более или менее) фиксированный формат проволоки, для которого необходимо написать парсер, и в этом случае ни один из существующих форматов популярного протокола / сериализации (Protobufs, roomift, Json, Yaml и т. Д. .) Буду работать для вас.

А несколько неортодоксальный подход - использовать Erlang или Haskell , оба из которых имеют хорошую поддержку разборных бинарных протоколов .

3
ответ дан 7 December 2019 в 05:23
поделиться

Как насчет самого C#?

например

class MySimplePDLData {
  // format: name (or blank if padding), bit length, value (or blank if data),
  // name of presence flag field (or blank if no presence flag), C# type
  // one packet type per string, fields separated by pipes (|)
  string[] pdl = {

// MY-SIMPLE-PDL-START

  ",8,0xf8,|version,8,,Int32|type,8,,Int32|id1,64,,Int64",
  ...

// MY-SIMPLE-PDL-END

  };
}

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

0
ответ дан 7 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: