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