我一直试图找出这一个现在一段时间:
我建立了一个apache commons telnet客户端,它可以将命令发送到服务器并读取响应。我的程序基本上是这样工作的:
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 ø”附加回前一个输入。
这可能是行模式一次设置为一个字符时出现问题吗?
另外服务器端通过telnet运行VT100。也许有一些方法可以发送VT100转义序列来删除该行,例如, “←[1K”。无论如何,我发送VT100序列的过程并不成功。