2008-11-07 13 views
7

Ich habe eine Anwendung, wo ich eine Socket-Verbindung von einem Telnet-Client akzeptieren und eine einfache, tastaturgesteuerte Zeichen GUI.Force Telnet-Client in den Zeichenmodus

Der Telnet-Client, zumindest unter Linux, wird standardmäßig in den Modus "Zeile für Zeile" versetzt, so dass ich immer ^]mode char manuell ausführen muss.

Ein Überfliegen der relevanten RFCs schlägt vor, dass, wenn meine Anwendung einfach die Zeichen IAC DONT LINEMODE (\377\376\042) sendet, sobald der Client verbindet, der Client in den Zeichenmodus gezwungen werden sollte. Es macht jedoch keinen Unterschied.

Was ist der einfachste Code, der den Job erledigen würde? Im Idealfall nur eine Zeichenfolge gesendet werden. Meine Anwendung kann alles aufnehmen, was der Client zurücksendet.

Antwort

6

Für was es wert ist, löste es mich.

// IAC WONT LINEMODE IAC WILL ECHO 

write(s,"\377\375\042\377\373\001",6); 

erhält die Fernbedienung (zumindest von einem telnet Xterm auf einer Linux-Box) in den richtigen Zustand.

8

Interessant. Ich hatte mehr Glück Senden

IAC WILL ECHO IAC WILL SUPPRESS_GO_AHEAD IAC WONT LINEMODE 
255 251 1 255 251     3 255 252  34 

Die IAC wont Linemode zu sein scheint überflüssig: mein Telnet-Client, ohne es auf den richtigen Zustand zu bekommen scheint, aber ich habe es für Vollständigkeit.

0

Kevins Lösung funktioniert super: write(s,"\377\375\042\377\373\001",6);

Obwohl der Kommentar etwas nicht stimmt. Es sollte "DO Linemode" sagen, nicht "WONT Linemode", das heißt: // IAC DO LINEMODE IAC WILL ECHO

(Quelle: rfc854)

+0

Der Standardzustand entspricht dem NVT (Basis Network Virtual Terminal), dass jedes Ende des Telnet Die Verbindung soll sich so verhalten, wie wenn die Verbindung deaktiviert ist, und nichts ist aktiviert, bis die Option, die ein Ende angeboten hat, mit ihrem WILLEN vereinbart wurde und die Antwort des anderen Endes und/oder die gleiche Option, die das gleiche Ende möchte anderes Ende zu tun wurde mit ihrem DO angefordert und das andere Ende ist als Antwort. Natürlich ist die Option in einer Richtung von der gleichen Option in der anderen Richtung getrennt - außer dass ECHO ein _spezieller Fall ist ... – SlySven

+0

... und es ist nicht erlaubt (kann nicht erinnern, ob es ein SOLLST NICHT oder ein MUSS NICHT) in eine Richtung zu ECHO, wenn die Rückwärtsrichtung bereits im ECHO-Modus ist! – SlySven