Moin. Wie programmiert man am Besten eine Anwendung, welche ein Mini Telnet Terminal enthalten soll. Es soll ein Kommandopromt erscheinen und es sollen verschiedene Befehle entgegen genomen werden, die dann entsprechende Aktionen ausführen. Dabei sollen auch Parameter berücksichtigt werden. Macht man das am Besten über Stringfunktionen (scheiden, teilstrings filtern usw) und if then konstrukte?
Es gibt eine unendliche vielzahl an möglichkeiten das umzusetzen. Es kommt auch darauf wofür man es programiert, und woher die Eingaben kommen. Was du beschreibst ist eine Kombination aus 3 Dingen: 1) Die Eingabeschnittstelle. Im falle von Telnet wäre das eine TCP verbindung, denn telnet sendet einfach nur eingaben von stdin über eine tcp verbindung, und zeigt auf stdout an, was zurück kommt. Dies erfordert dann ein programm, welches tcp anfragen behandelt. Andere eingabeschnittstellen ohne telnet währen z.B. direkt über stdin, ohne netzwerk kram. 2) Ein interpreter/shell. Das programm welches die befehle entgegen nimmt. beispiele wären bash, sh, dash, csh, python, php, nodejs, ... Meistens werden die befehle von stdin oder einer Datei geholt, um das Netzwerk kann sich dann telnet oder ssh kümmern. 3) Die auszuführenden befehle. Hier wird meist zwischen Programmkonstrukten (if,while,etc.), builtins (eval,test,...) und befehlen unterschieden. Die umsetzung hängt dann aber immer von den Anforderungen ab. Auf einem UC könnte z.B. alles in einer anwendung sein, den netzwerkteil vom ip stack geregelt werden, der interpreter ein strcmp und die befehle eine liste. Den code sollte man dan aber trotzdem sauber unterteilen. Auf einem PC will man eventuell nur den shell teil umsetzen, oder einen Interpreter, jenachdem auch mit fixer befehlsliste. Es kommt eben ganz darauf an, was genau man wofür genau machen will, es gibt nicht wirklich die eine richtige lösung.
Ich vermute, du meinst eigentlich kein Telnet-Terminal, sondern einen Kommandozeilen-Interpreter. Was Daniel beschreibt, sind mehrere separate Programme, die auf einem Unix-artigen System üblicherweise alle zusammenspielen, um dir deine Kommandozeile auf den Bildschirm zu zaubern. Ein Telnet-Terminal tut dabei nichts weiter, als Eingaben des Benutzers entgegenzunehmen und weiterzuleiten, sowie empfangene Ausgabedaten anzuzeigen. T. schrieb: > Macht man das am Besten über Stringfunktionen (scheiden, teilstrings > filtern usw) und if then konstrukte? Diese wird man definitiv dafür benötigen. Zunächst mal musst du dir aber eine Syntax für deine Kommandos überlegen, und ob es wie eine typische Shell hauptsächlich externe Kommandos aufruft oder nur programminterne Funktionen verfügbar machen soll.
Rolf M. schrieb: > T. schrieb: >> Macht man das am Besten über Stringfunktionen (scheiden, teilstrings >> filtern usw) und if then konstrukte? > > Diese wird man definitiv dafür benötigen. Nicht unbedingt, man könnte auch einen lexer+parser wie lex und yacc oder bison verwenden, um einen Interpreter zu schreiben.
Hier gibt es einen ziemlich vollständigen Telnet-Server für Python. Er kümmert sich nicht nur um die TCP-Kommunikation, sondern macht auch Option-Negotiation und stellt einen einfachen Kommandozeilenparser einschließlich der automatischen Generierung eine "Hilfe"-Kommandos bereit: https://pypi.python.org/pypi/telnetsrv/0.4
Yalu X. schrieb: > Hier gibt es einen ziemlich vollständigen Telnet-Server für Python. Wenn ich mir den Eröffnungspost so durchlese, dann hält der Themenersteller Python wahrscheinlich für eine Schlange. ;-)
:
Bearbeitet durch User
T. schrieb: > s soll ein Kommandopromt erscheinen und es sollen verschiedene Befehle > entgegen genomen werden, die dann entsprechende Aktionen ausführen. > Dabei sollen auch Parameter berücksichtigt werden. Lade dir die Lernbetty runter, dort findest du genau was du suchst - und bereits weitestgehend fertig vorgekaut. Und nochwas: ne Python IST ne Schlange. Und wer 'subtil' für nen Blumendünger hält, hat's auch nicht gerafft. W.S.
Es wäre nun aber trotzdem sinnvoll zu wissen, in welcher Programmiersprache das Ganze denn implementiert werden soll. In Python kann man eben ganz anders vorgehen als etwa in C. Minimalbeispiel:
1 | #!/usr/bin/env python
|
2 | |
3 | def command_foo(args): |
4 | print "Command foo called with args " + str(args) |
5 | |
6 | def command_bar(args): |
7 | print "Command bar called with args " + str(args) |
8 | |
9 | while True: |
10 | input = raw_input("> ") |
11 | |
12 | cmd = input.split()[0] |
13 | args = input.split()[1:] |
14 | |
15 | cmd_func = globals().get("command_" + cmd) |
16 | |
17 | if cmd_func: |
18 | cmd_func(args) |
19 | else: |
20 | print cmd + ": Unknown command" |
Zusätzlich könnte man dann jeder Kommandofunktion auch noch einen Dokumentationskommentar geben und ein help-Kommando implementieren, das die Dokumentationskommentare aller Kommandofunktionen ausgibt. Versuch das mal so in C ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.