我正在尝试开发一个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 应用程序中。
最佳答案
您可能想要引用TN5250J project
您需要的协议(protocol)是 5250 over telnet。 5250 是 IBM i 使用的显示协议(protocol)。直接 telnet 缺少 5250 提供的某些控制代码、 key 和服务。您可以使 telnet 适用于简单的屏幕,但大多数不会。 VT-100 是 5250 的较差替代品。
关于java - 如何在 Java 中向 telnet/AS400 主机发送多行信息并以结构化格式读取结果屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59146555/