我正在尝试检查特定IP地址的连接,所以问题是,当我想打开这个地址(我的IP路由器地址),如果我没有连接到这个IP,我有等待很多时间,告诉我我没有联系。
我试过这个,以及很多不同的java代码,但没有成功:
public String checkConnection() throws IOException {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
try {
int timeout = 2000;
InetAddress[] addresses = InetAddress.getAllByName("www.fritz.box");
for (InetAddress address : addresses) {
if (!address.isReachable(timeout)) {
return "YES";
}
}
}
catch (IOException exc) {
return "NO";
}
return null;
}
答案 0 :(得分:0)
地址解析在InetAddress.getAllByName("www.fritz.box")
完成,默认超时为1分钟(如果我没记错的话)。解决方案是在另一个线程中运行此请求并询问结果。
考虑将一个类实现为folows:
public class DNSResolver implements Runnable {
private String domain;
private InetAddress inetAddr;
public DNSResolver(String domain) {
this.domain = domain;
}
public void run() {
try {
InetAddress addr = InetAddress.getByName(domain);
// when IP address is found, make it accessible
set(addr);
} catch (UnknownHostException e) {
// IP address has not been found, ignore
}
}
public synchronized void set(InetAddress inetAddr) {
this.inetAddr = inetAddr;
}
public synchronized InetAddress get() {
return inetAddr;
}
}
然后像这样使用它:
DNSResolver dnsRes = new DNSResolver(host);
Thread t = new Thread(dnsRes);
// start resolving address in another thread
t.start();
// wait for a second for result
t.join(1000);
InetAddress inetAddr = dnsRes.get();
代码来自http://thushw.blogspot.com/2009/11/resolving-domain-names-quickly-with.html。