AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdTCPClient: Eingehende Verbindung
Thema durchsuchen
Ansicht
Themen-Optionen

TIdTCPClient: Eingehende Verbindung

Ein Thema von Xzeer · begonnen am 13. Sep 2008 · letzter Beitrag vom 14. Sep 2008
Antwort Antwort
Benutzerbild von Xzeer
Xzeer

Registriert seit: 6. Jul 2007
106 Beiträge
 
#1

TIdTCPClient: Eingehende Verbindung

  Alt 13. Sep 2008, 18:35
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
Marvin
Xzeer
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: TIdTCPClient: Eingehende Verbindung

  Alt 14. Sep 2008, 11:02
Hallo

Erstelle einen Timer und rufe in einem separaten Thread ReadBuffer() auf.
Ein Beispiel eines "Lister Threads" findest du hier (TTcpListenerThread, Remy Lebeau (TeamB))
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: TIdTCPClient: Eingehende Verbindung

  Alt 14. Sep 2008, 11:53
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
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 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