【发布时间】:2020-03-27 12:23:58
【问题描述】:
我正在尝试开发一个 Java 程序,它可以向 telnet/AS400 主机发送多行信息,然后以结构化格式接收结果屏幕。这方面的一个示例可能是登录凭据(用户、通行证、库等)。
使用 telnet/AS400,当用户使用命令提示符连接到主机时,它会显示多行,可以在这些行上输入输入值,然后发送到主机。 像这样:
[
我们从示例中看到,可以使用 Windows 命令行向 telnet 主机发送多行信息。我想创建一个具有相同功能的 Java 程序(多行发送命令并以结构化格式读取屏幕)。
我尝试使用 Apache Telnet 客户端来阅读使用 Apache Commons IOUtils 的屏幕。像这样:
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.telnet.TelnetClient;
import examples.util.IOUtil;
// This class requires the IOUtil support class!
public final class Telnet {
public static final void main(String[] args) {
TelnetClient telnet;
telnet = new TelnetClient();
try {
telnet.connect("hostname", 23);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
// IOUtils
IOUtil.readWrite(telnet.getInputStream(), telnet.getOutputStream(), System.in, System.out);
try {
telnet.disconnect();
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
System.exit(0);
}
}
这会导致从 InputStream 读取屏幕然后显示它。像这样
[2J [1;22H[1m[0m [1m Sign On [0m [2;47H System . . . . . : NLSI5D [3;47H Subsystem . . . . : QINTER [4;47H Display . . . . . : QPADEV000Q [6;16H User . . . . . . .
从这一点开始,我无法选择将信息发送回哪条线路。更具体地说,如果我输入任何文本并通过控制台发回,它会认为它是用于用户名字段的。我无法指定任何其他行或字段。
是否可以选择您要发送有关使用 Java 的信息的字段输入行?
它需要在 Java 中的原因是我可以将它嵌入到 Android 应用程序中。
【问题讨论】:
-
您可能正在寻找终端仿真器。但是,终端仿真器不会知道哪一行是什么……它不会知道您正在输入用户名或密码。它只知道如何显示文本和管理光标等... Java 有很多终端仿真器项目。
-
你到底想完成什么?在主机上运行命令?从主机检索数据?
-
我想我正在尝试从主机发送和接收命令。如果您可以考虑发送文本命令。例如,将用户和密码信息发送到主机,然后在它显示的下一页上检索信息。
标签: java command-line telnet ibm-midrange command-line-tool