Как отправить строку стирания Telnet (EL) с помощью общих Apache Java?

Я пытался выяснить это некоторое время сейчас:

Я настроил клиент 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 через телнет. Возможно, есть какой-то способ отправить escape-последовательность VT100, чтобы стереть строку, например, "←[1K". Мне все равно не удалось отправить последовательность VT100 слишком далеко.

1 ответ

Решение

Вы понюхали, что на самом деле отправлено? Я ожидаю, что код Apache покинет IAC, поэтому вы действительно отправляете IAC-IAC-EL.

Вы должны звонить TelnetClient.sendCommand(EL).

Другие вопросы по тегам