Если другой конец грациозно завершает работу сокета, вызов приема возвратит ноль после получения всех данных, чтобы указать, что достигнут конец потока. Однако это условие окончания потока является постоянным и не позволяет другому концу отправлять больше данных на сокет.
TCP / IP - это потоковый протокол, не имеющий представления о том, насколько велико логическое / специфичное для приложения сообщение. Если вы не используете указание конца потока, упомянутое выше, вам нужно встроить свои собственные индикаторы в отправляемые вами данные. Это иногда упоминается как "создание". Например, отправитель может поставить перед данными префикс с количеством следующих байтов. Получатель сначала прочтет этот префикс и проверит, что это разумное число. Затем получатель вызывает прием в цикле, пока не будет получено столько байтов.
Хорошая информация о кадрировании доступна здесь: http://nitoprograms.blogspot.com/2009/04/message-framing.html