Отключить символьное эхо в сетевом соединении Java - PullRequest
1 голос
/ 15 декабря 2008

У меня есть демон Solaris, написанный на Java6. Клиенты могут подключиться к нему с помощью интерфейса в стиле telnet. Они подключаются к определенному порту, и я читаю строки ввода и действую на них.

В какой-то момент мне нужно предложить пользователю ввести пароль, и пока он вводит, я хочу отключить отображение символов обратно клиенту telnet.

Код имеет объект Socket и создает InputStream из результата getInputStream () сокета, затем читает и буферизует символы из InputStream, разбивая их на границы cr / lf.

Я не вижу никаких атрибутов ни в InputStream, ни в Socket, чтобы отключить отображение символов обратно клиенту.

Может ли кто-нибудь подтолкнуть меня в правильном направлении?

Ответы [ 2 ]

4 голосов
/ 15 декабря 2008

Похоже, вам нужно создать простой сетевой виртуальный терминал, который поддерживает команды no echo и т. Д. На SO уже есть хороший ответ, к которому следует обратиться: Сервер Telnet

2 голосов
/ 22 февраля 2009

Вы должны понимать, откуда исходит эхо. TCP-соединения и java InputStreams не обеспечивают эхо самостоятельно. Программа telnet, которую пользователь обычно запускает, запускается в режиме «локального эха», что означает, что она выводит на экран все, что введено пользователем, на экран пользователя. Когда клиент telnet подключается к реальному серверу telnet, он обычно согласовывает режим «удаленного эхо», и в этом случае удаленная система предоставляет эхо. Когда telnet подключается к чему-то другому, например к серверу HTTP или SMTP, он просто остается в режиме локального эха.

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

Если вы сделаете это, вы также столкнетесь с проблемой «строка за разом» и «символ за временем». Telnet запускается в построчном режиме. Он учитывает ключи редактирования строки, такие как backspace, локально и отправляет строку на сервер только тогда, когда пользователь нажимает return. Если вы делаете удаленное эхо, то вам нужно отображать символы по мере их ввода пользователем, а не после того, как он нажмет return. Таким образом, вам придется поддерживать посимвольные символы и осуществлять редактирование строк на сервере.

Вам следует внимательно изучить программу сервера telnet на хосте вашего сервера. Может быть возможно использовать существующий сервер telnet в качестве интерфейса для вашей программы, а не переопределять все, что она делает. Удачи.

...