Честно говоря, я думаю, что будет трудно заставить сторону TCP работать так, как она решает этот вопрос, и, поскольку TCP предназначен для того, чтобы выполнять то, что вы просите, я лично возьму на себя "Подход «Правильный инструмент, для правильной работы».
Тем не менее ....
Если вам действительно нужно использовать UDP, то вы можете забыть о добавлении чего-либо на уровне протокола, нижележащем транспортном уровнепросто проигнорирую это.
Вместо этого вам придется разработать собственный протокол уровня байтов (почти возвращаясь ко временам RS232 и последовательной связи ...)
Вам понадобится вашеданные, и это нужно каким-то образом обернуть, скажем, байт, определяющий начало пакета, затем, может быть, данные или некоторые флаги и т. д.
Я бы посмотрел на структуры данных, такие как TLV(Используется многими смарт-картами) - TLV обозначает Tag-Length-Value, поэтому может представлять что-то вроде:
0x10 0x04 0x01 0x02 0x03 0x04
Где код команды 0x10 может означать тикер обновления, 0x04 - 4 байтаследующие данные ... затем 4 байта данных.
Что касается флагов и проверки сумм, то флаги лёгкие - это просто, вы можете получить 8 из них в байте и просто перевернуть их, используя маски AND.
0x00 AND 0x01 = 0x01
0x01 AND 0x80 = 0x81
Проверить суммы немного сложнее, но это действительно зависит от того, какой уровень точности вам нужен.По сути, контрольная сумма - это своего рода математический алгоритм, который использует содержимое ваших данных для создания магического числа, которое можно легко вычислить на приемной стороне.
Это может быть что-то простое, например сложение всех значений вместезатем добавьте результат к какому-нибудь магическому номеру, затем добавьте его в конец пакета перед отправкой байтов.
Затем сделайте то же самое на приемном конце и сравните результаты.
Конечноесли вы действительно не хотите идти по этому пути обертывания, создания протоколов и всего этого джаза сами, то вы можете извлечь урок из плохих старых дней последовательных коммуникаций.
Есть еще много открытыхисходные реализации таких вещей, как XModem, ZModem, Kermit, YModem и многих других, все еще плавающих вокруг, так как большинство из них могут (и делали) работать с потоками байтов, тогда не должно быть слишком сложно заставить их работать с потоком байтов поверхUDP вместо байтового потока через последовательный порт.