Telnet Daten im Memo empfangen

Alle Fragen zur Netzwerkkommunikation
Antworten
DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Telnet Daten im Memo empfangen

Beitrag von DL3AD »

Hallo,

ich habe mich erfolgreich mit einem Telnet Server verbunden der ständig Daten liefert die ich auswerten möchte.
In einem TMemo wollte ich die erstmal Zeile für Zeile untereinander auflaufen lassen.
Die erste Zeile landet auch odrnungsgemäß im TMemo.
Nun fehlt mir ein Eventhandler - bzw ich kenne ihn nicht - gibt ei einen für TelnetSend von Synapse ?
Wie kann ich die Daten abhohlen und ins TMemo bringen ?

Code: Alles auswählen

 
procedure TForm1.FormShow(Sender: TObject);
begin
  TN := TTelnetSend.Create;
  TN.TargetHost := 'db0hgw.dyndns.org';
  TN.TargetPort := '4111';
  TN.Timeout := 1000;
  if TN.Login then
    begin
      TN.WaitFor('login:');
      TN.Send('dl3ad'+#$0d+#$0a);
      TN.WaitFor(#$0d+#$0a);
      Label1.Caption:= 'Connectet';
      Memo1.Text:= TN.RecvString;
    end;
end;                                 
 


Gruß Frank

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Telnet Daten im Memo empfangen

Beitrag von theo »

Synapse ist blockierend.
Du musst wahrsch. TN.WaitFor(#$0d+#$0a); etc. im Loop ausführen.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Telnet Daten im Memo empfangen

Beitrag von DL3AD »

Hallo,

hier nun meine Lösung - vieleicht hilft es ja später jemanden.

Code: Alles auswählen

 
procedure TForm1.FormShow(Sender: TObject);
begin
  TN := TTelnetSend.Create;
  TN.TargetHost := 'mayodx.ath.cx';
  TN.TargetPort := '7300';
  TN.Timeout := 1000;
  if TN.Login then
    begin
      TN.WaitFor('login:');
      TN.Send('dl3ad'+#$0d+#$0a);//User
      TN.Send(#$0d+#$0a);//ohne PWord weiter
      TN.WaitFor(#$0d+#$0a);
      Form1.Caption:= 'Cluster Connectet';
      Memo1.Clear;
      Timer1.Enabled:= true;
    end;
    TN.Timeout := 10;
end;
 
//Timer zur Clusterabfrage
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled:=false;
  DX:= TN.RecvString;
  if DX <> '' then
    begin
      Memo1.Append(DX);
    end;
  Timer1.Enabled:=true;
end;                                     
 


Der Timer steht auf 100ms.

Gruß Frank

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Telnet Daten im Memo empfangen

Beitrag von theo »

Wofür brauchst du den Timer?
Ein Loop mit Application.Processmessages würde mMn auch reichen.
Oder übersehe ich da etwas?

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Telnet Daten im Memo empfangen

Beitrag von DL3AD »

Hallo theo,

:shock: kenne ich noch nicht.
Hilf mir mal auf die sprünge :?

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Telnet Daten im Memo empfangen

Beitrag von theo »

Naja, Application.Processmessages hält das GUI flüssig bzw. ermöglicht die Aktualisierung des Memos (ohne Timer).
Falls TN.RecvString; aber länger blockiert, müsste das Ganze eigentlich in einen separaten Thread.
Vielleicht ist der Timer für den Anfang nicht die schlechteste Lösung.

DL3AD
Beiträge: 478
Registriert: Fr 13. Sep 2013, 12:07
OS, Lazarus, FPC: Debian Bullseye (L 2.2.0)
CPU-Target: 64Bit
Wohnort: Rügen

Re: Telnet Daten im Memo empfangen

Beitrag von DL3AD »

... jetzt begreife ich was Application.Processmessages ist.
Ich denke eine Timerlösung ist einer Loop vorzuziehen - TN.RecvString; verursacht keine wahrzunehmende Blockaden.

Gruß Frank

Antworten