Bueno, no hay garantía de que no encontrará FFD9 dentro de una imagen JPEG. La mejor forma de encontrar el final de una imagen jpeg es analizarla. Cada marcador, excepto FFD0 a FFD9 y FF01 (reservado), es seguido inmediatamente por un especificador de longitud que le dará la longitud de ese segmento marcador, incluyendo el especificador de longitud pero no el marcador. FF00 no es un marcador, pero para sus propósitos puede tratarlo como marcador sin un especificador de longitud.
El especificador de longitud tiene dos bytes de longitud y es big endian. Entonces lo que harás es buscar FF, y si el siguiente byte no es uno de 0x00, 0x01 o 0xD0-0xD8, lees el especificador de longitud y salta hacia adelante en la secuencia, siempre que el especificador de longitud indique menos dos bytes.
Además, cada marcador se puede rellenar al principio con cualquier cantidad de FF.
Cuando llegue a FFD9, se encontrará al final de la transmisión.
Por supuesto, podría leer la secuencia palabra por palabra, buscando FF si desea rendimiento, pero eso queda como un ejercicio para el lector. ;-)
"Enviando" usando qué protocolo? ¿Su protocolo no sabe cuándo termina un archivo automáticamente? –
¿Por qué no enviar la longitud de la imagen de antemano? – Kornel
Use un protocolo. –