从JAVA,Android检查更快的IP路由器地址

时间:2014-05-28 10:11:20

标签: java android sdk

我正在尝试检查特定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;
}

1 个答案:

答案 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