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