求解 java ssh2 BufferedReader.readLine方法不会返回null,while循环无法退出

yanghuashuiyue 2012-08-11 04:26:45
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);
}
}
}
...全文
269 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
MiceRice 2012-08-11
  • 打赏
  • 举报
回复
readLine要返回null,必须是对方把OutputStream给close()才行,否则始终都是可以等待接受新数据的状态。

所以要调整你的思路了。

50,547

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧