Имхо, лучше адаптируй какой нить протокол обмена типа XModem и т.п. под себя, или же сам придумай алгоритм обмена сообщениями при передаче данных.
Например,
клиент запрашивает какие то данные,
кадром с форматом (в hex):
<старт байт><код запрашиваемых данных><стоп байт>
например: 68 33 16
где:
старт байт = 68h
код = 33h
стоп байт = 16h
сервер,приняв этот пакет, проверяет его на старт, стоп, и на код данных
и если всё правильно, то начинает слать клиенту данные, например в таком виде:
<старт байт><контрольный байт><длина данных><данные><стоп байт>
где
старт байт, стоп байт - аналогично
контрольный байт (в битах) :
бит 7 = 1 - значит этот кадр - начало данных (т.е. первый кадр)
бит 6 = 1 - значит кадр - конец данных (т.е. последний)
если все биты в единице - значит кадр не первый и не последний
биты 5-4 - резерв
биты 3-0 - номер последовательности (номер кадра) от 0 - до 15
Сервер при передаче следующего кадра увеличивает номер кадра на единицу.
Клиент, получив кадр от сервера проверяет его на старт/стоп байты, на биты в контрольном байте и,
если кадр валидный - то извлекает из него пользовательские данные и шлет серверу кадр "положительная квитанция" (ACK)
иначе - шлет NACK
Формат ACK/NACK придумай сам.
Если сервер принял ACK - то он передает следующий кадр, если NACK - то повторяет предыдущий.
Вот, как-то так. Будет сурово и надежно