Nie ma gwarancji, że FFD9 nie znajdzie się w obrazie jpeg. Najlepszym sposobem znalezienia końca obrazu jpeg jest przeanalizowanie go. Każdy znacznik, z wyjątkiem FFD0 do FFD9 i FF01 (zastrzeżone), następuje bezpośrednio długości specyfikatorem który daje długość tego segmentu znacznika, w tym informacji o długości, ale nie markera. FF00 nie jest znacznikiem, ale dla swoich celów możesz traktować go jako znacznik bez specyfikatora długości.
Specyfikator długości ma długość dwóch bajtów i jest dużym endianem. Więc co można zrobić, to znaleźć na FF, a jeśli następuje bajt nie jest jednym z 0x00, 0x01 lub 0xD0-0xD8, odczytać długość specyfikator i przeskakuje do przodu w strumieniu dopóki długość specifier mówi minus dwa bajty.
Ponadto, każdy znacznik może zostać dopełniony na początku dowolną liczbą FF.
Po przejściu do FFD9 jesteś na końcu strumienia.
Oczywiście można czytać strumień słowo po słowie, szukając FF, jeśli chcesz wydajności, ale to pozostało jako ćwiczenie dla czytelnika. ;-)
"Wysyłanie" za pomocą jakiego protokołu? Czy twój protokół nie wie, kiedy plik kończy się automatycznie? –
Dlaczego wcześniej nie wysłać długości obrazu? – Kornel
Użyj protokołu. –