Я создаю библиотеку, которая поддерживает связь по сети между приложениями в c ++.Во время отладки я обнаружил, что некоторая информация, которую я получаю из сокета, кажется неполной.Крайне важно, чтобы эта информация была полной, потому что, если я расшифрую ее с помощью библиотеки буферов протокола, мне потребуется полное сообщение.
Это явление не является постоянным.Иногда я получаю все данные из сокета, иногда нет.Процедура тестирования выглядит следующим образом: запустить сервер, запустить клиент несколько раз.То, что я получаю, это вывод из функции receive()
, который показывает, как меняются значения некоторых переменных.Одним из них является размер буфера, который я использую для хранения данных.Этот размер говорит мне, сколько данных находится в буфере.Клиенты отправляют два сообщения размером 3 (байты) - в этом конкретном тесте.Я ожидаю, что размер буфера будет кратен 3. Однако иногда размер равен 4 !.Это означает, что программа прочитала одно полное сообщение и 1/3 второго сообщения.Я не понимаю, почему я всегда получаю первое сообщение завершенным.В противном случае, protobuf завершит работу программы.
Я думал, что tcp / ip должен позаботиться о том, чтобы я получил полные сообщения.Моя проблема в том, что я не знаю размер заранее.Я ожидаю получить полное сообщение, чтобы я мог правильно его интерпретировать.