![]() |
ReadLn und ReadBuffer
Hallo,
ich bin noch relativ neu im Umgang mit Delphi und arbeite zur Zeit an einem Programm das mit einem Server interagiert. Das Problem das ich habe ist das der Server seine Antworten teilweise auf mehrere Packete verteilt die sich auch mit Antworten anderer Requests überschneiden können. Bisher fange ich alle Antworten über einen Timer und ReadLn ab:
Code:
Allerdings friert die Anwendung dann für kurze Zeit ein
procedure TForm.TimerTimer(Sender: TObject);
var s: string; begin s := IdTCPClient.ReadLn(#0, 5); if s <> '' then Memo1.Lines.Add(s); end; sofern es sich um größere Datenpackete handelt und die Ausgabe erfolgt nur verzögert. Ich denke der Einsatz von ReadBuffer(); wäre in diesem Fall sinnvoller nach allem was ich dazu gelesen habe. Ich weiß allerdings nicht so recht wie ich diese Anweisung einbinden soll und wie ich die empfangenen Daten nach Schlüsselwörtern auswerten kann um dann entsprechend andere Funktionen auszuführen. Könnte mir dazu vielleicht Jemand ein Beispiel geben? mfg |
Re: ReadLn und ReadBuffer
|
Re: ReadLn und ReadBuffer
naja, nicht wirklich ehrlich gesagt,
eine verbesserung erreich ich damit nicht, eher das gegenteil |
Re: ReadLn und ReadBuffer
Zitat:
|
Re: ReadLn und ReadBuffer
endeffects, welche Delphi-Version benutzt du ?
Falls du Delphi7 benutzt, liegt der Fehler wohl darin, das es sich hierbei um einen Fehler der standardmäßig installierten Indy-Komponennte handelt. |
Re: ReadLn und ReadBuffer
hallo,
nein ich hab die indy version schon aktualisiert und nutze nun die 9er auf delphi 7 |
Re: ReadLn und ReadBuffer
hallo,
also ich hab eine bestehende server verbindung und sende einen request an den server und möchte ich die antwort in ein memo packen, nun weiß ich allerdings nicht wie ich abfrage ob der buffer lesbar ist, zur zeit wird die anwendung mit einem exception fehler abgebrochen
Code:
procedure TForm.Button1Click(Sender: TObject);
var cb: string; begin with IdTCPClient do begin try Write(request'); //if ???readable(2000)??? = true then begin ReadBuffer(CB, SizeOf (CB)); Memo.Lines.Add(cb); //end; except on E : Exception do ShowMessage(E.Message); end; end; |
Re: ReadLn und ReadBuffer
ich hab das ganze nu nochmal bissel abgeändert:
Code:
erzeugt allerdings eine zugriffsverletzung die ich nicht
procedure TForm.Button1Click(Sender: TObject);
var cb: string; begin with IdTCPClient do begin try Write(request'); if IOHandler.Readable(1000) then begin ReadBuffer(CB, SizeOf(CB)); if SizeOf(CB) > 0 then begin Memo2.Lines.Add(CB); end; end; nachvollziehen kann |
Re: ReadLn und ReadBuffer
es ist zum verzweifeln, hat denn hier niemand ahnung davon?
|
Re: ReadLn und ReadBuffer
ich verzweifle auch bald.
sockets sind blöd und die indies kapier ich irgendwie nicht. gibt es nicht ein tolles einsteiger-tutorial für indy (das von delphi-sourc.de bringt's irgendwie net...)? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 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