Так что библиотека Mongoose.c довольно проста. Я смог использовать их систему событий, распознавание URL, пример нескольких форм и их систему соединений для создания простой системы входа в систему. Я использовал C ++ minGW, mongoose.c&и мой браузер Теперь я хотел бы реализовать изображения.
Но есть фундаментальная проблема, которую я не могу обойти. Я могу передать либо документ HTML, или изображение. JPG, один, будет отображаться счастливо, как и HTML-документ, пока любой из них один. Мой код относительно прост для HTML:
--pretend std::string HTMLAsString holds all html for the document.
mg_send_data(conn,HTMLAsString,strlen(HTMLAsString));
Когда я хочу отправить изображение, это очень похоже:
while ((fread(buf, 1, sizeof(buf), fp)) > 0) {
mg_send_data(conn,buf,n);
}
mg_send_data(conn,"\r\n",2);
Обе эти работы (я вырезал не относящиеся к делу части, например, как строится строка или как заполнен буфер, достаточно сказать, что эти аспекты работают). У меня может быть форматирование HTML с «отсутствующим пространством изображения», или я могу показать изображение, но без HTML.
Как отправить оба изображения и HTML?
Мистер Андерсен должен получить за это кредит, но я не могу пометить комментарий как ответ, и я хочу закрыть вопрос.
Он был мертв. Сначала клиент-браузер запрашивает страницу. Сервер отправляет это. Когда клиент-браузер получает документ HTML, он затем отправляет запросы на сервер для всех изображений / файлов, как указано в HTML.
Я проверял все запросы от клиентов на адреса, используя conn-> uri. Это позволило мне просто выполнить сравнение строк, чтобы выяснить, с какой страницы я получаю данные. Однако я не проверял никаких ДРУГИХ строк кроме тех, для которых у меня были страницы.
Как только я выложу простую:
станд :: соиЬ << «ЗАПРОШЕННЫЙ:» << conn-> URI << станд :: епсИ;
Я видел запросы как день (в моем случае /image.jpg). Поэтому я собрал вышеупомянутый код изображения вместе с еще одним сравнением строк в функции ответа и presto-magico — изображения, встроенные в HTML, и все они играют хорошо и счастливо.
Спасибо, что ответили на мой вопрос.
Постскриптум Код отправляемого файла немного отличается:
char buf[1024];
int n;
FILE *fp;
fp = fopen(cstrpath, "rb");
if(fp==NULL){printf("ERROR, NO %s found.",cstrpath);}
while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) {
mg_send_data(conn,buf,n);
}
fclose(fp);
mg_send_data(conn,"\r\n",2);