Мне нужно создать простой HTTP-сервер на C. Есть какие-нибудь рекомендации? Ссылки? Образцы?
Мне нужно создать простой HTTP-сервер на C. Есть какие-нибудь рекомендации? Ссылки? Образцы?
Ответы:
Предлагаю вам взглянуть на крошечный httpd . Если вы хотите написать его с нуля, то вы хотите , чтобы тщательно прочитать RFC 2616 . Используйте сокеты BSD для доступа к сети на действительно низком уровне.
tiny httpd
также на github здесь: github.com/larryhe/tinyhttpd
Я бы порекомендовал вам взглянуть на: Практическое руководство по написанию клиентов и серверов.
Что вам нужно реализовать поэтапно:
HTTP-сервер концептуально прост:
Это становится сложнее в зависимости от того, сколько HTTP вы хотите поддерживать - POST немного сложнее, скрипты, обработка нескольких запросов и т. Д.
Но база очень простая.
Mongoose (ранее Simple HTTP Daemon) довольно хорош. В частности, он встраивается и компилируется под Windows, Windows CE и UNIX.
Откройте TCP-сокет на порту 80, начните прослушивать новые соединения, реализуйте это . В зависимости от ваших целей вы можете игнорировать практически все. В самом простом случае вы можете отправлять один и тот же ответ на каждый запрос, который просто включает запись текста в сокет.
Посмотрите на nweb (веб-сервер Найджела), «крошечный безопасный веб-сервер [...] всего с 200 строками исходного кода C»:
https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing
http://www.ibm.com/developerworks/systems/library/es-nweb/
Статья содержит псевдокод, пояснения и комментарии.
РЕДАКТИРОВАТЬ: ссылка IBM умерла. Я сохранил PDF-файл веб-страницы на Google Диске. Вот код для скачивания:
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ ankushagarwal внес несколько изменений и загрузил свою версию на GitHub: https://github.com/ankushagarwal/nweb
Я написал свой собственный, который вы можете использовать. Этот работает с sqlite, потокобезопасен и написан на C ++ для UNIX.
Вы должны уметь разобрать его и использовать код, совместимый с C.
Я бы посоветовал поискать в источнике что-нибудь вроде lighthttpd .
http://www.manning.com/hethmon/ - «Иллюстрированное руководство по HTTP от Пола С. Хетмона» от Мэннинга - очень хорошая книга для изучения протокола HTTP, и она будет очень полезна тем, кто его реализует / расширяет.
Есть дубликат с другими ответами .
Еще не упомянутый кандидат - это spserver .