Java ソケットを使用して ping プログラムを作成しています。私のプログラムのバグの 1 つは、時々接続できず、ずっとそこにとどまっていることです。そのため、タイムアウト (20 秒後) を追加しようとしていますが、ping は失敗します。しかし、方法がわかりません。
これが私のpingプログラムの一部です:
boolean result = false;
long before1 = System.nanoTime();
out.println(new byte[64]);
System.out.println("(1) Sent 64 bytes of data to " + address
+ "...");
try {
if ((in.readLine()) != null) {
int size = in.readLine().toString().getBytes().length;
long after = System.nanoTime();
long s = ((after - before1) / 1000000L) / 1000;
System.out.println("(1) Recieved reply from " + address
+ " (" + size + " bytes), time = " + s
+ " seconds...");
result = true;
} else if ((in.readLine()) == null) {
long after = System.nanoTime();
long s = ((after - before1) / 1000000L) / 1000;
System.out.println("(1) Failed to recieve reply from "
+ address + ", time = " + s + " seconds...");
result = false;
}
} catch (IOException exc) {
long after = System.nanoTime();
long s = ((after - before1) / 1000000L) / 1000;
System.err.println("(1) Failed to recieve reply from "
+ address + ", time = " + s + " seconds...\nReason: "
+ exc);
result = false;
}
しかし、次の代わりに、コードの任意の場所で経過時間を測定したいと思います。
long time = System.nanoTime();
コードの一部が何かをしているときにスタックすると、20 秒後にタイムアウトになります。
try/catch ブロックの開始時またはコード内の他の場所で 20 秒が経過したかどうかを測定して、ping 中にスタックしないようにする方法に関する提案はありますか?