![]() |
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:
das funktioniert auch soweit...
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; 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:
vielleicht hat ja jemand sowas schon mal gemacht und könnte mir dabei helfen
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; danke |
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. |
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 |
AW: telnetclient mit synapse und separaten befehlen
Hab mal markiert, was ich meine, dass es fehlt:
Delphi-Quellcode:
Du musst halt immer auf eine Antwort warten.
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; |
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 |
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.
|
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? |
AW: telnetclient mit synapse und separaten befehlen
Zitat:
![]() Hier muss man mit Instanzfeldern oder globalen Variablen arbeiten. |
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:~# [6n frage 1) wie bekomm ich die sonderzeichen weg oder unterdrückt? 2) wie kann ich das beschleunigen das er die befehle sofort umsetzt? |
AW: telnetclient mit synapse und separaten befehlen
Delphi enthält bei den Indy-Komponenten auch einen Telnet-Client (TIdTelnet) :wink:
|
AW: telnetclient mit synapse und separaten befehlen
Ja möchte aber synapse benutzen...
Aber danke für die Antwort |
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:
|
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:
hab das telnetconect komplett rausgeschmissen
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; danke |
AW: telnetclient mit synapse und separaten befehlen
Zitat:
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; |
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. |
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 |
AW: telnetclient mit synapse und separaten befehlen
Zitat:
|
AW: telnetclient mit synapse und separaten befehlen
Zitat:
Delphi-Quellcode:
schreiben und die Instanz neu erzeugen.
telnet:= TTelnetsend.Create;
|
AW: telnetclient mit synapse und separaten befehlen
also am besten einmal global z.b.?
|
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. |
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... |
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. ![]() ![]() ![]() |
AW: telnetclient mit synapse und separaten befehlen
hallo danke für deine antwort, das mit dem timeout vermute ich auch...
habe aber keinen deklariert |
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. ![]() 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 |
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 10:41 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