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