Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdTCPClient: Eingehende Verbindung (https://www.delphipraxis.net/120612-tidtcpclient-eingehende-verbindung.html)

Xzeer 13. Sep 2008 17:35


TIdTCPClient: Eingehende Verbindung
 
Hallo,

Ich habe eine Frage bezüglich der Indy Komponente TIdTCPClient. Gibt es ein Event, das ausgelöst wird, wenn eine Nachricht vom Server eintrifft. Also der Server hat ja extra das Event OnExecute, aber bei dem Client finde ich das nicht.

Wie kann ich das lösen?

//Edit: Titel geändert

toms 14. Sep 2008 10:02

Re: TIdTCPClient: Eingehende Verbindung
 
Hallo

Erstelle einen Timer und rufe in einem separaten Thread ReadBuffer() auf.
Ein Beispiel eines "Lister Threads" findest du hier (TTcpListenerThread, Remy Lebeau (TeamB))

s.h.a.r.k 14. Sep 2008 10:53

Re: TIdTCPClient: Eingehende Verbindung
 
also ich hab mir das so gemacht: ich habe ein object von typ TIdTCPClient abgeleitet und darin ein object, welches von einer thread-klasse abgeleitet ist, instanziiert. bei der onexecute-methode des thread-objects habe ich dann den IOHandler des TIdTCPClient-Object angesprochen und geschaut, ob daten vorhanden sind. das kannst du so abfragen
Delphi-Quellcode:
var
  cmd : String;
{ ... }
// Aktuellen Puffer lesen
cmd := tcpClient.IOHandler.Readln();
// Prüfen, ob Daten angekommen sind
if (cmd <> '') then
begin

  { Hier musst du noch auf die eingehenden Daten reagieren. }

end;
auf die eingehenden daten reagiere ich wie folgt. ich leite diese eben an die nächst "höhere" instanz weiter, bei der eben eine entsprechende methode definiert sein muss.
Delphi-Quellcode:
TOnRecieve = procedure(aStr: String) of object;
TReadThread = class(TThread)
private
  { ...}
  FOnRecieve : TOnRecieve;
protexted
  procedure Execute(); override;
public
  { ... }
  property OnRecieve : TOnRecieve read FOnRecieve write FOnRecieve;
end;

{ WICHTIG: Anpassen der OnExecute }
proceudre TReadThread.Execute();
var
  cmd : String;
begin

  { ... }
  // Aktuellen Puffer lesen
  cmd := tcpClient.IOHandler.Readln();
  // Prüfen, ob Daten angekommen sind
  if (cmd <> '') then
  begin
    // Eingehende Daten weiterleiten
    if (Assigned(FOnRecieve)) then
      FOnRecieve(cmd);
  end;

  { ... }
end;
vielleicht hilft dir das ja ein bisschen ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz