Чтение изображения с помощью fread добавляет \0 в буфер

У меня есть клиент и сервер в HTTP, с клиентом я отправляю файл на сервер, и сервер отправляет файл обратно клиенту.

У меня нет проблем с отправкой файлов на сервер, но когда сервер отправляет обратно большие файлы, которые необходимо отправить несколькими частями (например, изображения), каждый раз, когда я fread в мой буфер, буфер получает \0 где-то, поэтому клиент получает поврежденный файл.

Вот код, который отправляет файлы обратно клиенту

            FILE* readFile = fopen(fileName, "rb");
            char buf[BUFFLEN];
            size_t readlen = 1;

            while (readlen != 0)
            {
                readlen = fread(buf, sizeof(char), BUFFLEN, readFile);
                write(socket, buf, readlen);
            }

Что я упустил? Это работает с небольшими текстовыми файлами.

1 ответ

Решение

Задача решена:

Один из ответов заставил меня осознать свою ошибку. \0 НЕ неправильный характер. То, что было неправильно, было способом моего клиента получить изображение. Каждый раз, когда клиент получал буфер, он проверял полученный strlen, но strlen(buffer) Останавливается, когда он сталкивается с \0, Так что я изменил количество записанных байтов из strlen(buffer) к фактическому количеству байтов, прочитанных на сокете клиентом.

Спасибо Iharob Al Asimi за замечание и всем за вашу помощь.

Другие вопросы по тегам