Я бы подумал о пакетах, типах пакетов, идентификаторах пакетов и хранилищах обработчиков типов пакетов.
Идея состоит в том, чтобы отправлять данные только в виде пакетов. Каждый пакет содержит свой идентификатор (необязательно) и тип в начале (длина также будет полезна). На каждой стороне соединения имеется несколько обработчиков пакетов, каждый из которых обрабатывает пакеты соответствующего типа (читает и интерпретирует). Если вы отправляете длину пакета, вы можете даже пропустить поддерживаемые типы пакетов, допускающие разные версии клиента и сервера.