Я пытаюсь написать клиент/серверную программу в C++ с Visual Studio 2008. До сих пор проект запускает следующее:
Запустите веб-сервер в командной строке cmd - webserver 8080 открыть веб-браузер - localhost 8080 открыть локальный файл html - localhost: 8080/demo.html
Но теперь... пусть говорят, что клиент запрашивает файл gif, тогда сервер должен отправить gif файл. клиентский запрос для txt файла, тогда сервер должен отправить файл.txt. Аналогично для файлов.html и.xbm.
Я не знаю, как это сделать. Любая помощь очень ценится.
хорошо, потому что мы в одном классе, я дам вам подсказку :)
В части заголовка поместите некоторые if-else следующим образом:
if(strcmp(type,"html")==0){
(void) sprintf(buff,"Content-Type:text/html\r\n");
(void) send(conn,buff,strlen(buff),0);
}
else if(strcmp(type,"gif")==0){
(void) sprintf(buff,"Content-Type:image/gif\r\n");
(void) send(conn,buff,strlen(buff),0);
}
Понял? И, кстати, вам нужно получить расширение (проверить путь с endsWith
функции endsWith
), сравнить расширение с типом файла, а затем выдать правильный заголовок. Протестируйте его с gif файлом :) У меня он уже работает :) Собираюсь отправить сейчас. Не забудьте проголосовать за меня :)
В системах UNIX вы должны использовать команду file
: он использует набор известных "магических чисел", которые используются для идентификации разных типов файлов. и несколько эвристик для решения остальных файлов. В большинстве форматов файлов встроен определенный идентификатор, часто в первые пару байтов. Особенно текстовые файлы обычно не имеют волшебного номера, но вместо этого используют только печатные символы (при популярности UTF8 и UTF16, классификация текстовых файлов стала немного сложнее).
После определения типа файла вы просто установите ghe соответствующие HTTP-заголовки.
file
сразу поставляется с Windows, но должно быть частью, например от cygwin.
undeclared identifier
означает, что вы не объявили переменную. Это должно быть объявлено в начале.