AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Alternative zu Readln
Thema durchsuchen
Ansicht
Themen-Optionen

Alternative zu Readln

Ein Thema von smudo · begonnen am 14. Sep 2005 · letzter Beitrag vom 16. Sep 2005
Antwort Antwort
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#1

Alternative zu Readln

  Alt 14. Sep 2005, 12:16
Hallo ,

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?
Habs zum Beispiel mit LastCmdResult.Text versucht, aber die Liste ist immer leer.

Vielen Dank im Voraus

René
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Alternative zu Readln

  Alt 14. Sep 2005, 12:56
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
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Alternative zu Readln

  Alt 14. Sep 2005, 13:12
Danke, aber damit komme ich jetzt nicht ganz klar

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é
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Alternative zu Readln

  Alt 14. Sep 2005, 13:31
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
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Alternative zu Readln

  Alt 14. Sep 2005, 13:50
Aha , 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 ( ich träume wohl )

Anmerkung: Ne StringList würde natürlich ausreichen
Donkscheen trotzdem
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Alternative zu Readln

  Alt 14. Sep 2005, 14:03
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
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Alternative zu Readln

  Alt 14. Sep 2005, 14:40
Nein, leider überhaupt keinen Einfluss. Das ist ja das Problem an der Sache.

Aber trotzdem danke
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Alternative zu Readln

  Alt 15. Sep 2005, 10:55
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Alternative zu Readln

  Alt 15. Sep 2005, 11:20
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
  Mit Zitat antworten Zitat
smudo

Registriert seit: 6. Sep 2005
Ort: Cottbus
362 Beiträge
 
Delphi XE2 Professional
 
#10

Re: Alternative zu Readln

  Alt 16. Sep 2005, 09:20
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é
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:58 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