Считать данные из сокета в буфер. Когда вы получите завершающий символ, превратите его в сообщение и отправьте его по пути к остальной части вашего кода.
Кроме того, помните, что TCP - это поток , а не пакет. Таким образом, вы никогда не должны предполагать, что вы получите все, отправленное за один раз в одном чтении.
Что касается буферов, вам, вероятно, потребуется только один на каждое соединение. Вероятно, я бы начал с максимального размера, который вы разумно ожидаете получить, и, если он заполняется, создайте новый буфер большего размера - типичная стратегия - удваивать размер, когда у вас заканчивается слишком много отчислений.
Если у вас есть несколько входящих соединений, вы можете захотеть сделать что-то вроде создания пула буферов и просто вернуть «большие» в пул, когда закончите с ними.