tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
410
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Tomek Ch Tomek Ch ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    Hallo,

    objektorientierte Programmierung ist mein täglich Brot, ich arbeite aber hauptsächlich mit stateless Programmiersprachen wie PHP.

    Mit Java habe ich während des Studiums programmiert, das ging aber nicht über ein paar einfache Konsolenanwendungen hinaus.

    Ich habe mich für ein Testprojekt in JAVA entschieden, da ich im Glauben bin, dass meine Anwendung dann plattformunabhängig ist. Bitte korrigiert mich hier.

    Nun zum Testprojekt:
    Eine "Konsolenanwendung" läuft über einen VT102 Terminal Emulator über das TELNET Protokoll. Diese Konsolenanwendung würde ich gerne mit einer neuen GUI ausstatten. Prinzipiell sendet man etwas an die Anwendung und es kommt ein Response zurück.

    Würde man in JAVA nun einen eigenen Thread programmieren, der für das Senden und empfangen verantwortlich ist? Die Verbindung soll ja, bis zum Schließen des Programms, geöffnet bleiben. Wenn nein, was ist sonst die beste herangehensweise?
    Weiß jemand, woran ich erkennen kann, dass ein Datenstream den ich empfange zu Ende ist, und nichts mehr hinterherkommt? Gibt es so einen Indikator im Telnet Protokoll? Ich konnte leider nichts derartiges finden. Denn dann stellt sich auch die Frage, wann höre ich auf den Stream zu lesen?

    Der nächste Schritt ist die Interpretation der empfangenen Daten. Ich habe ein PERL-Modul gefunden http://www.ivarch.com/programs/termvt102.shtml, welches VT102 emuliert und mit dem ich quasi lesen kann, was auf dem Bildschirm angezeigt werden würde. Beispielsweise: In Zeile 5 Zeichen 10 ist das Zeichen "A". Da es viele verschiedene Escape- und Kontrollsequenzen gibt, wäre so ein Modul für mein Testprojekt extrem nützlich.

    Der letzte Schritt ist dann die GUI. Die empfangenen Daten müssen interpretiert werden (was sich durch das eben genannte Modul vereinfachen würde) und dann entsprechend in die GUI übertragen werden. In "was" würde man die GUI programmieren? Ein Stichwort was ich schon öfter gelesen habe ist SWT oder Swing.. kann mich da jemand in die richtige Richtung weisen? Plattformunabhängigkeit ist wie gesagt ein Thema.

    Ich danke jetzt schon für alle Hinweise und Tipps.

    Viele Grüße!
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Hi

    Zitat Zitat von Tomek Ch Beitrag anzeigen
    Ich habe mich für ein Testprojekt in JAVA entschieden, da ich im Glauben bin, dass meine Anwendung dann plattformunabhängig ist. Bitte korrigiert mich hier.
    Generell stimmt das.
    Drei "Aber":
    1) muss Java am Zielrechner installiert sein. Sollte aber kein großes Problem darstellen.
    2) gibt es ein paar spezielle Programmierfehler, die das Programm PF-abhängig machen.
    Sind aber meistens ohne übermäßigen Aufwand ausbesserbar.
    3) Wenn das Java-Programm Nicht-Java-DLLs und ähnliches verwendet sind diese uU. PF-abhängig.
    Zitat Zitat von Tomek Ch Beitrag anzeigen
    Würde man in JAVA nun einen eigenen Thread programmieren, der für das Senden und empfangen verantwortlich ist? Die Verbindung soll ja, bis zum Schließen des Programms, geöffnet bleiben. Wenn nein, was ist sonst die beste herangehensweise?
    Werden da ständig Daten geschickt oder nur bei einer Aktion vom Benutzer?

    Zitat Zitat von Tomek Ch Beitrag anzeigen
    Weiß jemand, woran ich erkennen kann, dass ein Datenstream den ich empfange zu Ende ist, und nichts mehr hinterherkommt? Gibt es so einen Indikator im Telnet Protokoll? Ich konnte leider nichts derartiges finden. Denn dann stellt sich auch die Frage, wann höre ich auf den Stream zu lesen?
    Verwendest du da irgendeine Telnetklasse oder pure Sockets?
    Zitat Zitat von Tomek Ch Beitrag anzeigen
    Der nächste Schritt ist die Interpretation der empfangenen Daten. Ich habe ein PERL-Modul gefunden http://www.ivarch.com/programs/termvt102.shtml, welches VT102 emuliert und mit dem ich quasi lesen kann, was auf dem Bildschirm angezeigt werden würde. Beispielsweise: In Zeile 5 Zeichen 10 ist das Zeichen "A". Da es viele verschiedene Escape- und Kontrollsequenzen gibt, wäre so ein Modul für mein Testprojekt extrem nützlich.
    Ist das eine Frage?
    Zitat Zitat von Tomek Ch Beitrag anzeigen
    Der letzte Schritt ist dann die GUI. Die empfangenen Daten müssen interpretiert werden (was sich durch das eben genannte Modul vereinfachen würde) und dann entsprechend in die GUI übertragen werden. In "was" würde man die GUI programmieren? Ein Stichwort was ich schon öfter gelesen habe ist SWT oder Swing.. kann mich da jemand in die richtige Richtung weisen? Plattformunabhängigkeit ist wie gesagt ein Thema.
    Swing ist ein fixer Teil von Java, ist also PF-unabhängig.
    Man kann damit relativ leicht "normale" GUIs mit Textfeldern/Buttons/etc machen (codemäßig) oder mit Zusatzsoftware zum Compiler auch grafisch zusammenklicken.

    Gruß
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  3. #3
    Tomek Ch Tomek Ch ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    Zitat Zitat von sheel Beitrag anzeigen
    Drei "Aber":
    1) muss Java am Zielrechner installiert sein. Sollte aber kein großes Problem darstellen.
    2) gibt es ein paar spezielle Programmierfehler, die das Programm PF-abhängig machen.
    Sind aber meistens ohne übermäßigen Aufwand ausbesserbar.
    3) Wenn das Java-Programm Nicht-Java-DLLs und ähnliches verwendet sind diese uU. PF-abhängig.
    OK, verstehe.

    Zitat Zitat von sheel Beitrag anzeigen
    Werden da ständig Daten geschickt oder nur bei einer Aktion vom Benutzer?
    Eigentlich nur bei einer Aktion vom Benutzer. Es kann aber passieren, dass Daten kommen um den Terminal-Bildschirm zu füllen, und kurz darauf nochmal Daten um beispielsweise mit Hilfe von Escape-Sequenzen ein "Popup" anzuzeigen. Hier schließt sich auch die Frage an meines ersten Beitrages an, ob ich erkennen kann, ob der Server noch vor hat Daten zu senden.
    Generell ist zur Interaktion aber ein Login nötig, so dass ein Trennen der Verbindung, während keine Interaktion stattfindet, eher nicht in Frage kommt.

    Zitat Zitat von sheel Beitrag anzeigen
    Verwendest du da irgendeine Telnetklasse oder pure Sockets?
    Ich denke, ich würde gerne eine Telnetklasse verwenden. Warum das Rad zwei Mal erfinden und sich mit Sockets quälen. Was denkst du?

    Zitat Zitat von sheel Beitrag anzeigen
    Ist das eine Frage?
    Die Frage fehlte tatsächlich. Ich konnte leider kein solches Modul für Java finden, hat hier vielleicht noch jemand einen Tipp?

    Zitat Zitat von sheel Beitrag anzeigen
    Swing ist ein fixer Teil von Java, ist also PF-unabhängig.
    Man kann damit relativ leicht "normale" GUIs mit Textfeldern/Buttons/etc machen (codemäßig) oder mit Zusatzsoftware zum Compiler auch grafisch zusammenklicken.
    "Normale" GUIs klingt so, als könnte man schnell an die Grenzen von Swing stoßen .. ?


    Auf jeden Fall schonmal danke für deine Antwort.
     

  4. #4
    Avatar von Bratkartoffel
    Bratkartoffel Bratkartoffel ist offline gebratene Kartoffel
    tutorials.de Premium-User
    Registriert seit
    Jun 2007
    Ort
    Passau (Niederbayern)
    Beiträge
    1.394
    Hi Tomek CH und herzlich willkommen hier

    erstmal ein großes Lob dass du dir so viele Gedanken schon vorab über die Planung deines Projektes macht. Sieht man leider immer seltener, die meisten schreiben (hier) nur so was wie: Das will ich haben, wie geht das?

    Nun zu deinen Fragen:
    Hatte auch mal so was ähnliches geplant und dafür die telnet-Klassen von apache verwendet. Ist quasi ne Bibliothek mit einigen sehr praktischen Klassen (org.apache.commons.net.telnet.*) die für die Kommunikation mit einem Telnet-Server zuständig sind.
    Hier ein paar Links dazu: apache commons telnet doku, Beispiel hierzu

    Mit Swing kann man schon sehr viel machen, keine Angst, du wirst kaum so schnell an die Grenzen des Frameworks stoßen Es gibt halt ein paar speziellere Sachen, die man zwar auch mit Swing schreiben kann, wobei andere Frameworks aber leichter und schneller zu schreiben sind.

    Gruß
    BK
     
    Über eine gute Bewertung freut sich jeder ;)
    Bitte erledigte Threads als "Erledigt" markieren.

    "Though a program be but three lines long, someday it will have to be maintained.''
    -- Geoffrey James, "The Tao of Programming"

  5. #5
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Da Java meines Wissens keine fixe Telnetlib eingebaut hat musst du dann auf eine von einem Dritthersteller ausweichen. Die Sache mit den Threads und Verbindsenden hängt dann davon ab, welche Lib das ist.

    Zu dem PERL-Modul: Kannst du mir einen Link geben, damit man genauer Infos darüber bekommt?

    Swing: Ich meinte nur, dass es eher auf Textfeld-Button-etc-GUIs ausgerichtet ist statt 2D-Spiele etc.
    Möglich ist letzteres auch, gibt aber speziellere Sachen dafür.

    Gruß

    PS. Nachträglich Willkommen bei tutorials.de
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  6. #6
    Tomek Ch Tomek Ch ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    Vielen Dank für die zahlreichen und schnellen Antworten bisher.

    Die Apache commons sind mir nach einiger weiterer Recherche auch aufgefallen. Die meisten Sachen die man findet, verwenden sie. Da es weit verbreitet zu sein scheint, es steht wohl auch eine größere Community dahinter, gehe ich davon aus, dass es vermutlich auch das sinnvollste und beste ist, um in Java mit Telnet zu arbeiten.

    Zitat Zitat von sheel Beitrag anzeigen
    Die Sache mit den Threads und Verbindsenden hängt dann davon ab, welche Lib das ist.
    Mir fehlt durch die Stateless-Programmierung die Vorstellung, wie die Verbindung aufrecht erhalten wird, und bin deswegen auf einen Thread gekommen, der die Kommunikation übernimmt. Als Alternative könnte ich mir nur eine Endlosschleife vorstellen, die ständig am InputStream horcht, und die sonstige Applikation "blockiert".

    Zitat Zitat von sheel Beitrag anzeigen
    Zu dem PERL-Modul: Kannst du mir einen Link geben, damit man genauer Infos darüber bekommt?
    Ja, hatte ich im ersten Post angegeben, hier nochmal: http://www.ivarch.com/programs/termvt102.shtml
    Ein Fachwort in dem Zusammenhang scheint "Screen-scraping" zu sein. Man analysiert also nicht den ankommenden Datenstream selbst, sondern emuliert ein Terminal, und erzeugt sich beispielsweise eine 80x24 Matrix mit den Daten, wie sie im Terminal angezeigt werden würden. Dadurch lassen sich die Daten auch einfacher interpretieren. Beispiel: Feld "Vorname" in der Terminalapplikation fängt bei Koordinate {10, 5} an, während ich mich im Datenstream durch Escapesequenzen und andere Bytes hätte kämpfen müssen.

    Der Perl-Code gibt einen Eindruck davon, was bei so einer Terminal Emulation beachtet werden muss, allerdings kann ich mir im Moment noch keinen Rewrite des Moduls für Java vorstellen.
    Ich hab schon ein paar gute Resourcen gefunden, die sich mit Terminals beschäftigen, vor allem
    http://tldp.org/HOWTO/html_single/Te...OWTO/#termcap2
    ist eine extrem gute Informationsquelle. Da muss mich sich aber erstmal durcharbeiten.
    Generell ist mein Eindruck, dass es an guten und vollständigen Dokumentationen zu Terminals mangelt, gerade was die Steuer- und Escape-Sequenzen angeht. Da ist das PERL-Modul eine sehr willkommene zusätzliche Quelle, die auch auf programmiertechnischer Seite etwas Licht ins Dunkel bringt.

    Ich werde jetzt langsam versuchen einen Einstieg in die praktische Umsetzung des Projekts zu finden. Ein Swing-Tutorial dafür zu verwenden wird sicherlich nicht falsch sein, um ein Grundgerüst zu bauen, in dem die Telnet-Kommunikation einen festen Platz hat. Die GUI kann ich ja erstmal verwenden um Testbefehle abzusetzen und den Output des Servers zu analysieren/interpretieren.
    Habt ihr andere Vorschläge, sollte ich vielleicht erst mit der Backendprogrammierung auf Konsolenbasis anfangen? Ist es leicht das ganze dann in eine GUI Applikation zu portieren (speziell beziehe ich mich auf die Telnet Kommunikation)?

    Danke für die Willkommensgrüße!
     

  7. #7
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.503
    Ich würde mit der GUI anfangen, nicht zuerst Konsole.
    Da du aber noch keine/wenig Erfahrung mit Swing hast:
    Bau zuerst einmal die GUI, ohne dass sich hinter den Buttons wirklich was mit Telnet tut.
    Nur irgendeine GUI-mäßige Reaktion, damit man weiß, dass der Button funktioniert etc.

    Da du bei Swing UND Telnet noch unsicher bist kommst du sonst schnell durcheinander.

    Die Links muss ich mir erst noch durchlesen...
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  8. #8
    genodeftest genodeftest ist offline Mitglied Brillant
    Registriert seit
    Jun 2009
    Beiträge
    870
    Einstiegshilfe ist die http://openbook.galileocomputing.de/javainsel/ , besonders Kapitel 19 für Swing.
     
    Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
    Code java:
    1
    
    System.out.println("Hallo");
    hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.
    ___________
    Ubuntu Bug #1: Microsoft has a majority market share
    Casecon: Projekt leiser Käse

  9. #9
    Tomek Ch Tomek Ch ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    Hallo!

    Ich habe mich nun in verschiedene Themen der Java-Programmierung eingelesen, darunter Swing und Threads.

    Der nächste Schritt soll sein eine Telnet-Verbindung per GUI-Button aufzubauen, in einem Thread den Inputstream lesen und ausgeben, und über einen anderen Button die Verbindung wieder zu beenden.

    Einen generellen Plan des Aufbaus des Projekts habe ich auch schon, im Anhang ein Klassendiagramm.

    Der TelnetClient kümmert sich um Verbindung und Telnet-negotiation, verarbeitet also alle Telnet-spezifischen Daten. Dazu startet er einen Reader-Thread der die Daten liest und je nach Bytes an den TelnetClient oder an den VT220 weitergibt. Der VT220 ist der VT220 Emulator der an ein Terminal (einen Screen) angeschlossen ist. Im VT220 werden also u.A. die Escapesequenzen interpretiert und verarbeitet, während das Terminal die Enddarstellung auf einem imaginären Bildschirm repräsentiert (charMatrix).

    Was haltet ihr von dem ersten Entwurf? Wo könnte es Probleme geben? Habt ihr Tipps zur Implementierung?
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Telnet, VT102, GUI-classdiagram1.jpg  
     

  10. #10
    Tomek Ch Tomek Ch ist offline Rookie
    Registriert seit
    Sep 2011
    Beiträge
    5
    Hallo!

    Vielen Dank für die Antworten soweit. Habe meine Planung verfeinert und komme jetzt vermutlich alleine zurecht. Teilprobleme würde ich aber trotzdem gerne hier im Forum diskutieren, dieser Thread kann aber gerne geschlossen werden.

    Für alle die mitlesen:
    apache net commons bieten einen super Einstieg um mit Telnet anzufangen. Danach muss man schon wissen was man will und braucht. Das Java-Insel Buch hilft eigentlich bei allen Themen weiter
     

Ähnliche Themen

  1. Telnet Teamspeak
    Von Peter86 im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 19.07.08, 19:19
  2. Telnet Verbindung mit PHP
    Von notebook20000 im Forum PHP
    Antworten: 3
    Letzter Beitrag: 07.08.07, 10:41
  3. telnet mit ja bestätigen
    Von zero_cold im Forum Sonstige Sprachen
    Antworten: 0
    Letzter Beitrag: 13.10.05, 09:01
  4. telnet
    Von fischli im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 16.08.03, 16:55
  5. Telnet
    Von fungo im Forum Netzwerke
    Antworten: 3
    Letzter Beitrag: 23.08.02, 23:58

Stichworte