Вы можете реализовать это либо на клиенте, либо на сервере.
Для реализации на стороне клиента есть два способа (которые в основном те же):
Когда клиент подключается, сервер отправляет список команд и их аргументов, и кэшируются в клиент. Когда пользователь нажимает клавишу TAB, клиент выполняет поиск этих кэшированных данных.
Когда клиент замечает нажатие клавиши TAB, он запрашивает у сервера список возможных завершений. Для скорости этот список должен быть кэширован на стороне клиента.
Итак, основное решение здесь: Сервер отправляет данные клиенту, клиент показывает данные.
Для реализации на стороне сервера, вы должны использовать телнет переговоры, чтобы сообщить клиенту, чтобы отправить сырые сырые символы и ключи без какого-либо вмешательства в сервер. Затем сервер может проверить ключ TAB и выполнить завершение.
Проблема заключается в том, что тогда вам нужно добавить все изменения в командной строке и запрос в код сервера, и не можете полагаться на клиента, это что угодно, кроме «немого терминала».
Имея все обработки сделано на стороне сервера имеет потенциал роста, который можно использовать практически любой клиент телнет (до тех пор, как он может обрабатывать переговоры телнет) и не должны сделать свой собственный клиент. Недостатком является то, что вам необходимо реализовать все функции редактирования командной строки самостоятельно на сервере и что задержки для нажатия клавиш могут быть высокими, поскольку каждый ключ должен быть отправлен на сервер, а затем повторен с сервера обратно.
Наличие пользовательского клиента имеет потенциал роста, что есть библиотеки, которые могут легко обрабатывать редактирование командной строки и помогать в завершении. Основной недостаток здесь заключается в том, что вы должны создать пользовательский клиент.
Возможно, вы захотите [узнать больше о протоколе telnet] (http://en.wikipedia.org/wiki/Telnet). Особенно [связанные RFC] (http://en.wikipedia.org/wiki/Telnet#Related_RFCs) (например, для [опции linemode] (http://tools.ietf.org/html/rfc1184)). –