Я уже некоторое время пытаюсь выяснить это:
Я настроил клиент tachenet apache commons, который может отправлять команды на сервер и читать ответы. Моя программа в основном работает так:
TelnetClient telnetClient = new TelnetClient();
// Add option handlers
TerminalTypeOptionHandler ttopt = new TerminalTypeOptionHandler(
"VT100", false, false, true, false);
EchoOptionHandler echoopt = new EchoOptionHandler(true, false, true,
false);
SuppressGAOptionHandler gaopt = new SuppressGAOptionHandler(true, true,
true, true);
try {
telnetClient.addOptionHandler(ttopt);
telnetClient.addOptionHandler(echoopt);
telnetClient.addOptionHandler(gaopt);
} catch (InvalidTelnetOptionException e) {
System.err.println("Error registering option handlers: "
+ e.getMessage());
throw new IOException();
}
// Connect to server
telnetClient.connect(SERVER_ADDRESS, SERVER_PORT);
byte[] data = new byte[] { 'f', 'o', 'o', '\r', '\n' };
// Send "foo"
telnetClient.getOutputStream().write(data);
telnetClient.getOutputStream().flush();
// ...
// Erase previous input
data = new byte[] { (byte) TelnetCommand.IAC, (byte) TelnetCommand.EL,
'\r', '\n' };
telnetClient.getOutputStream().write(data);
telnetClient.getOutputStream().flush();
То, что я пытаюсь сделать, это отправить команду telnet EL, чтобы стереть всю строку ранее отправленных символов («foo»). Команды Telnet всегда отправляются с предшествующим символом IAC, и это то, что я тоже отправляю.
У меня есть рабочая реализация слушателя, который читает эхо-запросы серверов и распечатывает их.
Проблема в том, что когда я отправляю IAC-EL, символы не интерпретируются как команда. Символы IAC-EL вместо этого отражаются и добавляются к предыдущему вводу как "foo ø".
Может ли быть какая-то проблема с режимом строки, установленным на один символ за раз?
Также на стороне сервера работает VT100 через telnet. Может быть, есть какой-то способ отправить escape-последовательность VT100, чтобы стереть строку, например, "← [1K". Мне все равно не удалось отправить последовательность VT100 слишком далеко.