Einzelnen Beitrag anzeigen

Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.765 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Probleme mit TIdTCPClient / TIdTCPServer

  Alt 10. Aug 2012, 13:29
Hi,

IdTCPClient1.IOHandler.ReadLn();

Wartet/Blockiert solange bis ein CR/LF kommt.

In einem Project habe ich den TIdTcpClient in einem Thread eingesetzt.

Delphi-Quellcode:
  procedure TTcpClientThread.Execute;
  var
    addNewLine : Boolean;
    noDataCounter : Byte;
    s : AnsiString;
  begin
    addNewLine := false;
    noDataCounter := 0;
    while (not terminated) do
      begin
        if FWait then
          begin
            self.Suspend;
            FWait := false;
          end;
        try
          if not tcpClient.Connected then
            begin
              try
                tcpClient.Connect;
              except
                on E:Exception do
                  begin
                    errorLog.addLog(0,'error','Routine <tcpClientThread.execute> '+E.ClassName+' '+E.Message );
                    sleep(500);
                  end;
              end;
            end;

          if tcpClient.Connected then
            if not tcpClient.IOHandler.InputBufferIsEmpty then
              begin
                s:= tcpClient.IOHandler.InputBufferAsString;
                alarmFilter.getData(s);
                reports.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
              errorLog.addLog(0,'error','Routine <tcpClientThread.execute> '+E.Message);
              tcpClient.IOHandler.CloseGracefully;
            end;
        end;
      end;
    tcpClient.Disconnect;
  end;
Dort frage ich erst ab, ob Daten im Eingangspuffer vorhanden sind.
Sind weche da, lese ich den Eingangspuffer aus.

Grüße
Klaus
Klaus

Geändert von Klaus01 (10. Aug 2012 um 13:33 Uhr)
  Mit Zitat antworten Zitat