Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy TCP Streams senden/empfangen (https://www.delphipraxis.net/151214-indy-tcp-streams-senden-empfangen.html)

XXcD 9. Mai 2010 12:01


Indy TCP Streams senden/empfangen
 
Hallo,
ich versuche im Moment in meinem Chat Streams zu empfangen, ich weiß aber nicht ob das so richtig ist da manchmal noch fehler auftreten.

Delphi-Quellcode:
var
ReadStream: TStream;
begin
if IdTCPClient1.Connected then
begin
ReadStream:= TMemoryStream.Create;
try
try
IdTCPClient1.IOHandler.ReadStream(ReadStream, -1, false);
ReadStream.Seek(0,0);
ReadData(ReadStream);
Except

end;
finally
ReadStream.Free;
end;
end
else
begin
Timer1.Enabled:=false;
ShowError('Verbindung unterbrochen!');
end;
end;
Das ganze läuft in einem Timer und immer wenn nichts zum empfangen da ist wird das Except ausgelöst.
Kann man das auch irgendwie eleganter lösen?
Ich weiß einfach nicht ob ich das so richtig mache, wäre nicht schlecht wenn sich das mal jemand anschauen würde.

rollstuhlfahrer 9. Mai 2010 16:35

Re: Indy TCP Streams senden/empfangen
 
1.) TIdTCPClient hat ein .ReadStream . Dafür muss man nicht den IOHandler direkt bemühen.
2.) Code-Schnipsel kann man auch einrücken. Dann sind sie für denjenigen, der den Fehler suchen soll leichter zu lesen und der Entwickler profitiert ganz nebenbei auch noch von dem leichter zu lesenden Code.
3.) Jeder Stream kennt intern seine Länge. Wenn du vorher prüfst, ob überhaupt was im Stream drin steht, kann dein Programm dann auch sicher sein, dass es nicht mit leeren Streams zu kämpfen hat (.Size <> 0). [Bezug auf Zeile 11]
4.) Ja schön, es tritt eine Exception auf. Wo? Und ist das vllt. eine ETopSecret?

Bernhard

XXcD 9. Mai 2010 18:23

Re: Indy TCP Streams senden/empfangen
 
Ich bekomme in dem Exception von dem try Block bei dem Readstream ein Error
und zwar Read Timeout. Deshalb wollte ich auch wissen ob man das irgendwie ohne Exceptions lösen kann.
Also dass beim lesen keine Fehler entstehen.


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