2008-11-07 12 views
7

Tengo una aplicación en la que acepto una conexión de socket desde un cliente de telnet y presento una interfaz gráfica de usuario sencilla basada en el teclado.Forzar el cliente de telnet en el modo de caracteres

El cliente de telnet, al menos en Linux, está predeterminado en modo de línea a la vez, por lo que siempre tengo que hacer ^]mode char manualmente.

Un resumen de los RFC relevantes sugiere que si mi aplicación simplemente envió los caracteres IAC DONT LINEMODE (\377\376\042) tan pronto como el cliente se conecta, el cliente debe ser forzado al modo de caracteres. Sin embargo, no hace ninguna diferencia.

¿Cuál es el código más simple que haría el trabajo? Idealmente solo una cadena para ser enviada. Mi aplicación puede absorber cualquier basura que el cliente devuelva.

Respuesta

6

Por lo que vale, lo resolví yo mismo.

// IAC WONT LINEMODE IAC WILL ECHO 

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

obtiene el control remoto (al menos Telnet de un Xterm en una caja Linux) en el estado correcto.

8

Interesante. Tenía más el envío de

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

El CAI costumbre LINEMODE parece ser redundante suerte: mi cliente telnet parece llegar al estado de derecho sin ella, pero lo dejé por completo.

0

solución de Kevin funciona muy bien: write(s,"\377\375\042\377\373\001",6);

Aunque el comentario es un poco mal. Debería decir "NO LINEMODE", no "WONT LINEMODE", es decir: // IAC DO LINEMODE IAC WILL ECHO

(Fuente: rfc854)

+0

El estado por defecto equivalente a la NVT (la Red Base de terminales virtual) que cada extremo del Telnet se supone que la conexión se comporta como cuando la conexión tiene __everything__ deshabilitado, y nada está habilitado hasta que la opción que un extremo ha ofrecido hacer haya sido acordada con su VOLUNTAD y la respuesta DO del otro extremo y/o la misma opción que ese mismo fin desea otro extremo para hacer ha sido solicitado con su DO y el otro extremo en respuesta. Por supuesto, la opción en una dirección es independiente de la misma opción en la otra dirección, excepto que ECHO es un caso_especial ... – SlySven

+0

... y no está permitido (no recuerdo si es un NO DEBE o un NO DEBE) a ECHO en una dirección si la dirección inversa ya está en modo ECHOing. – SlySven

Cuestiones relacionadas