#c #file #http #webserver
Вопрос:
Я работаю на веб-сервере на языке Си и пытаюсь отправить изображение по протоколу http. Я наткнулся на пару сайтов, на которых говорилось, что я могу отправлять двоичные файлы напрямую через http, поэтому я решил это сделать. Итак, теперь я пытаюсь прочитать двоичные данные изображения, но они либо отправляются неправильно, либо я неправильно читаю двоичный файл. вот код для чтения и отправки:
FILE * fpointer = fopen(fileDir, "r");
while (fread(fileLine, sizeof(fileLine), 1, fpointer) != 0) {
if ((write(acceptSock, httpResponse, strlen(httpResponse))) == -1) {
perror("write error1");
}
printf("%s", fileLine);
if ((write(acceptSock, fileLine, strlen(fileLine))) == -1) {
perror("write error2");
}
memset(fileLine, 0, 8);
memset(httpResponse, 0, 1000);
}
fclose(fpointer);
close(acceptSock);
memset(recvLineGET, 0, 60);
memset(fileDir, 0, 255);
и это образец двоичного файла, который читается:
M(???u???g????W???F?ʆ??âSn,?S??O??F?c??S>?9v>nX?G6??6n?
?|{?????l絰?N???ד?ܢ????c^?_?#η??H???9??y?PC?`?N??[?2???8????5)???DZ?mfL
Zٓp???1???d}?
?>?dC??6,?I?$??0 Q#"???S<???i?$?μ??amp;????/??Ȼ2AJc'(`?L D?(?<E?hMD?2?r ???"?7?D?%??c?????A"I?
??p/%?Qe?*E?`Z?dYRamp;?d2Er<`??ڮ
4?3,??,Zh?@f??YYV0??Θ~?=_??sڟ?t:??W?????F_??<7?b??????Z`"J
??5???z<ߧ?S???????E?l?y???]?#???(0N?$q?8L???4.???ʾI?,??Q??8]$?V?^??`??????? '?IQ?]-???bε?K??3?[?? d????8?{?J?D??,D???O??DZ??<
Комментарии:
1. Вы рассматриваете «файловую линию» как массив символов с нулевым завершением. В коде netwotk, особенно при обработке общих двоичных данных, которые вполне могут содержать встроенные нули, лучше полностью избегать strlen и т. Д. В случае успеха функция fread() вернет количество прочитанных байтов. Вы даже не проверяете, было ли открытие файла успешным:(