我有isReachable
方法InetAddress
类有奇怪的行为。InetAddress isReachable方法有最小超时吗?
public boolean isReachable(int timeout)
- 当使用超时> 1500(毫秒),该方法等待给定的作为参数的确切时间 (如果目标IP是不可达当然.. )。
- 当使用超时< 1500,该方法等待1000ms的最大...
的代码非常简单:
InetAddress addr = null;
String ip = "10.48.2.169";
try {
addr = InetAddress.getByName(ip);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Timestamp s = new Timestamp(System.currentTimeMillis());
System.out.println(s + "\t Starting tests :");
pingTest(addr, 100);
pingTest(addr, 500);
pingTest(addr, 1000);
pingTest(addr, 1500);
pingTest(addr, 2000);
pingTest(addr, 2500);
凡pingTest被定义为:
public static void pingTest(InetAddress addr, int timeout) {
boolean result = false;
try {
result = addr.isReachable(timeout);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Timestamp s = new Timestamp(System.currentTimeMillis());
System.out.println(s + "\t (" + timeout + ") " + addr.toString() + " " + result);
}
然后输出是:
2017-09-07 16:45:41.573 Starting tests :
2017-09-07 16:45:42.542 (100) /10.48.2.169 false
2017-09-07 16:45:43.542 (500) /10.48.2.169 false
2017-09-07 16:45:44.541 (1000) /10.48.2.169 false
2017-09-07 16:45:46.041 (1500) /10.48.2.169 false
2017-09-07 16:45:48.041 (2000) /10.48.2.169 false
2017-09-07 16:45:50.541 (2500) /10.48.2.169 false
所以问题是:是否有一个最小超时InetAddress isReachable方法?(就像我怀疑1500年,但我怀疑,巨大的超时...)
或者,也许我只是做了一个巨大的错误,我仍然怀念......
告诉我,如果这还不够明确。
感谢您的帮助和想法。
看看这个OpenJDK [bug报告](https://bugs.openjdk.java.net/browse/JDK-8143397),其中用户报告一个无证的最小超时(搜索术语“最小值”)。尽管这份报告几乎没有确定性,但可能有助于证实您的经验。 – MarsAtomic