Если использовать чистые сокеты - то тут надо делать свой протокол (не обязательно).
Как пример:
Пакет:
{
4 байта - размер (нужен для определения границ пакета)
2 байта - тип
N байт - тело запроса/ответа
}
тогда вычитав пакет, по типу (2 байта - тип) можно понять что это за пакет и что в нём лежит.
П.С.
Ещё может помочь какой-нибудь специальный символ или комбинация символов, чтобы определять начало пакета