![]() |
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:
Problem: Wenn die Endezeile unter Umständen nicht gesendet wird, bleibt das Programm
result:=TStringList.Create;
repeat s:=Readln; result.Append(s); Application.ProcessMessages; until (s[1]<>'%'); 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é |
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 |
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é |
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 |
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 |
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 |
Re: Alternative zu Readln
:cry: Nein, leider überhaupt keinen Einfluss. Das ist ja das Problem an der Sache.
Aber trotzdem danke |
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? |
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 |
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 ![]() 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