Самый простой способ отправки коротких сообщений с использованием TCP / IP - PullRequest
6 голосов
/ 01 февраля 2011

Я обычно использую проводные соединения последовательного порта между встроенными устройствами для пользовательских протоколов команд / ответов / состояний.В этом приложении я планирую использовать стек микрочипа TCP / IP и модуль Wi-Fi без ОС для обмена короткими (<= 100 байт) командами и ответами.Стек настроен и работает на наборе для микросхемы Ethernet, и я могу проверить его с рабочего стола (пока не пользуюсь модулем Wi-Fi).Я полагаю, я мог бы взломать ping (микрочип предоставляет исходный код c для стека) и добавить нужные мне сообщения, но я ищу правильный / самый простой / лучший метод. </p>

Ответы [ 2 ]

6 голосов
/ 01 февраля 2011

Правильный / самый простой / лучший не обязательно одно и то же.Но на вашем месте я бы подумал об использовании UDP вместо TCP.

UDP - это протокол дейтаграмм;TCP ориентирован на поток и имеет гораздо больше накладных расходов (и преимущества, которые приходят вместе с накладными расходами).Но UDP более точно соответствует текущему байтово-ориентированному (пакетно-ориентированному) подходу последовательного порта, который вы используете сегодня.

Скорее всего, у вас есть какой-то протокол более высокого уровня, который получает / buffers / checkums / delimits / анализирует поток данныхвы получаете от UART.Если вы используете UDP, вы можете хорошо имитировать это с помощью простой и легкой реализации UDP.С UDP вы просто отбрасываете байты (пакеты) и скрещиваете пальцы, которые они получили на другом конце (во многом как последовательный).

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

Также не забывайте, что TCP используется в качестве основы Интернета;некоторые пакеты проходят через дюжину или более переходов (маршрутизаторов / шлюзов) по пути к конечному пункту назначения.Множество мест для пакетов, которые нужно отбрасывать, поэтому TCP прозрачно обрабатывает много грязных деталей.Я предполагаю, что в вашей системе / ситуации мы говорим о локальной сети (все на одном и том же проводе), и передача будет довольно надежной ... таким образом, издержки TCP не нужны.

Тамвремена, когда преимущества TCP оправдывают накладные расходы, но из того, что вы написали, я думаю, вы должны рассмотреть базовую настройку дейтаграммы UDP.Просто Google "простой пример UDP", и вы увидите основную структуру.Например, - это простой пример клиент / сервер UDP , использующий всего 43 строки (сервер) и 30 строк (клиент).

2 голосов
/ 01 февраля 2011

Если у вас есть стек TCP / IP, он должен предоставлять функцию send () для отправки некоторых сообщений данных.

Некоторые небольшие устройства поставляются только с простой реализацией UDP / IP, поскольку это намного проще. Если вам не нужен контроль последовательности и надежность TCP, вы можете использовать UDP для отправки коротких сообщений. Гораздо лучше взломать ICMP-сообщения.

Но если вам нужен комфорт и надежность протокола потока TCP, не изобретайте его заново на основе IUDP. Обычно вы не можете сделать это лучше, эффективнее и с меньшими усилиями.

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