Предполагая, что вы имеете в виду команды, которые вы используете на удаленном хосте, а не команды telnet (IAC DON'T ECHO
и т. Д.), Вы не можете делать то, что хотите. Соединение telnet - это просто терминал, передающий символы взад и вперед. Он не знает, представляют ли какой-либо из этих символов команды и ответы на программу с другой стороны.
Так что действительно вопрос в том, как программно управлять некоторым интерфейсом командной строки, который был разработан для интерактивного использования. Ответ будет зависеть только от интерфейса командной строки, а не от метода, который вы используете для подключения к нему (telnet, ssh, RS232 serial ... у вас была бы такая же проблема в любом случае).
Человеческий оператор, для которого был разработан интерфейс командной строки, необходим для понимания подсказок, а также должен быть достаточно интеллектуальным, чтобы реагировать на неявку ожидаемого приглашения. Написание программы для этого для конкретного интерфейса командной строки может быть затруднено, если вам не повезло, и у него есть команда ввести неинтерактивный режим со структурированными ответами.
Инструмент, который обычно используют для написания такой программы, - expect.
Когда вы получаете строку подсказки назад? –
Я общаюсь с несколькими программами, которые индивидуально имеют строки. Это то, о чем я думал изначально. Это был бы грязный способ решения, но я уверен, что есть что-то более элегантное. – timonti
Вы пытаетесь написать свой собственный telnet-сервер? Вы еще не прочитали спецификацию Telnet? Команды Telnet имеют для них очень специфическую структуру. Вы читаете необработанные данные из сокета, поэтому вам нужно разобрать то, что вы получаете, и если команда неполна, чем вам нужно вернуться в сокет и прочитать больше необработанных байтов, чтобы закончить синтаксический анализ, чтение и разбор в цикле, как до тех пор, пока вы не получите полную команду, вы можете ее обработать. Это базовое сокетное программирование. –