2008-11-07 3 views
7

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

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

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

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

ответ

6

Для чего это стоит, решил сам.

// IAC WONT LINEMODE IAC WILL ECHO 

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

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

8

Интересно. У меня было больше удачи, посылая

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

МАК WONT LINEMODE кажется излишним: мой телнет клиент, кажется, попасть в нужное состояние без него, но я оставил его для полноты.

0

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

Хотя комментарий немного неправильно. Надо сказать, "DO LineMode", а не "WONT LineMode", то есть: // IAC DO LINEMODE IAC WILL ECHO

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

+0

состояние по умолчанию эквивалентно NVT (базовая сеть Virtual Terminal), что каждый конец Telnet соединение должно вести себя так же, как при подключении отключено __everything__, и ничто не разрешено до тех пор, пока не будет предложен вариант, который один конец предложил, с их WILL и ответом DO другого друга и/или той же опцией, что и тот же конец другой конец дела был запрошен с их DO и другой стороной WILL в ответ. Конечно, опция в одном направлении отдельно от той же опции в другом направлении - за исключением того, что ECHO - это особый случай ... – SlySven

+0

... и он не разрешен (не могу вспомнить, является ли это НЕ ДОЛЖНЫ или НЕ ДОЛЖЕН) в ECHO в одном направлении, если обратное направление уже находится в режиме ECHOing! – SlySven

Смежные вопросы