我目前有一個問題,實現jsch庫來從ZyXel開關中獲取信息。程序本身會抓取一些信息來確認交換機的類型,然後上傳正確的固件和配置。使用jsch時緩衝區問題
我的問題,對我來說,似乎是一個緩衝區問題。我沒有問題發送命令,但當我發送它時,根據我運行它的時間或頻率,我要麼獲得一半的信息,我應該得到或全部。我認爲這是因爲有時緩衝區並不會全部進入ByteArrayInputStream中,而是在這個時候我處於迷路狀態。我想知道是否有人可以指出我正確的方向對我的錯誤。我認爲這是一個基本的InputStream或JSF文檔問題誤解
謝謝!..我的代碼如下。
package ssh;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.jcraft.jsch.*;
public class ssh {
private static String user = "admin";
private static String host = "192.168.1.1";
private static String password = "1234";
private static String command = "";
public static void startAutomation() {
JSch jsch = new JSch();
Session session = null;
OutputStream output = null;
Channel channel = null;
try {
session = jsch.getSession(user,host,22);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking","no");
session.connect();
channel = session.openChannel("shell");
command = "show system-information\n";
output = runCommand(command, session, channel);
String test = "NOTHING";
if (output.toString().contains("ES-2024A")) {
test = "true";
command = "show run\n";
output = runCommand(command,session,channel);
} else {
test = "false";
}
System.out.println(test + " This is a 2024A");
} catch (JSchException | InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
channel.disconnect();
session.disconnect();
}
}
public static OutputStream runCommand(String c,Session session,Channel channel) throws InterruptedException, JSchException{
InputStream is = new ByteArrayInputStream(c.getBytes());
channel.setInputStream(is);
OutputStream outputInfo = new ByteArrayOutputStream();
channel.setOutputStream(outputInfo);
channel.connect(15*1000);
try {
is.close();
outputInfo.flush();
outputInfo.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return outputInfo;
}
}