определить тип файла c

0

Я пытаюсь написать клиент/серверную программу в C++ с Visual Studio 2008. До сих пор проект запускает следующее:

Запустите веб-сервер в командной строке cmd - webserver 8080 открыть веб-браузер - localhost 8080 открыть локальный файл html - localhost: 8080/demo.html

Но теперь... пусть говорят, что клиент запрашивает файл gif, тогда сервер должен отправить gif файл. клиентский запрос для txt файла, тогда сервер должен отправить файл.txt. Аналогично для файлов.html и.xbm.

Я не знаю, как это сделать. Любая помощь очень ценится.

Теги:
webserver

2 ответа

0

хорошо, потому что мы в одном классе, я дам вам подсказку :)

В части заголовка поместите некоторые 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 файлом :) У меня он уже работает :) Собираюсь отправить сейчас. Не забудьте проголосовать за меня :)

  • 0
    Все еще не может заставить это работать .. выдает ошибку C2065: 'type': необъявленный идентификатор.
  • 0
    undeclared identifier означает, что вы не объявили переменную. Это должно быть объявлено в начале.
0

В системах UNIX вы должны использовать команду file: он использует набор известных "магических чисел", которые используются для идентификации разных типов файлов. и несколько эвристик для решения остальных файлов. В большинстве форматов файлов встроен определенный идентификатор, часто в первые пару байтов. Особенно текстовые файлы обычно не имеют волшебного номера, но вместо этого используют только печатные символы (при популярности UTF8 и UTF16, классификация текстовых файлов стала немного сложнее).

После определения типа файла вы просто установите ghe соответствующие HTTP-заголовки.

  • 0
    Извините забыл упомянуть - я пытаюсь это на Win 8.
  • 0
    @ user1340561: Я понял, что вы используете Windows, поскольку вы используете VS 2008. Однако этот подход работает и в Windows, хотя я не думаю, что что-то вроде file сразу поставляется с Windows, но должно быть частью, например от cygwin.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню