没有到主机的路由:连接

问题描述 投票:0回答:2

我从网站获取我的公共IP,但有时我会收到此错误:

java.net.NoRouteToHostException: No route to host: connect
    at java.net.DualStackPlainSocketImpl.connect0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at sun.net.NetworkClient.doConnect(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.openServer(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
    at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    at java.net.URL.openStream(Unknown Source)
    at Connection.getIp(Connection.java:86)
    at Connection.setIP(Connection.java:31)
    at Connection.connect(Connection.java:67)

我猜是因为系统还没有从网络上得到回复,无法继续,但我确定我错了..

为什么会发生这种情况?我怎样才能“修复”它?

public String getIp() throws IOException {
    URL whatismyip = new URL("http://icanhazip.com");
    BufferedReader in = new BufferedReader(new InputStreamReader(whatismyip.openStream()));
    return in.readLine();
}

这是一种VPN管理系统,所以我可以重新连接并更改VPN的IP,但我需要检查IP是否已更改,这就是我的做法,并且此方法发生错误:

public boolean connect() throws IOException, InterruptedException {
    String ip = this.setIP();
    if (ip != null) {
        if (ip.equals(this.defaultIp)) {
            System.out.println("equals");
            previousIp = ip;
            HMACommand.connect();
            Thread.sleep(500);
            while (ip.equals(this.defaultIp) || ip == null) {
                if (ip == null) {
                    System.out.println("Is null");
                    return connect();
                }
                ip = this.setIP();
                Thread.sleep(75);
            }

            return true;
        }
        else {
            this.previousIp = ip;
            HMACommand.reconnect();
            Thread.sleep(500);
            while (ip.equals(this.defaultIp) || ip.equals(this.previousIp) || ip == null) {
                if (ip == null) {
                    return connect();
                }
                ip = this.setIP();
                Thread.sleep(75);
            }
            return true;
        }
    }
    else {
        boolean flag = connect();
        return (flag) ? flag : false;
    }
}
java networking ip
2个回答
1
投票

Java 代码中看起来不像是问题。这更多是一个较低级别的网络和路由问题。首先使用系统级工具检查从您的计算机到该域名的路径。


0
投票

我花了几个小时“没有路由到主机”——例外。然后我意识到我使用 -Djava.net.preferIPv6Addresses=true 启动了应用程序,但系统未配置为 IP v6。

© www.soinside.com 2019 - 2024. All rights reserved.