QTCPServer und telnet
QTCPServer und telnet
Hallo zusammen,
Folgendes Problem: Ich habe ein Programm (deamon) ohne gui.
das Programm soll irgendwann von einem anderen programm gesteuert werden, das es noch nicht gibt. Damit ich mein Programm zur lauftzeit steuern kann, brauch ich ein Comandline Interface. Dazu will ich telnet zur hilfe nehmen.
Beispiel. Ich bau ein http-server, es gibt aber noch keine browser dafür:
telnet http://myserver 80
Dann kann ich in die telnet console schreiben:
GET / HTTP 1.0
und der (http) server gibt mir die index.html auf telnet aus.
Ich will natürlich kein http sondern bei definierten Befehlen
GET STATUS oder STARTJOB 1 2 3
eingeben und das Programm gibt mir den Status text bzw. OK zurück und startet den Job mit args 1 2 3
Ich will jetzt natürlich nicht den fertigen Code von Euch sondern nur folgende Hinweise:
1.
QTCP Server läuft.
Telnet konectet sich auf mein Program auf address + port
Wenn ich jetzt in die Telnet Konsole eingebe sehe ich nur zwei drei seltame coursour springen aber nicht den Text den ich eingebe.
Wie kann ich das dem QTCP Server bei bringen?
danke moviemax
PS. Der Server/Socket ist bisher so wie beim Chat beispiel aus den QT Demoprogrammen aufgebaut
Folgendes Problem: Ich habe ein Programm (deamon) ohne gui.
das Programm soll irgendwann von einem anderen programm gesteuert werden, das es noch nicht gibt. Damit ich mein Programm zur lauftzeit steuern kann, brauch ich ein Comandline Interface. Dazu will ich telnet zur hilfe nehmen.
Beispiel. Ich bau ein http-server, es gibt aber noch keine browser dafür:
telnet http://myserver 80
Dann kann ich in die telnet console schreiben:
GET / HTTP 1.0
und der (http) server gibt mir die index.html auf telnet aus.
Ich will natürlich kein http sondern bei definierten Befehlen
GET STATUS oder STARTJOB 1 2 3
eingeben und das Programm gibt mir den Status text bzw. OK zurück und startet den Job mit args 1 2 3
Ich will jetzt natürlich nicht den fertigen Code von Euch sondern nur folgende Hinweise:
1.
QTCP Server läuft.
Telnet konectet sich auf mein Program auf address + port
Wenn ich jetzt in die Telnet Konsole eingebe sehe ich nur zwei drei seltame coursour springen aber nicht den Text den ich eingebe.
Wie kann ich das dem QTCP Server bei bringen?
danke moviemax
PS. Der Server/Socket ist bisher so wie beim Chat beispiel aus den QT Demoprogrammen aufgebaut
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
Dein Server wartet auf Port 80 und wertet aus was er so alles an Volltext empfängt. Ist was brauchbares dabei, springt er in die dazugehörende Funktion.
Bsp:
PS: Wo hast du denn Rechtschreibung oder ähnliches gelernt?? (konectet, QTCP Server, Konsole/console, coursour, bei bringen, Chat beispiel, Ich bau ein http-server) Es ist keine Wonne deinen Text zu lesen, zumal der Textfluss auch ziemlich abgehackt ist...
Wenn man eine vernünftige Antwort will sollte man sich auch bemühen eine vernünftige Frage zu stellen..
Bsp:
Code: Alles auswählen
if(command.contains("GET"))
{
if(command.contains("STATUS"))
{
sendStatus();
}
}Wenn man eine vernünftige Antwort will sollte man sich auch bemühen eine vernünftige Frage zu stellen..
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Auszug aus der wikipedia:Christian81 hat geschrieben:ssh: Warum sollte man sowas dafür benutzen??
Reicht das als antwort?SSH ermöglicht eine sichere, authentifizierte und verschlüsselte Verbindung zwischen zwei Rechnern über ein unsicheres Netzwerk. Dadurch dient es unter anderem als Ersatz für die Vorgänger rlogin, telnet und rsh; diese übertragen jeglichen Netzverkehr, darunter auch die Passwörter, unverschlüsselt und sollten daher nicht mehr verwendet werden.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
Das mit dem Echo funktioniert, wenn der Server ein greeting sendet.
Jetzt muss ich nur das protocol und die state machine implementieren.
Werde \n\n als "befehl ende" nehmen.
Was hier ssl bringen soll weiß ich auch nicht. praktisch kann man ja immer ` nen secure layer dazwischen schieben falls man das braucht.
moviemax
PS. Frohe Ostern
Jetzt muss ich nur das protocol und die state machine implementieren.
Werde \n\n als "befehl ende" nehmen.
Was hier ssl bringen soll weiß ich auch nicht. praktisch kann man ja immer ` nen secure layer dazwischen schieben falls man das braucht.
moviemax
PS. Frohe Ostern
So ich habe jetzt folgenden Stand:
// class Connection : public QTCPSocket { ...
Der Server erzeugt pro incomingConnection() einen
Thread. In dessen run() Funktion erzeuge ich ein Exemplar vom
Typ Connection und rufe exec() auf.
(bis hier ähnlich wie qtDemo -> Netzwerk -> (threaded) FortuneServer ,
Anstatt den fortune clienet zu starten kann man auch mit telnet sich seine
Zukunft vorraussagen lassen
)
Verbinde ich mich mit "telnet host port" bekomme ich ein greeting und kann
danach irgendwas eingeben. Nach Eingabe von <enter> werden die Zeichen geparst.
So weit so gut! Nun soll ja mit der Eingabe von HELP und QUIT oder START_JOB .... etwas passieren.
Der Parser soll nun aufgrund des eingebenen Strings ein Befehl erzeugen
und diesen an eine Event Schleife senden:
http://de.wikipedia.org/wiki/Kommando_(Entwurfsmuster)
* Der Aufrufer ist meine Connection (QTCPSocket)
* Der Empfänger die QCoreApp Eventloop und der
* Klient die eigentliche Funktionalität des Programms.
Jetzt komme ich etwas ins schwimmen bezüglich QObject und QEvent.
Der Einfachheit wegen habe ich erst mal nur ein Typ "Command" (die sich im Namen unterscheiden, später wird das pro Commando wie im Entwurfsmuster definiert pro Befehlstyp eine abgeleitete Klasse von Command ).
Command ist aber abgeleitet von QObject, Klappt das so oder sollte Command eher von QEvent abgeleitet sein.
Es sollte auch in beiden Richtungen laufen: Klient - sendet befehl an Eventloop (Empfänger) und diese an Connection ... geht das auch wenn mehrere Verbindungen offen sind?
Gruß moviemax
// class Connection : public QTCPSocket { ...
Der Server erzeugt pro incomingConnection() einen
Thread. In dessen run() Funktion erzeuge ich ein Exemplar vom
Typ Connection und rufe exec() auf.
(bis hier ähnlich wie qtDemo -> Netzwerk -> (threaded) FortuneServer ,
Anstatt den fortune clienet zu starten kann man auch mit telnet sich seine
Zukunft vorraussagen lassen
Verbinde ich mich mit "telnet host port" bekomme ich ein greeting und kann
danach irgendwas eingeben. Nach Eingabe von <enter> werden die Zeichen geparst.
So weit so gut! Nun soll ja mit der Eingabe von HELP und QUIT oder START_JOB .... etwas passieren.
Der Parser soll nun aufgrund des eingebenen Strings ein Befehl erzeugen
und diesen an eine Event Schleife senden:
http://de.wikipedia.org/wiki/Kommando_(Entwurfsmuster)
* Der Aufrufer ist meine Connection (QTCPSocket)
* Der Empfänger die QCoreApp Eventloop und der
* Klient die eigentliche Funktionalität des Programms.
Jetzt komme ich etwas ins schwimmen bezüglich QObject und QEvent.
Der Einfachheit wegen habe ich erst mal nur ein Typ "Command" (die sich im Namen unterscheiden, später wird das pro Commando wie im Entwurfsmuster definiert pro Befehlstyp eine abgeleitete Klasse von Command ).
Command ist aber abgeleitet von QObject, Klappt das so oder sollte Command eher von QEvent abgeleitet sein.
Es sollte auch in beiden Richtungen laufen: Klient - sendet befehl an Eventloop (Empfänger) und diese an Connection ... geht das auch wenn mehrere Verbindungen offen sind?
Gruß moviemax