TCP получает данные повреждены - PullRequest
0 голосов
/ 10 декабря 2018

Ситуация такова: у меня TCP-сервер написан на c, TCP-клиент (Android-приложение) на Java, используя google protobuf для сериализации / десериализации;и сервер отправляет данные клиенту в секунду для отображения.данные содержат (для простых) attribute1 / attribute2 / attribute3, и клиент должен отобразить точные данные с помощью attribute1 / attribute2 / attribute3.размер данных превышает 1480 байт и меняется каждую секунду.

проблема в том, что TCP-клиент не будет иногда получать точные данные для отображения;например, attribute3 - это строка, скажем «2018-12-10 12:00:00», но TCP-клиент отображает только «2018-12 -».

пробовал: tcp сервер и клиент не могутобещать размер данных, потому что данные с сервера меняются каждую секунду;и это, кажется, не обеспечивает длину сообщения google protobuf.так как клиент tcp может получить точные данные для отображения?спасибо за вашу помощь!

1 Ответ

0 голосов
/ 10 декабря 2018

Вам необходимо выбрать формат сообщения для использования через соединение TCP и внедрить этот формат сообщения в своем коде.TCP не является протоколом сообщений, а буферы протокола генерируют сообщения.

Распространенным методом является добавление к каждому сообщению четырехбайтового целого числа, указывающего размер сообщения в сетевом байтовом порядке.Затем получатель может прочитать эти четыре байта и узнать, сколько байтов составляет сообщение буфера протокола.

Подробнее см. здесь .

...