原因分析,Ganymed SSH-2这个包感觉不是很好用,比如我根据连接创建一个session的时候,在调用exeCommand方法的时候只能用一次,如果想继续用需要关闭session在一次重新打开,所以我本地就写了一个新的命令执行方法,直接获取输出流然后以字节码的形式flush出去,
public void sendCommand(String cmd) {
try {
this.dos.write(cmd.getBytes());
this.dos.write("\r".getBytes());
this.dos.flush();
try {
// 每次睡眠一下等待程序相应。
Thread.sleep(400);
} catch (InterruptedException ex1) {
}
} catch (IOException ex) {
}
}
这样就可以在一个session中执行多个命令了
在读取回显信息的时候使用的是BufferReader类的readLine方法,但是在读取最后的回显时发生了阻塞,程序开在这里,这个原因是,readLine方法在读取数据的时候要识别到\n 或者\r,如果返回的回显中不存在,则会继续等待数据,导致当前的程序无法进行下去,目前针对这个问题有多种解决的方法,包括读取字节码,然后自己在编码,或者只读取字符,使用read方法,但是这些方法都不好,会涉及很多的编码问题,啊,字符串的截取问题,缓冲区大小,如何动态计算,只能参照java中的readLine去写,但