Я работаю над программой для Android, которая подключается к серверу через SSH для получения некоторых данных.
Проблема в том, что в случае отправки на сервер команды, которая ничего не возвращает (например, cat для пустого файла), моя программа зависает, по-видимому, блокируемая in.read ().
У меня есть точка останова на линии
if ((read = in.read(buffer)) != -1){
и в строках then / else под ним. Если я отлаживаю его, программа обычно прерывается в операторе if, но когда я нажимаю продолжить, программа просто снова зависает и никогда не достигает следующей точки останова.
Программа работает нормально, если на самом деле получает ответ от сервера, но я бы хотел защитить свою программу от зависания, если сервер не работает должным образом.
Я использую библиотеку J2SSH.
public String command(String command) {
command = command + "\n";
if (session.getSessionType().equals("Uninitialized") || session.isClosed()) {
openShell();
}
OutputStream out = session.getOutputStream();
InputStream in = session.getInputStream();
byte buffer[] = new byte[255];
int read;
String in1 = null;
String fullOutput = "";
try {
try {
out.write(command.getBytes());
} catch (IOException e){
Log.e(TAG,"Error writing IO stream");
e.printStackTrace();
}
boolean retrivingdata = true;
while (retrivingdata){
String iStreamAvail = "Input Stream Available "+ in.available();
if ((read = in.read(buffer)) != -1){
retrivingdata = true;
} else {
retrivingdata = false;
return null;
}
in1 = new String(buffer, 0, read);
fullOutput = fullOutput + in1;
if (read < 255){
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return fullOutput;
}