Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy TCP Client - Auf Nachrichten warten... (https://www.delphipraxis.net/140351-indy-tcp-client-auf-nachrichten-warten.html)

DelphiPeter 16. Sep 2009 18:47


Indy TCP Client - Auf Nachrichten warten...
 
Hallo!

Ich würde gerne wissen, wie ich mit meinem TCPCLient warten kann, auf neue Nachrichten vom Server. Wenn ich das mit einem Timer mache hängt mein Programm.

Muss ich das in einen Thread verpacken?
Bräuchte da mal Hilfe, wenn mir jemand helfen könnte wäre ich sehr glücklich!

Danke und Gruß

Peter

Klaus01 16. Sep 2009 19:56

Re: Indy TCP Client - Auf Nachrichten warten...
 
Guten Abend,

ich habe das mal für einen Thread so gelöst.

Delphi-Quellcode:
type
 TTcpClientThread = class(TThread)
    private
      tcpClient : TIdTcpClient;
      alarmFilter : TAlarmFilter;
      reports : TReporter;
      procedure myOnConnected(Sender: TObject);
      procedure myOnDisconnected(sender: TObject);
      procedure myOnStatus(aSender: TObject; const aStatus: TIdStatus; const aStatusText: AnsiString);
    public
      constructor Create(comServ: TComServ);virtual;
      procedure Execute; override;
      destructor Destroy; override;
  end;

und die execute Methode:
Delphi-Quellcode:
 procedure TTcpClientThread.Execute;
  var
    addNewLine : Boolean;
    noDataCounter : Byte;
    s : AnsiString;
  begin
    addNewLine := false;
    noDataCounter := 0;
    while (not terminated) do
      begin
        try
          while not tcpClient.Connected do
            begin
              try
                tcpClient.Connect;
              except
                on E:Exception do
                  begin
                    writeLn('Error '+E.Message);
                    sleep(5000);
                  end;
              end;
            end;

          if not tcpClient.IOHandler.InputBufferIsEmpty then
            begin
              s:= tcpClient.IOHandler.InputBufferAsString;
              alarmFilter.getData(s);
              //reporter.getData(s);
              s:='';
              noDataCounter := 0;
              addNewLine := true;
            end
          else
            begin
              sleep(100);
              inc(noDataCounter);
              if (noDataCounter > 5) and addNewLine then
                begin
                  addNewLine := false;
                  alarmFilter.getData(#13#10);
                end;
            end;

        except
          on E:Exception do
            begin
              writeLn('Error '+E.Message);
              tcpClient.IOHandler.CloseGracefully;
            end;
        end;
      end;
    tcpClient.Disconnect;
  end;
Grüße
Klaus


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