Entwickler-Ecke
Internet / Netzwerk - TServerSocket - Kommunikation Firefox mit TServerSocket -
anthoney - Sa 03.02.07 15:40
Titel: TServerSocket - Kommunikation Firefox mit TServerSocket -
Ich habe ein kleinen Server geschrieben, der von einem Browser (firefox oder IE) eine Anfrage erhält.
Der Server soll nur eine kurze Nachricht zurückschicken.
Ich verwende dafür die Komponente TServerSocket.
// ====================================================================
Die Komponente ServerSocket1 von TServerSocket wird mit
Port=8002
ServerType=stNonBlocking
erzeugt.
/
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| / ==================================================================== Der folgende Code-Schnipsel macht mir Probleme: var Bfr: array of byte; BufSize: Cardinal;
procedure TForm1.ServerSocket1ClientWrite(Sender: TObject; Socket: TCustomWinSocket);
begin BufSize := Socket.ReceiveLength div SizeOf(Byte);
Bfr := nil; SetLength(Bfr, BufSize); Socket.ReceiveBuf(Pointer(Bfr)^, BufSize);
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var i : integer; begin i := Socket.SendText('Hallo vom Server');
end;
|
Wenn ich meinen Firefox oder Internet-Explorer so einrichte, dass sie nicht direkt auf das Netz zugreifen, sondern auf den Port des hier geschriebenen Servers,
so funktioniert die Methode ServerSocket1ClientWrite ohne Probleme.
Die Methode ServerSocket1ClientRead funktioniert auch, aber nicht sofort.
Erst wenn ich den Server beende, zeigt der Browser den Text "Hallo vom Server" an.
Daher meine Frage: Gibt es so etwas wie Socket.Flush(); damit der Browser den Text sofort anzeigt?
Was nicht funktioniert
Delphi-Quelltext
1: 2:
| Socket.Close; ServerSocket1.Listen(); |
Danke lg
anthoney
Moderiert von
matze: Delphi-Tags hinzugefügt
jakobwenzel - Sa 03.02.07 16:28
Die Sockets sind darauf ausgelegt, die Verbindung offen zu halten, zb. für Netzwerkspiele. Bei HTTP wird die Verbindung aber gleich wieder getrennt, was du dann auch machen musst.
PS: Spricht irgendwas gegen idHTTPServer? :wink:
anthoney - Sa 03.02.07 18:06
Danke für die Antwort.
Doch wie gesagt
//
Socket.Close;
//
funktioniert nicht.
Wie kann ich da die Verbindung beenden, und das weiterhin eine neue Verbindung zum Server aufgebaut werden kann. Denn wenn ich close verwende, komme ich nicht zum Ziel und niemand kann mehr auf den Server zugreifen.
"idHTTPServer" ist keine Standardkomponente oder?
Ich kenne sie jedenfalls nicht.
Wo kann ich mehr über sie erfahren?
Ich will jedoch möglich nicht auf fertige http-Komponenten sondern das ganze nativ durchführen. Zum Teil um etwas Erfahrung zu sammeln. Eventuell auch für mein besonderes Problem.
LG anthoney
matze - Sa 03.02.07 18:21
der idHTTPServer ist eine Komponente aus den [url=
http://www.indyproject.org]Indys[/url], die dir einen kompletten HTTP server mit seeeeehr vielen Kontroll- und Einstellmöglichkeiten bietet.
Also ich würde dir die auch empfehlen.
Narses - Mo 05.02.07 01:14
Moin!
anthoney hat folgendes geschrieben: |
funktioniert nicht. |
Doch, das funktioniert schon ganz gut, allerdings nicht auf die Weise, wie du mit den Sockets arbeitest 8) ;) Bist du sicher, dass du die Funktionsweise dieser Komponenten ausreichend verstanden hast? :gruebel: :mahn:
anthoney hat folgendes geschrieben: |
| Wie kann ich da die Verbindung beenden, und das weiterhin eine neue Verbindung zum Server aufgebaut werden kann. Denn wenn ich close verwende, komme ich nicht zum Ziel und niemand kann mehr auf den Server zugreifen. |
Weil du vermutlich den listening Socket schließt, statt die aktuelle Client-Verbindung. ;)
anthoney hat folgendes geschrieben: |
| Ich will jedoch möglich nicht auf fertige http-Komponenten sondern das ganze nativ durchführen. |
Warum auch immer du das möchstest, aber bei deinen bisherigen Code-Beispielen zu den Sockets würde ich dir auch ganz dringend zum IdHttp raten. :D Leider ist die Aufgabe, einen HTTP-Server per Sockets zu realisieren, alles andere als "leicht" zu nennen... :| und non-blocking sowieso... :( (wie schon im
anderen Thread [
http://www.delphi-forum.de/viewtopic.php?t=69446] gesagt, möglich - aber sicher nicht bei deinem Wissensstand in Sachen Sockets... :( nicht persönlich nehmen, bitte. ;)).
cu
Narses
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!