Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
您可以通过Java中的Apache TelnetClient连接到AS400吗?_Java_Telnet_Ibm Midrange - Fatal编程技术网

您可以通过Java中的Apache TelnetClient连接到AS400吗?

您可以通过Java中的Apache TelnetClient连接到AS400吗?,java,telnet,ibm-midrange,Java,Telnet,Ibm Midrange,我正试图使用Java中Apache的TelnetClient连接到AS400。 现在的目标是简单地一行一行地连接和读取屏幕,并显示每一行。稍后我将重点讨论输入和交互 当我通过telnet连接时,我的程序在试图读取输入行时会“挂起”。我认为线程被以下命令阻塞:line=bfIn.readLine(),因为这是应用程序停止的地方。它没有崩溃,只是卡在那里了 如果我使用不同的主机和相同的程序连接到一个简单的telnet交换机,该程序会很好地打印出页面,因此我想知道是否有额外的步骤专门连接到AS400能

我正试图使用Java中Apache的TelnetClient连接到AS400。 现在的目标是简单地一行一行地连接和读取屏幕,并显示每一行。稍后我将重点讨论输入和交互

当我通过telnet连接时,我的程序在试图读取输入行时会“挂起”。我认为线程被以下命令阻塞:
line=bfIn.readLine()
,因为这是应用程序停止的地方。它没有崩溃,只是卡在那里了

如果我使用不同的主机和相同的程序连接到一个简单的telnet交换机,该程序会很好地打印出页面,因此我想知道是否有额外的步骤专门连接到AS400能否通过Apache TelnetClient for java连接到AS400?如果没有,您如何通过java连接到AS400并与页面交互(查看页面显示的内容)?

以下是我一直使用的代码:

 import org.apache.commons.net.telnet.TelnetClient;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.OutputStreamWriter;

public class AutomatedTelnetClient {
     private TelnetClient telnet = new TelnetClient();
     private InputStream in;
     private PrintStream out;
     private String prompt = "%";

    public AutomatedTelnetClient(String server, String user, String password) {
        try {
            // Connect to the specified server
             telnet.connect(host, 23);
             in = telnet.getInputStream();
             out = new PrintStream(telnet.getOutputStream());
             BufferedReader bfIn = new BufferedReader(new InputStreamReader(in));
             PrintWriter writer = new PrintWriter(telnet.getOutputStream(), true);
             System.out.println("BufferedReader ready to be read: " + bfIn.ready());

             try {
                String line;
                while ((line = bfIn.readLine()) != null) {
                    System.out.println(line);
                }
            }
            catch (IOException e) {
                System.out.println("Exception");
                e.printStackTrace();
            }

            telnet.disconnect();
            in.close();
            bfIn.close();
我认为可能出现的一个问题是BufferedReader可能无法在连接时提取AS400返回给它的内容,因此无法正确读取


请注意bufferedReader.ready()返回false。我已确保主机有效并使用命令行连接工作。

标准telnet可以与IBM I一起工作,但它并不理想,因为5250协议是为“一次屏幕”智能终端而设计的,而不是一次行或字符哑终端

你知道这件事吗

tn5250j是用Java编写的AS/400的5250终端仿真器


此外,对于移动访问,IBM还提供了一些其他功能。

它是否与Windows/Linux的本机telnet客户端一起工作?您的意思是主机是否在本机telnet客户端上工作?如果是的话,是的。您是否尝试过ApacheCommons库中的TelnetClientExample?我只是试着构建和运行它,它似乎在7.4版上运行良好。这将帮助您确定代码中是否存在问题,或者连接到的系统是否存在问题。但是它没有使用BufferedReader。我尝试了TelnetClientExample,得到了回复。但是,响应中包含的字符大多不正确。我所说的“不正确”是指字符似乎不是ASCII码(框中的小问号或奇怪的问号)。下面是一个例子(注意框内会有小问号):[?3l[?7h[6;53H[?3l[?7h[1;1H[2J[0m[1;22H[1m[0m[1m]更新:我删除了ANSI控制字符,似乎有更好的质量输出。我认为有一个“智能”的东西终端。不,我没听说过。但不幸的是,我不需要终端仿真器。我需要用Java访问页面,以便在Android设备上显示。我相信这个仿真器只对桌面界面有帮助,对吗?有没有办法一次使用一个字符,或者通过Java逐行使用?任何显示的东西都是5250屏幕将被称为*终端仿真器"是的,像Mocha TN5250这样的东西很好,但如果有意义的话,我基本上需要将该功能嵌入到我的应用程序中。我确实需要他们提供的功能,但我正在尝试在我的应用程序中创建一个更简单的版本。我建议从TN5250J开始…注意,我更新了到最新版本的链接网站的名称