Проектирование простого сетевого пакета - PullRequest
2 голосов
/ 28 октября 2009

Я изучаю программирование сокетов (на python), и мне было интересно, каков наилучший / типичный способ инкапсуляции данных? Мои пакеты будут использоваться для выдачи команд запуска, остановки, настройки и т. Д. На принимающей стороне. Полезно ли использовать JSON или просто текст?

Ответы [ 4 ]

1 голос
/ 28 октября 2009

Я предлагаю начать с простого текста - его легче отлаживать. Формат вашего текста зависит от того, что вы делаете, сколько команд, аргументов и т. Д. Вы уточнили, как будут выглядеть ваши команды? Как только вы выясните, как это выглядит, он, скорее всего, предложит формат самостоятельно.

Используете ли вы TCP или UDP? TCP - это просто, так как это поток, но если вы используете UDP, имейте в виду максимальный размер пакетов UDP и, следовательно, насколько велико ваше сообщение.

1 голос
/ 28 октября 2009

Я предлагаю вам использовать фиксированный или в основном фиксированный формат, поскольку это облегчает задачу.
Затем, используя такие функции, как struct.Struct стандартной библиотеки, с ее методами pack () и umpack () или, возможно, несколько более функциональные пакеты, такие как Construct , у вас должна быть большая часть работы по синтаксическому анализу, сделанной для вас; -)

0 голосов
/ 28 октября 2009

Посмотрите, как scapy (потрясающая библиотека манипулирования пакетами Python) реализует это. Похоже, у этого есть несколько полей .

0 голосов
/ 28 октября 2009

Если вы разрабатываете что-то в качестве учебного упражнения, вам лучше всего использовать структурированный текст (т.е. читабельный и читабельный).

Примером может быть использование фиксированного числа полей на команду, текстовых полей фиксированной ширины и / или легко разбираемых разделителей полей.

Обычно текст менее эффективен с точки зрения размера пакета, но у него есть то преимущество, что вы можете легко его прочитать, если вы делаете захват пакета (например, с помощью wireshark) или если вы хотите использовать telnet для имитации клиента.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...