2008-12-15 3 views
1

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

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

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

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

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

ответ

4

Похоже, вам нужно создать простой сетевой виртуальный терминал, который поддерживает команды no echo etc. Уже есть хороший ответ на SO: Telnet Server

+0

Вы на месте, Крис. RFC многое проясняет. Я очень упростил просмотр telnet; реализуя его как должный NVT, должен выполнить то, что я хочу. Благодарю. – Andrew 2008-12-15 09:35:15

2

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

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

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

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

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