На самом деле вы не хотите использовать маркер 'EOF', если вы намереваетесь отправлять любые двоичные данные через канал. Что произойдет, если ваши двоичные данные содержат эту последовательность байтов? Вы можете «избежать» этого, чтобы предотвратить это, но для этого нужно проверить оба конца, а затем убедиться, что вы также избежали своей escape-последовательности.
Если вы делаете это для какой-то производственной системы, посмотрите вокруг, чтобы увидеть, есть ли сетевой API, который вы можете использовать (что-то вроде FTP, HTTP, SFTP и т. Д.).
Если это школьный или небольшой проект, вам нужно написать протокол связи. Самым простым может быть отправитель для передачи одного двоичного целого числа X (выбрать размер данных и придерживаться его), а затем отправить X байтов двоичных данных. Получатель сначала определяет размер, а затем ожидает только получение такого количества данных. Помните, что если вам нужно отправить больше байтов, чем может передать размер данных X, вам нужно «разделить» данные на части.
Также рассмотрите, что происходит, когда связь теряется в середине передачи. Вы можете установить тайм-ауты для read (), но затем вам нужно будет восстановить их корректно, если связь возобновится сразу после вашего тайм-аута (хотя, в зависимости от системы, обработка всех данных может считаться корректной).