Verbindung zu Telnet



  • Hi.
    Folgende Situation;
    Wir haben Hardware am laufen, die man nur über Telnet ansprechen kann.
    Nun brauche ich ein Programm, mit dem man via Telnet diese Hardware ansprechen kann..

    Ich möchte dabei nicht das klassiche TelnetProg von MS aufrufen, sondern in meinem Programm eine Verbindung aufbauen und eben Befehle senden.

    Hat jemand ahnung wie das funktionieren könnte ? Gibts schon Objekte dazu die solches ermäglichen ?
    oder einfach nen hilfreichen link ?
    Danke im vorraus.
    mfg, levi



  • Hallo

    im (externen) Indy-package ist eine Telnet-Komponente dabei, einfach hier im BCB-Forum nach *Telnet* suchen.

    bis bald
    akari



  • Vielen Dank...

    werd aus dem ganzen leider nur halbschlau ;).
    Nach vielen wirren lesen scheint es zwar so, als würde das damit funktionieren, allerdings weiss ich absolut nicht was ich mit den ganzen Dateien machen soll nachdem ich Indy 9.x runtergeladen habe (Zip-Archive).

    Wie kann man denn die Sachen beim Borland6 Builder einbinden und / oder die Funktionen von Indy nutzen ? 🙂



  • edit.

    unglaubbar.
    habs hinbekommen 🙂
    bin auf Components->Install new Component und hab bei File einfach mal ne *.res Datei aus den ganzen ausgewählt.
    Nun habe ich oben in den Reitern auch IndyClients / Server /Misc Objekte.

    Ich hoffe das war so korrekt ? 😉
    naja, nun mal ausprobieren obs denn auch funktioniert.

    Thx nochmal 🙂



  • Hallo

    in eine res-Datei? Das klingt schon mal nicht richtig.

    Wie es richtig geht steht in der Readme.txt des Packages und hier.

    bis bald
    akari



  • Vielen Dank.
    Habe nach vielen hin und her es endlich geschafft das Package vernüftig einzubinden.

    Komme leider mit dem TelnetClient Objekt absolut nicht klar.

    Hat da jemand evt nen Beispiel zu (C++). Finde nur welche für Delphi, womit ich überhaupt nichts anfangen kann.

    Wäre sehr hilfreich wenn jemand was hätte.
    Danke im vorraus.

    Mfg,Levi



  • Btw,

    es geht ja eigentlich nur darum dass ich via Telnet genau 2 Befehle senden muss.. so schwer kann das doch wirklich nich sein :- /



  • Das erste Problem das sich ergibt ist folgendes;

    Ich habe als Testumgebung einen WinXP Rechner und eine Linux-Kiste.
    Ich habe einfach auf einer Form ein IdTelnet Objekt plaziert.
    Bei den Eigenschaften den Host eingetragen und rufe "Telnet1->Connect();" beim drücken auf einen Button auf.
    Das Programm bleibt dann mehr oder weniger hängen, kann es nicht verschieben und auch sonst nichts mit der Form machen, sobald ich dieses Event ausführe. Nach ein paar Sekunden kommt dann diese Fehlermeldung;

    ..."EIdTelnetServerOnDataAvailableisNil"...

    Laut meines Servers (Linux) war ich zwar Conectet, aber fliege dann eben wie beschrieben mit der Fehlermeldung raus.
    😡



  • Das Indy8-Beispiel aus dem BCB6, angepasst für Indy9:

    client.h

    //---------------------------------------------------------------------------
    
    #ifndef ClientH
    #define ClientH
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <ComCtrls.hpp>
    #include <IdBaseComponent.hpp>
    #include <IdComponent.hpp>
    #include <IdTCPClient.hpp>
    #include <IdTCPConnection.hpp>
    #include <IdTelnet.hpp>
    //---------------------------------------------------------------------------
    class TTelnetForm : public TForm
    {
    __published:	// IDE-managed Components
            TLabel *lblServer;
            TLabel *lblPort;
            TEdit *edtServer;
            TButton *btnConnect;
            TButton *btnDisconnect;
            TIdTelnet *IdTelnetDemo;
            TEdit *spnedtPort;
            TUpDown *UpDown1;
            TRichEdit *Memo1;
            TStatusBar *sbrStatus;
      TIdTelnet *IdTelnet1;
            void __fastcall UpDown1Click(TObject *Sender, TUDBtnType Button);
            void __fastcall FormCreate(TObject *Sender);
            void __fastcall btnConnectClick(TObject *Sender);
            void __fastcall btnDisconnectClick(TObject *Sender);
            void __fastcall Memo1KeyPress(TObject *Sender, char &Key);
            void __fastcall IdTelnetDemoDataAvailable(TIdTelnet *Sender,
          const AnsiString Buffer);
            void __fastcall IdTelnetDemoConnected(TObject *Sender);
            void __fastcall IdTelnetDemoConnect(TObject *Sender);
    private:	// User declarations
    public:		// User declarations
            __fastcall TTelnetForm(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TTelnetForm *TelnetForm;
    //---------------------------------------------------------------------------
    #endif
    

    client.cpp

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Client.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TTelnetForm *TelnetForm;
    //---------------------------------------------------------------------------
    __fastcall TTelnetForm::TTelnetForm(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TTelnetForm::UpDown1Click(TObject *Sender, TUDBtnType Button)
    {
       int PortNumber = StrToInt(spnedtPort->Text);
    
       if(Button == btNext){
            PortNumber++;
       }
       if(Button == btPrev){
            PortNumber--;
       }
    
       spnedtPort->Text = IntToStr(PortNumber);
    }
    //---------------------------------------------------------------------------
    void __fastcall TTelnetForm::FormCreate(TObject *Sender)
    {
       spnedtPort->Text = "23";        
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TTelnetForm::btnConnectClick(TObject *Sender)
    {
            IdTelnetDemo->Host = edtServer->Text;
            IdTelnetDemo->Port = StrToInt(spnedtPort->Text);
            IdTelnetDemo->Connect();
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TTelnetForm::btnDisconnectClick(TObject *Sender)
    {
            IdTelnetDemo->Disconnect();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TTelnetForm::Memo1KeyPress(TObject *Sender, char &Key)
    {
            if(IdTelnetDemo->Connected()){
               IdTelnetDemo->SendCh(Key);
               Key = 0;
            }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TTelnetForm::IdTelnetDemoDataAvailable(TIdTelnet *Sender,
          const AnsiString Buffer)
    {
      int Start, Stop;
    
      if(Memo1->Lines->Count == 0)
         Memo1->Lines->Add("");
    
         Start = 1;
         Stop = Buffer.Pos(IntToStr('\n')); //the character count to a CR in the buffer
    
         if(Stop == 0)
            Stop = Buffer.Length() + 1;
    
         while(Start <= Buffer.Length()){
            Memo1->Lines->Strings[Memo1->Lines->Count -1] =
            Memo1->Lines->Strings[Memo1->Lines->Count -1] +
            Buffer.SubString(Start,Stop-Start);
    
            if(Buffer.SubString(Stop,1)=='\n')
            {
               Memo1->Lines->Add("");
               SendMessage(Memo1->Handle,WM_KEYDOWN, VK_UP,1);
            }
            Start = Stop + 1;
            if(Start > Buffer.Length()){
              break;
            }
            if(Buffer.SubString(Start,1)=='\n'){
              Start++;
            }
            Stop = Start;
            while((Buffer.SubString(Stop, 1)!= '\n')&&(Stop <= Buffer.Length())){
               Stop++;
            }
         }
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TTelnetForm::IdTelnetDemoConnected(TObject *Sender)
    {
       sbrStatus->SimpleText = "Connected";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TTelnetForm::IdTelnetDemoConnect(TObject *Sender)
    {
       sbrStatus->SimpleText = "Connect";
    }
    //---------------------------------------------------------------------------
    


  • Morgen.

    Vielen dank für das Beispiel.

    Hatte es schon geschafft eine Verbindung herzustellen, mit Hilfe des Beispiels kann ich aber auch zum ersten mal aufzeichen was mein Testserver mir Anfangs zusendet :).

    Allerdings gibts immer noch Probleme.
    Der Server sendet mir OS-Infos und den "Login:" . Leider kann ich nachdem ich connected bin nichts mehr machen, dass Programm stürtzt einfach ab "Keine Rückmeldung" im Task-Manager. Man kann meist nicht mal das Fenster des Programms verschieben, geschweige denn irgend eine Eingabe in dem Programm tätigen.

    Evt ne Idee woran das liegen könnte ?



  • für alle mitgeplagten ;

    Habe ne andere Lösung gefunden.

    Es gibt von http://www.activexperts.com/ nen Softwarepacket, wo auch Beispiele bei sind, unter anderem auch für Telnet.
    Das Telnet Beispiel für C# funktioniert einwandfrei.
    Benutze dabei den MS Visual C# 2005 Express Edition in der Version 2.0.5 .

    Danke für alle Hilfen.

    bis denn.
    levi


Anmelden zum Antworten