Я недавно пытался задать похожий вопрос , однако после нескольких ответов я понял, что задавать неправильные вопросы не было.
Существует ли руководство или общепринятая практика генерации и анализа сетевых пакетов на основе существующего протокола, такого как SMPP (протокол одноранговых коротких сообщений [используется для SMS-сообщений]) или различных протоколов чата, таких как HOTLINE или IRC с C #.
В одном из ответов упоминаются Google Буферы протокола и .NET версия . Посмотрев на это, я понял, что сериализация чрезвычайно полезна, если вы контролируете оба конца (клиента и сервера). Где я буду следовать спецификации протокола.
Генерация
В прошлом я создал класс или структуру со свойствами, которые являются частью сетевого пакета / протокола:
// PSEUDO CODE
class NetworkObject
{
private int length;
private string data;
// ...
public byte[] GetBytes()
{
// Convert string and int to byte array
return byte array;
}
}
В классе есть метод byte [] GetBytes () , который я вызываю, как только я установил соответствующие свойства. Я беру этот байтовый массив и отправляю его по сети. В моем предыдущем вопросе один из ответов предложил сохранить данные в потоке памяти или в потоковом потоке, что кажется лучшей идеей.
Кажется, что мой метод массива байтов, вероятно, медленнее, чем передача сетевого потока методу, который записывает данные пакета в соответствии со свойствами класса непосредственно в поток. Это то, что я, вероятно, сделаю, если я не пропущу что-то действительно большое здесь.
Синтаксический
При синтаксическом анализе я использую различные операторы case, чтобы пройтись по различным PDU и генерировать NetworkObject с соответствующими заполненными свойствами, и делаю с ним, как я считаю нужным.