Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   telnetclient mit synapse und separaten befehlen (https://www.delphipraxis.net/197164-telnetclient-mit-synapse-und-separaten-befehlen.html)

Reiter0303 19. Jul 2018 18:51

telnetclient mit synapse und separaten befehlen
 
hallo, ich bin am versuchen mir einen telnetclient zu basteln..
der login geht
habe aber mehrere probleme

hier mal der code für den login
Code:
 procedure TForm1.TelnetConnect;

var
  telnet: TTelnetsend;
begin
  memo6.Lines.Clear;
  telnet:= TTelnetsend.Create;
  try
    telnet.TargetHost:=ComboBox1.Text;
    telnet.Login;
    telnet.WaitFor('login:');
    telnet.Send(Edit3.Text+#$0d+#$0a);
    telnet.WaitFor('word:');
    telnet.Send(Edit4.Text+#$0d+#$0a);
    telnet.WaitFor('>');
    memo1.lines.Add('Telnet-Verbindung zu '+ComboBox1.Text+' hergestellt...');
    Memo6.Lines.Text:=telnet.sessionlog;

  finally
  end;
end;
das funktioniert auch soweit...
nun möchte ich aber über ein editfeld die comannds eintragen und mit einem button senden
da komm ich nicht weiter

wie muss sowas aussehen?
der code bringt mir eine leere ausgabe
das programm wird aber durch kompiliert und keine zugriffsverletzung

Code:
procedure TForm1.Button15Click(Sender: TObject);

var
  telnet: TTelnetsend;
begin
  TelnetConnect;
  memo6.Lines.Clear;
  telnet:= TTelnetsend.Create;
  try
    telnet.WaitFor('>');
    telnet.Send(Edit14.Text+#10);
    Memo6.Lines.Text:=telnet.sessionlog;
  finally
  end;
end;
vielleicht hat ja jemand sowas schon mal gemacht und könnte mir dabei helfen

danke

Redeemer 19. Jul 2018 19:08

AW: telnetclient mit synapse und separaten befehlen
 
WaitFor vergessen?

Ich benutze allgemein lieber TCP statt Telnet für soetwas (ich habe einen spezialisieren Telnet-Client geschrieben, den etwa 100.000 Leute nutzen), da hat man mehr Konstrolle drüber. Ist wohl Geschmackssache.

Reiter0303 19. Jul 2018 19:18

AW: telnetclient mit synapse und separaten befehlen
 
waitfor hatte ich auch schon dabei...
keine änderung

wie funktioniert das mit dem tcp client von dir?
wie gesagt will mit dem telnet client auf meine box zugreifen können , wie die standard befehle und box spezifische
wie
opkg list_installed
usw

ich hab schon soviel gelesen und komm einfach nicht weiter

Redeemer 19. Jul 2018 19:26

AW: telnetclient mit synapse und separaten befehlen
 
Hab mal markiert, was ich meine, dass es fehlt:
Delphi-Quellcode:
procedure TForm1.Button15Click(Sender: TObject);
var
  telnet: TTelnetsend;
begin
  TelnetConnect;
  memo6.Lines.Clear;
  telnet:= TTelnetsend.Create;
  try
    telnet.WaitFor('>');
    telnet.Send(Edit14.Text+#10);
    telnet.WaitFor('>'); // DAS HIER MEINE ICH
    Memo6.Lines.Text:=telnet.sessionlog;
  finally
  end;
end;
Du musst halt immer auf eine Antwort warten.

Reiter0303 19. Jul 2018 19:38

AW: telnetclient mit synapse und separaten befehlen
 
Liste der Anhänge anzeigen (Anzahl: 1)
ja ich weiss was du meinst..
hatte ich auch schon drin stehen...
übergibt aber eine leere seite...nix drin

wenn ich einen befehl mit in die procedure TelnetConnect schreibe gehts
bringt mir aber auch sonderzeichen...

root@dm7080:~# [6n

so wie hier
aber wenn ich das auslagere so wie du es gerade in den code geschrieben hast ...gehts nicht... leere seite

da hänge ich nun schon seit tagen
wenn ich den befehl mit oben in die procedure schreibe gehts... aber die sonderzeichen halt siehe bild
ausserdem will ich ja separat befehle über die edit schreiben können

Redeemer 19. Jul 2018 20:38

AW: telnetclient mit synapse und separaten befehlen
 
Warum erstellst du überhaupt dein Telnet-Teil jedes Mal neu? So eine Wegwerfmentalität ist nicht OK! Beim Button15Click hat es überhaupt keine Informationen zur Anmeldung und wohin es sich verbinden soll.

Reiter0303 19. Jul 2018 20:46

AW: telnetclient mit synapse und separaten befehlen
 
Beim Button 15 (ausführen) wird doch die Procedure für das Telnet mit geladen
Wo ja die Anmeldedaten drin sind
Siehe oben procedure telnetconnect

Wie kann ich das besser machen?

Redeemer 19. Jul 2018 21:28

AW: telnetclient mit synapse und separaten befehlen
 
Zitat:

Zitat von Reiter0303 (Beitrag 1407995)
Beim Button 15 (ausführen) wird doch die Procedure für das Telnet mit geladen
Wo ja die Anmeldedaten drin sind

Nö, die wird nicht für das Telnet sondern für ein Telnet durchgeführt, das wie jede lokale Variable nur für seine eigene Prozedur vorhanden ist und am Ende seiner Prozedur weggeworfen wird (Wegwerfmentalität) bzw. da es die Instanz einer Klasse ist, wird diese dereferenziert, ist also für dich nie wieder zugreifbar und belegt lediglich Speicher. Dazu sagt man fachsprachlich Memory Leak. Wenn du mal Delphi-Referenz durchsuchenReportMemoryLeaksOnShutdown anmachst, fliegt dir alles um die Ohren. Die beiden Telnets in deinen Methoden haben nicht im Geringsten irgendwas miteinander zu tun.
Hier muss man mit Instanzfeldern oder globalen Variablen arbeiten.

Reiter0303 19. Jul 2018 21:39

AW: telnetclient mit synapse und separaten befehlen
 
ok,würde das ja gern anders lösen
hab da aber momentan keinen ansatz für, hast du vielleicht mal ein beispiel?
mir gehts eigentlich darum das telnet offen bleibt und ich über das editfeld die commands senden kann
mann könnte ja ein timeout einfügen das sagen wir nach 60 sec unaktivität die verbindung abgebaut wird

so,hab jetzt mal die procedure telnetconnect gelöscht
und die benutzerdaten unter button 15 mit eingetragen...
es geht dauert aber ne gefühlte minute bis er den befehl umsetzt und ich habe im promt noch die sonderzeichen drin root@dm7080:~# 
frage
1) wie bekomm ich die sonderzeichen weg oder unterdrückt?
2) wie kann ich das beschleunigen das er die befehle sofort umsetzt?

mjustin 20. Jul 2018 07:02

AW: telnetclient mit synapse und separaten befehlen
 
Delphi enthält bei den Indy-Komponenten auch einen Telnet-Client (TIdTelnet) :wink:

Reiter0303 20. Jul 2018 08:07

AW: telnetclient mit synapse und separaten befehlen
 
Ja möchte aber synapse benutzen...
Aber danke für die Antwort

Redeemer 20. Jul 2018 08:21

AW: telnetclient mit synapse und separaten befehlen
 
Hilft ihm auch nicht, weil er Variablen falsch verwendet. Was er jetzt macht, würde auch mit einem Boolean nicht funktionieren, weil er es am Ende der Methode wegwirft.

Wie das Problem gelöst wird, habe ich ja bereits geschrieben:
Zitat:

Hier muss man mit Instanzfeldern oder globalen Variablen arbeiten.
Wenn man nicht weiß, was eine (lokale) Variable ist und was man unter Scope (Gültigkeitsbereich) versteht, sollte man vielleicht erst mal dort ansetzen.

Reiter0303 20. Jul 2018 08:41

AW: telnetclient mit synapse und separaten befehlen
 
das wie es jetzt ist funktioniert es ja, aber viel zu langsam , das dauert über eine minute bis er den befehl ausgibt
vielleicht jannst mir an den beispiel mal helfen mit den variablen...wäre sehr nett... Habe nix gefunden in einem Beispiel wie ich das bei Telnet mit variablen vereinfache oder beschleunige


Code:
procedure TForm1.Button15Click(Sender: TObject);

var
  telnet: TTelnetsend;
begin
  memo6.Lines.Clear;
  telnet:= TTelnetsend.Create;
  try
    telnet.TargetHost:=ComboBox1.Text;
    telnet.Login;
    telnet.WaitFor('login:');
    telnet.Send(Edit3.Text+#$0d+#$0a);
    telnet.WaitFor('word:');
    telnet.Send(Edit4.Text+#$0d+#$0a);
    telnet.WaitFor('>');
    telnet.Send(Edit14.Text+#$0d+#$0a);
    telnet.WaitFor('>');
    Memo6.Lines.Text:=telnet.sessionlog;
  finally
  end;
end;
hab das telnetconect komplett rausgeschmissen

danke

TiGü 20. Jul 2018 08:58

AW: telnetclient mit synapse und separaten befehlen
 
Zitat:

Zitat von Reiter0303 (Beitrag 1408047)
das wie es jetzt ist funktioniert es ja, aber viel zu langsam , das dauert über eine minute bis er den befehl ausgibt
vielleicht jannst mir an den beispiel mal helfen mit den variablen...wäre sehr nett... Habe nix gefunden in einem Beispiel wie ich das bei Telnet mit variablen vereinfache oder beschleunige


Code:
procedure TForm1.Button15Click(Sender: TObject);

var
  telnet: TTelnetsend;
begin
  memo6.Lines.Clear;
  telnet:= TTelnetsend.Create;
  try
    telnet.TargetHost:=ComboBox1.Text;
    telnet.Login;
    telnet.WaitFor('login:');
    telnet.Send(Edit3.Text+#$0d+#$0a);
    telnet.WaitFor('word:');
    telnet.Send(Edit4.Text+#$0d+#$0a);
    telnet.WaitFor('>');
    telnet.Send(Edit14.Text+#$0d+#$0a);
    telnet.WaitFor('>');
    Memo6.Lines.Text:=telnet.sessionlog;
  finally
  end;
end;
hab das telnetconect komplett rausgeschmissen

danke

Delphi-Quellcode:
TForm1 = class(TForm)
...
private
  FTelnet: TTelnetsend;
public
...
end;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
  FTelnet := TTelnetsend.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FTelnet.Free;
end;

procedure TForm1.Button15Click(Sender: TObject);
begin
  memo6.Lines.Clear;

  FTelnet.TargetHost:=ComboBox1.Text;
  FTelnet.Login;
  FTelnet.WaitFor('login:');
  FTelnet.Send(Edit3.Text+#$0d+#$0a);
  FTelnet.WaitFor('word:');
  FTelnet.Send(Edit4.Text+#$0d+#$0a);
  FTelnet.WaitFor('>');
  FTelnet.Send(Edit14.Text+#$0d+#$0a);
  FTelnet.WaitFor('>');
  Memo6.Lines.Text:=telnet.sessionlog;
end;

Redeemer 20. Jul 2018 09:08

AW: telnetclient mit synapse und separaten befehlen
 
So arbeitet man mit Instanzfeldern, ja. Mit zwei Fehlern:
- Du hast Button15Click zweimal definiert. Dasjenige mit dem Free müsste FormDestroy oder FormClose heißen.
- Der Login sollte glaube ich nicht in Button15Click. Aber dass muss der TE schon selbst machen.
Das hilft ihm gegen seine Wegwerfmentalität, aber nicht gegen das Problem, dass das sehr lange dauert. Keine Ahnung, ob hier im Forum schon mal Leute mit deiner Komponentensammlung gearbeitet haben, ich habe bisher nur mit den Indys gearbeitet und bin da sehr schnell von Telnet zu TCP gewechselt.

Reiter0303 20. Jul 2018 09:14

AW: telnetclient mit synapse und separaten befehlen
 
Danke für die Antworten,
Aber FormCreate kann ich nicht nehmen da das ja kein einzelner Telnet Client wird sondern in einem Programm integriert ist als eine Komponente
Kann ich das Telnet.free auch irgendwie ins Hauptprogramm auslagern? Weil solang wie man im Telnet was macht soll die Verbindung ja offen bleiben

Redeemer.. Danke schon mal für deine Hilfe mit der Telnet Verbindung Login , ich wollte das einfach halt auskapseln und immer wieder mit telnetconnect aufrufen, aber das das nicht geht und ich die Verbindung immer wieder schließe vorher hat mir sehr geholfen von dir
Danke

TiGü 20. Jul 2018 13:50

AW: telnetclient mit synapse und separaten befehlen
 
Zitat:

Zitat von Redeemer (Beitrag 1408054)
So arbeitet man mit Instanzfeldern, ja. Mit zwei Fehlern:
- Du hast Button15Click zweimal definiert. Dasjenige mit dem Free müsste FormDestroy oder FormClose heißen.

Der alte Copy'n'Paste-Halunke schlug wieder zu!

TiGü 20. Jul 2018 13:51

AW: telnetclient mit synapse und separaten befehlen
 
Zitat:

Zitat von Reiter0303 (Beitrag 1408056)
Danke für die Antworten,
Aber FormCreate kann ich nicht nehmen da das ja kein einzelner Telnet Client wird sondern in einem Programm integriert ist als eine Komponente

Wenn du das Telnet-Gelumpe auf Komponente auf eine Form oder Datenmodul gezogen hast, dann darfst erst recht N I C H T immer und immer wieder
Delphi-Quellcode:
telnet:= TTelnetsend.Create;
schreiben und die Instanz neu erzeugen.

Reiter0303 20. Jul 2018 14:40

AW: telnetclient mit synapse und separaten befehlen
 
also am besten einmal global z.b.?

TiGü 20. Jul 2018 15:40

AW: telnetclient mit synapse und separaten befehlen
 
Nein, es ist schon da.
Einen Button oder Edit-Feld instantisierst du ja auch nicht, wenn du es auf das Formular gezogen hast.

Reiter0303 20. Jul 2018 16:10

AW: telnetclient mit synapse und separaten befehlen
 
stimmt, wird ja nur einmal gemacht wenn ich den button auslöse
trotzdem langsam ohne ende , keine ahnung woran das liegt...

Rolf Frei 21. Jul 2018 13:56

AW: telnetclient mit synapse und separaten befehlen
 
Ohne das nun genau zu wissen, vermute ich, dass du da ein Timeout beim WaitFor bekommst.

Die Sonderzeichen sind übrigens ANSI-Escapesequenzen, die dir die Linux Shell als Antwort liefert. Damit du das richtig darstelen kanst, musst du eine Komponente suchen, die ANSI-Steuerzeichen verabeiten kann oder du filterst diese Steuerzeichen heraus, was nicht ganz einfach sein wird, da die Länge da variabel sein kann.

https://de.wikipedia.org/wiki/ANSI-Escapesequenz
http://man7.org/linux/man-pages/man4...e_codes.4.html
https://shiroyasha.svbtle.com/escape...-quick-guide-1

Reiter0303 22. Jul 2018 09:08

AW: telnetclient mit synapse und separaten befehlen
 
hallo danke für deine antwort, das mit dem timeout vermute ich auch...
habe aber keinen deklariert

bytecook 22. Jul 2018 10:48

AW: telnetclient mit synapse und separaten befehlen
 
Hallo,
drüben auf der Lazwiki Seite gibts ein kleines Telnet Beispiel mit Synapse. Vielleicht können dir die Codes dort weiterhelfen.
http://wiki.lazarus.freepascal.org/S...sample_program

Selber verwende ich hauptsächlich die TCP Teile von Synapse, ist auch immer meine erste Wahl bei TCP/UDP, da superschlank und übersichtlich.

Gruß,

Peter

Reiter0303 23. Jul 2018 08:41

AW: telnetclient mit synapse und separaten befehlen
 
hallo, ja die wiki seite kenne ich... weiss blos nicht wie so das solang dauert bei dem waitfor
na werde wohl noch bischen probieren müssen


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