2014-09-22 8 views
2

Я создал простой telnet-сервер с использованием QTcpSocket. Он отлично работает, когда клиент (telnet) отправляет команду по одной строке за раз.Получить ключи вверх/вниз с помощью QTcpSocket

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

Есть ли способ заставить клиента telnet отправлять эти символы (без необходимости ввода ввода)? I подозревает, что это связано с небуферизованным режимом, но документы говорят, что QTcpSocket не может выполнять небуферизованный режим. Я на правильном пути? Есть ли способ сделать это?

ответ

2

Решение, как представляется, что сервер telnet должен сообщить клиенту перейти в режим символов. Это можно сделать, отправив последовательности управления IAC. Примером здесь:

Forcing telnet client into character mode

-1

Вы сказали, что запрограммировали сервер telnet с использованием QTcpSocket, и вы ничего не сказали о telnet-клиенте ... является коммерческим telnet-клиентом? вы запрограммировали его самостоятельно?

Если ваш вопрос

«как я могу заставить клиент телнет послать эти символы (без необходимости нажимать ввод)»

, то вы должны сообщить нам о телнете клиент ... иначе как мы можем вам помочь? Если вы используете клиент telnet для командной строки Linux, то я думаю, вы должны прочитать о LINEMODE (серфинг в Интернете вы можете получить подробные сведения об этом довольно легко).

Документация QTcpSocket говорит, что вы не можете открыть его в режиме QIODevice::Unbuffered, но это не означает, что вы не будете иметь возможность отправлять/получать отдельные символы ...

+0

Мое приложение-сервер Telnet должен работать для всех телнет клиентов, и предполагают, что они поддерживают XTERM/vt100/ANSI коды и т.д. Я не хочу программировать для одного клиента Telnet. – TSG

+0

@GenerationDSystems: вы правы, и это было именно то, что я имел в виду: если ваш вопрос: «Как заставить заставить telnet-клиент что-то сделать», тогда мой ответ «зависит от того, какой клиент telnet вы используете». .. Я уверен, что буферизация не происходит на 'QTcpSocket', который слушает прием некоторых данных ... так что на стороне сервера вы должны быть в порядке ... в любом случае вы не поделились с нами своим кодом, поэтому я не знаю, что вы делаете, и поэтому я просто догадываюсь ... –

+0

У меня нет соответствующего кода для публикации. Мой вопрос более общий. Я обрабатываю это, ища коды во входном потоке? Работают ли клиенты telnet в «LINEMODE» по умолчанию? не знаю, как подойти к проблеме – TSG