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