求解 java ssh2 BufferedReader.readLine方法不会返回null,while循环无法退出
package test;
import ch.ethz.ssh2.ChannelCondition;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class Test {
public void sshConnect() {
}
public static void main(String args[]) {
try {
Connection conn = new Connection("192.168.1.100");
conn.connect();
boolean isAuthenticated = conn.authenticateWithPassword("root",
"wyp456");
if (isAuthenticated == false) {
throw new IOException("Authentication failed");
}
Session sess = conn.openSession();
sess.requestPTY("bash");
sess.startShell();
InputStream stdout = new StreamGobbler(sess.getStdout());
InputStream stderr = new StreamGobbler(sess.getStderr());
BufferedReader stdoutReader = new BufferedReader(
new InputStreamReader(stdout));
BufferedReader stderrReader = new BufferedReader(
new InputStreamReader(stderr));
BufferedReader inputReader = new BufferedReader(
new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(sess.getStdin());
String temp = "";
while (!temp.equals("exit")) {
System.out.print("");
temp = inputReader.readLine();
out.println(temp);
out.flush();
String line = null;
while ((line = stdoutReader.readLine()) != null) {//行读完毕,while也没有退出,证明返回值从来不会返回null
if (line.length() == 0) {
continue;
}else if(line.equals("[root@vmone ~]#")){//句没有匹配结果,但是实际上在控制台会有该行输出
//else if(line.equals("-rwxr-xr-x. 1 root root 64 Aug 3 02:37 test.sh")){
//如果换成上面的语句,执行ls -l命令的话,如果有匹配的话,会输出改行。测试过可行
System.out.println(line);
//break;上面这三条可行。
}
System.out.println("Here is the output from stderr:");
while (true) {
line = stderrReader.readLine();
if (line == null)
break;
System.out.println(line);
}
}
System.out.println("ExitCode: " + sess.getExitStatus());
sess.close();
conn.close();
System.out.println("close connection");
} catch (IOException e) {
e.printStackTrace(System.err);
System.exit(2);
}
}
}