Hiho
DP'ler,
Ich habe vor einen kleinen Webserver zu schreiben der einfach auf Anfrage eines Browsers eine sich ständig ändernde Webseite ausgibt.
Ich dachte mir also ich nehme mir die ServerSocket Komponente oder alternativ die TcpServer Komponente und reagiere einfach immer wenn ein Browser eine Anfrage sendet damit drauf das ich dem Browser simpel mit SendText den Quellcode der Seite rüberschiebe.
Das funktioniert aber mit beiden Komponenten nur halb.
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var i:Integer;
begin
s:=Socket.ReceiveText;
Memo1.Lines.Add(s);
For i:=0
to ServerSocket1.Socket.ActiveConnections -1
do begin
ServerSocket1.Socket.Connections[i].SendText('
<html><head><meta http-equiv="refresh" content="1; URL=/"></head><body>It Works? Or? '
+IntToStr(Random(10000)) +'
</body></html>');
//ServerSocket1.Active:=False;
//ServerSocket1.Active:=True;
end;
end;
Das war der sehr unsaubere Code um auf die Anfrage des Browsers mittels ServerSocket zu reagieren. Wie ihr sehr es soll nicht schön sein sondern einfach nur funktionieren
. Problem dabei, der Browser würde unendlich lang die Webseite laden wenn ich nicht mittels ServerSocket1.Active die Verbindung kurz unterbrechen würde. Wenn ich das tue wird die Webseite dann auch Problemlos im Browser angezeigt. Das ist aber selbst mir zu unsauber
- sobald mehrere Leute versuchen die Seite aufzurufen bekomme ich Probleme, da fliegen mir teils Exceptions um die Ohren und die Browser zeigen immerwieder an das die Verbindung abgebrochen/zurückgesetzt ect. ist.
Beim TcpServer habe ich es ähnlich versucht...
- empfangen der Browser Anfrage
- die in Memofeld schreiben
- *Browser das Stückchen rohes Fleisch hinwerf* (Per SendText den Quellcode rübersenden)
Also imprinzip wie oben. Problem ist hier das der Browser nur bei jedem 5ten Versuch die Webseite anzeigt - dann auch korrekt. Bei den anderen 4 Versuchen kommt ein "Verbindung zurückgesetzt". Beim TcpServer habe ich übrigens nicht das Problem mit dem "unendlichen Laden" der Seite, wenn die Seite angezeigt wird dann richtig.
Wie bekomme ich das ganze also zuverlässiger hin? Wo hängts? Weis da jemand Rat