Ответ: расширяемый Stream
Ты же посылаешь сообщения (пакеты), то есть на сервере надо просто разделить буффер (обычный массив, в который записываются принятые байты) на пакеты (сообщения).
На примере: структура пакета - первые 2 байта обозначают длину пакета, а дальше идут данные, тогда просто создаешь цикл в котором читаешь 2 байта узнаешь длину пакета, и "пытаешься" прочесть данные, если данные пришли (полностью), тогда считываешь, удаляешь. Если не пришли (пришли не полностью), тогда оставляешь до следующего recv().
__________________
|