Отметить можно маркерами (границами), по принципу EOF, но тогда побайтно читать придется пока цикл не достигнет маркера, лучше иначе - в заголовке передавать размер файла в байтах, а затем сам файл, но тогда надо позаботиться о безопасности так как в интернете существуют боты и их "визит" на сервер гораздо вероятнее чем думается, зачем "приходить" на случайный IP и случайный вовсе не 80-ый порт остается загадкой, но у ботов своя логика, значит надо защититься от "левых" пакетов у которых вместо заголовка будут произвольные байты и их чтение "забьет" ОЗУ на сервере и в любом случае сервер вылетит с ошибкой.
Можете посмотреть реализации HTTP, FTP.