私はAndroid用のプログラムを開発中です。SSH経由でサーバに接続してデータを取得しています。サーバが入力を返さないときのInputStream read()ブロック
問題は、コマンドがサーバーに送信されたときに、何も返されない場合(空のファイルにcatなど)、プログラムがハングするように見え、一見in.read()によってブロックされます。
私はライン
if ((read = in.read(buffer)) != -1){
とその下のその後/他のライン上にブレークポイントを持っています。私がそれをデバッグすると、プログラムは通常if文でブレークしますが、私がcontinueを押すと、プログラムはちょうど再度ハングし、次のブレークポイントにはなりません。
実際にサーバーから応答を受け取ってもプログラムは正常に動作しますが、サーバーが正しく連携していないと、プログラムがハングしないように保護したいと考えています。
私は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;
}
私はこれのdupだと思うhttp://stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-java-inputstream-with-a-timeout –