java - 如何在 Java 中向 telnet/AS400 主机发送多行信息并以结构化格式读取结果屏幕

标签 java command-line telnet ibm-midrange command-line-tool

我正在尝试开发一个Java程序,它可以将多行信息发送到telnet/AS400主机,然后以结构化格式接收结果屏幕。例如,登录凭据(用户、通行证、库等)。

对于telnet/AS400,当用户使用命令提示符连接到主机时,它会显示多行,可以在其中输入输入值,然后将其发送到主机。 像这样:

command

[telnet command interaction

我们从示例中看到,可以使用 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/

相关文章:

java - Spring data JPA,hql查询在选择请求中加入@ManyToMany关系

c - 如何输入数组

c++ - 如何从命令行 (Windows 7) 编译和运行项目?

python ,预计: sendline() adding unexpected whitespace in sending text

java - InputStreamReader 的 readln 不起作用

java - 运行它但在 s :iterator tag 中没有显示

java - X509TrustManager 在不允许所有证书的情况下覆盖?

java - 如何计算集合/索引中的所有 token 计数

python - 运行 Python 脚本时出现错误

python - 通过 Windows 命令行运行 Python 脚本