Ich muss einen einfachen HTTP-Server in C erstellen. Irgendwelche Anleitungen? Links? Proben?
Ich muss einen einfachen HTTP-Server in C erstellen. Irgendwelche Anleitungen? Links? Proben?
Antworten:
Ich schlage vor, Sie werfen einen Blick auf winzige httpd . Wenn Sie es von Grund auf neu schreiben möchten, sollten Sie RFC 2616 gründlich lesen . Verwenden Sie BSD-Sockets , um auf einer sehr niedrigen Ebene auf das Netzwerk zuzugreifen.
tiny httpd
ist auch auf Github hier: github.com/larryhe/tinyhttpd
Ich würde empfehlen, dass Sie sich Folgendes ansehen: Eine praktische Anleitung zum Schreiben von Clients und Servern
Was Sie in inkrementellen Schritten implementieren müssen, ist:
Ein HTTP-Server ist konzeptionell einfach:
Es wird schwieriger, je nachdem, wie viel HTTP Sie unterstützen möchten - POST ist etwas komplizierter, Skripte, die Bearbeitung mehrerer Anforderungen usw.
Aber die Basis ist sehr einfach.
Mungo (ehemals einfacher HTTP-Daemon) ist ziemlich gut. Insbesondere kann es eingebettet und unter Windows, Windows CE und UNIX kompiliert werden.
Öffnen Sie einen TCP-Socket an Port 80, warten Sie auf neue Verbindungen und implementieren Sie diese . Abhängig von Ihren Zwecken können Sie fast alles ignorieren. Im einfachsten Fall können Sie für jede Anfrage dieselbe Antwort senden, bei der lediglich Text in den Socket geschrieben wird.
Schauen Sie sich nweb (Nigels Webserver) an, "einen winzigen, sicheren Webserver [...] mit nur 200 Zeilen C-Quellcode":
https://drive.google.com/file/d/0B3msld7qnNOhN1NXaFIwSFU2Mjg/view?usp=sharing
http://www.ibm.com/developerworks/systems/library/es-nweb/
Der Artikel enthält Pseudocode, Erklärungen und Kommentare.
BEARBEITEN: IBMs Link ist gestorben. Ich habe ein PDF der Webseite in Google Drive gespeichert. Hier ist der Code-Download:
https://drive.google.com/file/d/0B3msld7qnNOhSGZGdDJJMmY0VHM/view?usp=sharing
@ ankushagarwal hat einige Änderungen vorgenommen und seine Version auf GitHub hochgeladen: https://github.com/ankushagarwal/nweb
Ich habe meine eigenen geschrieben, die Sie verwenden können. Dieser funktioniert mit SQLite, ist threadsicher und ist in C ++ für UNIX.
Sie sollten in der Lage sein, es auseinander zu nehmen und den C-kompatiblen Code zu verwenden.
Die HTTP-Spezifikation und Firebug waren für mich sehr nützlich, als ich sie für meine Hausaufgaben machen musste.
Viel Glück mit dir. :) :)
Ich würde vorschlagen, die Quelle zu etwas wie lighthttpd zu betrachten .
http://www.manning.com/hethmon/ - "Illustrated Guide to HTTP von Paul S. Hethmon" von Manning ist ein sehr gutes Buch zum Erlernen des HTTP-Protokolls und wird für jemanden, der es implementiert / erweitert, sehr nützlich sein.
Es gibt ein Duplikat mit mehr Antworten .
Ein noch nicht genannter Kandidat ist spserver .