Если у вас действительно не определен протокол, то все, что вы можете сделать, это принимать группы байтов от клиента по мере их поступления.Без определенного протокола невозможно узнать, что вы получили «все байты», отправленные клиентом, поскольку всегда существует вероятность того, что во время передачи произошел сбой сети между клиентом и вашим сервером, что привело к последней части.потока не поступать на сервер.В этом случае вы получите обычную индикацию окончания потока из сокета TCP (например, recv (), возвращающий 0, или EWOULDBLOCK, если вы используете неблокирующие сокеты), так что вы будете знать, что не собираетесьполучать больше данных от клиента (потому что теперь соединение TCP отключено) ... но это не совсем то же самое, что знать, что вы получили все данные, которые клиент получил для вас.
В зависимости от вашего приложения, это может быть достаточно.Если нет, то вам придется разработать протокол и поверить, что ваши клиенты будут соблюдать правила этого протокола.Хорошим подходом является отправка клиентом заголовка, в котором говорится, сколько байтов он планирует отправить;или отправка какого-либо специального индикатора «Хорошо, это все, что я имел в виду», также возможно (хотя, если вы сделаете это таким образом, вы должны остерегаться ложных срабатываний, если специальный индикатор может случайно появиться внутри самих данных)