Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Alternative zu Readln (https://www.delphipraxis.net/53331-alternative-zu-readln.html)

smudo 14. Sep 2005 11:16


Alternative zu Readln
 
Hallo :hi: ,

ich frage Daten von einem Server mittels einer TIdTCPClient-Komponente ab.
Dazu lese ich so lange mittels Readln bis eine bestimmte Endezeile gelesen wird.
Delphi-Quellcode:
result:=TStringList.Create;
repeat
  s:=Readln;
  result.Append(s);
  Application.ProcessMessages;
until (s[1]<>'%');
Problem: Wenn die Endezeile unter Umständen nicht gesendet wird, bleibt das Programm
in der ReadLn-Schleife hängen.

Gibt es zu dieser Variante bessere Alternativen? :gruebel:
Habs zum Beispiel mit LastCmdResult.Text versucht, aber die Liste ist immer leer.

Vielen Dank im Voraus

René

marabu 14. Sep 2005 11:56

Re: Alternative zu Readln
 
Hallo René,

wenn du idTCPClient.ReadLn() nicht mit den default Argumenten aufrufst, sondern bei ATimeOut (und auch ATerminator) eine Angabe machst, dann könntest du auf das Ausbleiben der Endnachricht angemessen reagieren.

Grüße vom marabu

smudo 14. Sep 2005 12:12

Re: Alternative zu Readln
 
Danke, aber damit komme ich jetzt nicht ganz klar :shock:

Ich kann leider nicht vorher sagen wann die Antwortzeile eintrifft.
Unter Umständen kann das sehr lange dauern, ich wüßte nicht, was ich da beim ATimeOut einstellen sollte.

Und der ATerminator besagt sicher das erwartete Zeilenende. Was müsste man da anderes eingeben?

Grüße von René

marabu 14. Sep 2005 12:31

Re: Alternative zu Readln
 
Du musst das Zeilenende angeben, damit du den TimeOut angeben kannst - kein anderer Grund. Und das Arbeiten mit einem TimeOut-Wert erscheint mir obligatorisch, da du sonst im Zweifelsfall bis zum Sankt-Nimmerleins-Tag warten kannst, bis der Server dir was schickt. Irgendein Wert sollte dir plausibel erscheinen. Versuche es doch mal mit 42.

marabu

smudo 14. Sep 2005 12:50

Re: Alternative zu Readln
 
Aha :thumb:, das mit dem Zeilenende ist klar.

Der TimeOut, wird der in Sekunden oder Minuten angegeben? Ich hab leider das Problem,
dass mir für große Abfragen noch nicht einmal 42 Minuten reichen würden.
Der Server benötigt manchmal 1 Stunde oder mehr bis die ersten Antwortzeilen gesendet werden.

Deshalb suche ich ja auch nach einer Alternative für Readln. Schön wäre beispielsweise ein Ereignis,
wenn die Daten gesendet wurden und dann die Übergabe eines Datasets ( :angel: ich träume wohl :angel: )

Anmerkung: Ne StringList würde natürlich ausreichen
Donkscheen trotzdem

marabu 14. Sep 2005 13:03

Re: Alternative zu Readln
 
Allmächtiger - 1 Stunde Wartezeit nach einem Request? Das sieht mir nach unpassendem Lösungsansatz aus. Ich würde bei solchen Wartezeiten keine Echtzeit-Kommunikation versuchen. Schicke dem Server deinen Request und lasse den Server das Ergebnis im Dateisystem ablegen. Danach kannst du entweder zyklisch nachschauen oder (bei windows) überwachst den Ablage-Ordner mit shell notifications. Oder hast du keinen Einfluß auf die Server-Seite?

marabu

smudo 14. Sep 2005 13:40

Re: Alternative zu Readln
 
:cry: Nein, leider überhaupt keinen Einfluss. Das ist ja das Problem an der Sache.

Aber trotzdem danke

smudo 15. Sep 2005 09:55

Re: Alternative zu Readln
 
Um nochmal auf das eigentliche Problem zurückzukommen:
Gibt es keine anderen Möglichkeit außer Readln um auf die Rückgabewerte einer TIdTCPClient-Komponente zuzugreifen?

marabu 15. Sep 2005 10:20

Re: Alternative zu Readln
 
Hi René,

die Online-Hilfe zu idTCPClient nennt dir ein ganzes Arsenal an Methoden für den Lesezugriff - aber ich hatte da eigentlich eher ein Zeitproblem ausgemacht...

marabu

smudo 16. Sep 2005 08:20

Re: Alternative zu Readln
 
Hallo und Danke nochmal an Marabu.

Ich hab die Frage zwar als beantwortet gekennzeichnet, bin aber mit der Lösung des Problems noch nicht wirklich vorwärts gekommen,
hab dafür aber einen neuen Thread geöffnet und zwar hier

Einen angenehmen Freitag wünscht

René


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz