我正在尝试使用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 project吗?
tn5250j是用于用Java编写的AS / 400的5250终端仿真器。