我正在开发一个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;
}
答案 0 :(得分:0)
读写应该在不同的线程中完成。 read()是一种阻塞方法,等待服务器提供数据。