好的,我终于找到了真正有效的解决方案:
InetAddress addr = InetAddress.getByName("192.168.1.121");
addr.isReachable(1000)
像魅力一样工作,反应非常快。事实上,我将它与套接字一起使用,所以在我的情况下,它的工作方式如下:
new Thread() {
public void run() {
while(true) {
try{
ArrayList<Socket> arr = new ArrayList(clients.values());
for(int i=0; i<Main.clients.size(); i++){
try
{
InetAddress addr = InetAddress.getByName(arr.get(i).getInetAddress().toString().replace("/", ""));
System.out.println(addr.isReachable(1000));
}
catch (IOException e)
{
System.out.println("connection probably lost");
e.printStackTrace();
}
}
Thread.sleep(1000);
} catch (Exception e) { System.out.println("Shit happens: "+e); }
}}
}.start();
它不是真正优化的代码,而且看起来很糟糕,但你得到了它背后的想法。整个代码用于可达主机检测线程。