2012-01-08 2 views
1

Можно ли удалить строку ввода в сеансе telnet из буфера, поэтому, когда вы нажимаете клавишу ввода, текст, который вы набрали, удаляется, но все же отправляется на сервер telnet?Удалить строку ввода в сеансе telnet

Я знаю, что существует способ отправки определенного символа, который перемещает курсор в начало строки, а затем перезаписывает строку новой, но поскольку новая строка chatact помещается в буфер, Пройдите мимо этого. Есть ли способ обойти это?

Пример: (Вторая строка ввода пользователя)

Welcome to my imba text game! 
pick up axe 

Затем нажмите клавишу ВВОД и буфер экрана читает:

Welcome to my imba mud game! 
[You picked up the axe] 

Update:

Я думаю, что ключ заключается в том, чтобы установить telnet-клиент в некотором режиме, который не отвечает на локальный вход. Я обнаружил, что отправка некоторых магических символов клиенту может изменить режим. Я нашел этот пример, и я не знаю, что это значит, но он запрещает ввод данных в telnet-клиенте. Однако вход никогда не отправляется на сервер, так что это всего лишь половина ответа.

socket.send("\377\375\042\377\373\001") 

Возможно, это потому, что я читаю ввод строки за строкой. Я бы хотел, чтобы он читался как char by char. Не знаю, как изменить это, чтобы сделать это, хотя:

fileobj = socket.makefile() 
while True: 
    line = fileobj.readline() 
    ... 
+0

Разве это невозможно или мой вопрос неясен? – oskob

ответ

1

Я думаю, эта проблема не имеет особой связи с GEvent, поскольку это гнездо API похож на оригинальный модуль сокета. И вопрос не зависит от выполнения квазипараллельной игры зеленых геевтов. Попробуйте использовать socket.recv() вместо fileobj.readline().

0

Я в конечном итоге использовал socket.rscv(), но я не знаю, было ли это важно. Решение было это волшебство sequens переговоров гольцов, что я просто послать к телнет клиента при подключении:

socket.send(chr(0xff) + chr(0xfb) + chr(0x01) + chr(0xff) + chr(0xfb) + chr(0x03) + chr(0xff) + chr(0xfd) + chr(0x0f3)) 

Это в основном говорит клиенту использовать символ в режиме полукокса и дерна выключения местного вторя. Таким образом, когда я получаю char, я добавляю его в lineBuffer и отправляет его с префиксом «\ r», чтобы перезаписать последнюю строку. Если char является возвратным символом, я разбираю строкуBuffer. Прекрасно работает!

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