Правильный / самый простой / лучший не обязательно одно и то же.Но на вашем месте я бы подумал об использовании 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 строк (клиент).