В TCP нет такой вещи, как "сообщение".Это потоковый протокол.Конечно, на более низких уровнях он передается в отдельных пакетах, но у вас нет возможности управлять им, и то, что вы видите, может отличаться от этих пакетов.Вы просто читаете столько, сколько доступно в приемном буфере в любой конкретный момент.Вы можете воспринимать ваши сообщения как разбитые, но вы также можете столкнуться с ситуацией, когда несколько сообщений приходят как объединенные в один кусок.
Так что при чтении сообщения вы должны использовать какой-либо разделитель, чтобы выяснить, гдеВаше сообщение заканчивается, или используйте заголовок с длиной сообщения.Если вы отправляете простые строки, кодирование их как UTF-8 и завершение их нулевыми байтами должно работать нормально.Очевидно, для более сложных вещей вам понадобится более сложный подход.