Перевести клиент telnet в режим ввода символов - PullRequest
7 голосов
/ 07 ноября 2008

У меня есть приложение, в котором я принимаю сокетное соединение от клиента telnet и выводю на экран простой графический интерфейс, управляемый клавиатурой.

Клиент telnet, по крайней мере в Linux, по умолчанию переходит в линейный режим, поэтому мне всегда приходится делать ^]mode char вручную.

Анализ соответствующих RFC предполагает, что если мое приложение просто отправило символы IAC DONT LINEMODE (\377\376\042), как только клиент подключится, клиент должен быть переведен в символьный режим. Тем не менее, это не имеет никакого значения.

Какой самый простой код, который бы выполнял эту работу? В идеале просто строка для отправки. Мое приложение может поглотить любой мусор, который клиент отправляет обратно.

Ответы [ 3 ]

8 голосов
/ 01 июля 2009

Интересно. Мне повезло больше, отправив

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

IAC WONT LINEMODE кажется избыточным: мой клиент telnet, кажется, без него достигает нужного состояния, но я оставил его для полноты.

6 голосов
/ 11 ноября 2008

За то, что стоит, решил сам.

// IAC WONT LINEMODE IAC WILL ECHO

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

переводит пульт дистанционного управления (по крайней мере, telnet из Xterm на Linux) в правильное состояние.

0 голосов
/ 22 мая 2016

Решение Кевина прекрасно работает: write(s,"\377\375\042\377\373\001",6);

Хотя комментарий немного неправильный. Должно быть написано «DO LINEMODE», а не «WONT LINEMODE», т.е. // IAC DO LINEMODE IAC WILL ECHO

(Источник: rfc854 )

...