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