[Indy] Simplen Webserver erstellen.
-
Guten Tag!
Ich bräuchte eine kleine Anleitung, wie man mit dem BCB 6.0 einen simplen Webserver erstellen kann, der aber ein "home"- Directory besitzt, und von dort aus Dateien auslesen kann.
Vielen Dank
shaftie
-
Hab dank des FAQ Indexes (hab immer nur im FAQ- Forum geschaut) eine Anleitung gefunden... Nur das DocRoot funzt bei mir noch nicht.
hab als DocRoot /www gesetzt, und C:\www auch ausprobiert... Beides funktioniert nicht...
-
"Funktioniert nicht" ist keine ausreichende Fehlermeldung oder Problembeschreibung.
-
Folgende Meldung erscheint:
Debugger Exception Notification: Can not open file C:www
Grüße
shaftie
-
Und das sagt dir nichts? Du solltest zur Laufzeit mal den Wert der HTML-Variable überprüfen.
Laut HTTP-Protokoll wird die Übergabe einer kompletten URL, einschliesslich des Dateinamens erwartet.
Du musst die Anfrage also überprüfen und ggf. selbst entscheiden, ob du z.B. die Standard-Index.html anzeigst oder eine 404-Fehlerseite ausgibst, usw. usf., oder eben die angeforderte Datei.
-
Diese Meldung kommt aber nicht im Browser, sondern der BCB gibt sie aus, wenn der Versuch einer Connection ankommt...
-
Das ist mir klar.
Wie gesagt, sieh dir die HTML-Variable zur Laufzeit an.
-
Du meinst also, dass er z.B. http://localhost/bla.txt verlangt, statt nur http://localhost, oder hab ich dich nu falsch verstanden?
void __fastcall TForm1::IdHTTPServer1CommandGet(TIdPeerThread *AThread, TIdHTTPRequestInfo *ARequestInfo, TIdHTTPResponseInfo *AResponseInfo) { String DocRoot = "C:\\www\\"; //String HTML = ARequestInfo->Document; try { IdHTTPServer1->ServeFile(AThread, AResponseInfo, DocRoot + HTML); } catch (EFOpenError &E) { } }
So sieht das bei mir nu aus.. Trotzdem gibt er auch bei "kompletten" URLs den Fehler aus...
-
shaftie schrieb:
Du meinst also, dass er z.B. http://localhost/bla.txt verlangt, statt nur http://localhost
Genau, denn das ist standardkonform. Über ARequestInfo->Document kannst du prüfen, welche Datei angefordert wurde, wenn da nichts (oder Müll) drinsteht dann musst du (als Programmierer) das abfangen und entsprechend reagieren.
Mit deinem Code-Beispiel kann ich in dem Zusammenhang nichts anfangen, das dürfte dank der auskommentierten Zeile gar nicht kompilieren.
Wenn du eine Anfrage nach http://localhost/bla.txt bekommst dann muss bla.txt natürlich auch im Doc(ument)Root liegen, hier also in c:\www\.
-
Die auskommentierte Zeile war ein versehen, nun geht es aber
Danksehr