Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy TCP Client - Verständnisproblem (https://www.delphipraxis.net/166383-indy-tcp-client-verstaendnisproblem.html)

DelphiPeter 10. Feb 2012 16:47

Indy TCP Client - Verständnisproblem
 
Hallo Zusammen!

Nach eurer Hilfe in Beitrag http://www.delphipraxis.net/166293-i...versenden.html verschicke ich nun vom Client ein Record an den Server, der wiederum antwortet mir immer auf das gesendete Record.

Nur scheinbar habe ich was generelles nicht verstanden.

Ich habe mit einen im Client einen Timer gebastelt, der mittels...

Delphi-Quellcode:
LIMClient.Socket.ReadBytes(Buf, SizeOf(TConnectionData));
BytesToRaw(Buf, Data, SizeOf(TConnectionData));
immer versucht, Daten zu lesen, die evtl. vom Server gensendet werden können.


Wie ist denn das. Gibt es beim IDTCPClient ein Ereignis das mir sagt - Hallo, es sind gerade Daten vom Server gekommen? Oder ist das mit dem Timer eine Lösung? Ich glaube ich habs prinzipiell nicht verstanden, wie das ganze arbeitet.

Kann mir jemand helfen?

Danke euch!

Peter


.. oder kurz gesagt: Schreibt mir der Server in den Client (wenn ja, wie bekomme ich das mit) oder muss ich vom Client her lesen (wenn ja, wo wäre das am besten, oder ist der Timer die Lösung)

daywalker9 10. Feb 2012 17:20

AW: Indy TCP Client - Verständnisproblem
 
So zB, den InputBuffer auf die größe Prüfen, wenn ja, ist was da.

Delphi-Quellcode:
procedure TCRMTCPClient.DoTimer(Sender: TObject);
var cmd : string;
begin try
        if FTimer.tag = 1 then exit;
        FTimer.tag := 1;

        if not Connected then
          begin
            Connect;

            if not Connected then
              begin
                FTimer.tag := 0;
                exit;
              end;
          end;

        if IOHandler.InputBuffer.Size = 0 then
          begin
            // ReadFromStack(true, 1, false);
            IOHandler.CheckForDataOnSource(1);
            if IOHandler.InputBuffer.Size = 0 then
              begin
                FTimer.tag := 0;
                exit;
              end;
          end;
        DoOnExecute;

        FTimer.tag := 0;
      except
        on e:exception do
          begin
            FTimer.tag := 0;
          end;
      end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 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