Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Telnet + mehrzeilige Ausgabe in Memo (https://www.delphipraxis.net/73967-telnet-mehrzeilige-ausgabe-memo.html)

drschubi 26. Jul 2006 07:52


Telnet + mehrzeilige Ausgabe in Memo
 
Hallo
ich benutze folgenden Code um Eingaben an Telnet zu schicken.
Wenn ich eine mehrzeilige Ausgabe von Telnet habe, wie bekomme ich die ins Memo?

Delphi-Quellcode:
procedure TForm1.sndCmdClick(Sender: TObject);
var
  s: String;
  a,i: Integer;
begin
  s := edit1.Text;
  for a := 1 to length(s) do
  begin
    idTelnet1.SendCh(s[a]);
  end;
  idTelnet1.SendCh(#13);

  for i := 1 to idtelnet1.//???Hier finde ich keine funktion
Memo1.Lines.Add(IdTelnet1.ReadLn());
end;


Gruß René

chaosben 26. Jul 2006 08:05

Re: Telnet + mehrzeilige Ausgabe in Memo
 
Es sollte in etwa so funktionieren:

Delphi-Quellcode:
IdTelnet1.ReadTimeout:=1000; //generelles Timout setzen
  repeat
    Memo1.Lines.Add(IdTelnet1.ReadLn); //lesen bis ...
  until IdTelnet1.ReadLnTimedOut; //... ein Timeout kam

drschubi 26. Jul 2006 09:05

Re: Telnet + mehrzeilige Ausgabe in Memo
 
Hallo Benjamin,

Delphi-Quellcode:
IdTelnet1.ReadTimeout
gibt es leider nicht.


Nur
Delphi-Quellcode:
IdTelnet1. ReadLnTimeout
und diesem kann man nichts zuweisen.

Gruß René

chaosben 26. Jul 2006 09:23

Re: Telnet + mehrzeilige Ausgabe in Memo
 
Zitat:

Zitat von drschubi
Delphi-Quellcode:
IdTelnet1.ReadTimeout
gibt es leider nicht.

Dann musst du den Wert für Timeout der ReadLn-Funktion übergeben.

drschubi 26. Jul 2006 09:28

Re: Telnet + mehrzeilige Ausgabe in Memo
 
aha Danke

jacky213 20. Jun 2015 02:22

AW: Telnet + mehrzeilige Ausgabe in Memo
 
Ich habe es erstmal so gemacht wie von chaosben beschrieben, aber irgendwie kam da nie alles
ins memo was der Server geantwortet hat. Also hab ich das folgendermaßen gelöst:

Also erstmal prüfen ob die empfangenen Daten auch wirklich was zum eintragen ins Memo enthalten.
Wenn das der Fall ist, dann wird das ganze ins Memo eingetragen.
Delphi-Quellcode:
procedure TClient.telnetDataAvailable(Sender: TIdTelnet;
  const Buffer: TIdBytes);
begin
if Trim(BytesToString(Buffer))='' then exit else
AddStatus(BytesToString(Buffer));
end;
Der übergebene Wert wird hiermit schlichtweg ins Memo geschrieben. Ich fand diesen Umweg etwas
übersichtlicher weil ich nicht nur die ausgabe des telnet clients ins memo schreiben wollte und
so spar ich mir das wiederholen von Memo1.Lines.Add()
Delphi-Quellcode:
Procedure AddStatus (str:string);
begin
frmConsole.Memo1.Lines.Add(str);
end;

vagtler 26. Jun 2015 07:48

AW: Telnet + mehrzeilige Ausgabe in Memo
 
Die im Beitrag http://www.delphipraxis.net/1305843-post6.html vorgeschlagene Lösung ist durch Missachtung von Grundlagen objektorientierter Programmierung und Durchmischung mit prozeduraler Entwicklung nicht nachahmenswert.

Hier wird eine globale Prozedur aus einer Klasseninstanz aufgerufen, die wiederum Objekte einer spezifischen Klasseninstanz anspricht, die wiederum über eine benannte globale Instanzvariable angesprochen wird. Das entspricht keinen Best Practices und sollte wo immer es geht vermieden werden - das mag im konkreten Glücksfall (noch) funktionieren, fällt einem früher oder später aber auf die Füße. Es spricht absolut nichts dagegen, die AddStatus-Prozedur z.B. als Methode der Klasse zu deklarieren und z.B. über eine Singleton-Implementierung der entsprechenden Form-Klasse aus der TClient-Klasse anzusprechen.


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