1

プロキシを使用してシステムがインターネットに接続しているかどうかを確認するのに役立つメソッドを作成しました。これは次のとおりです。

try {

    System.out.println("Checking internet connection availability.....");
    URL u = new URL("http://www.google.com/");
    HttpURLConnection uc = (HttpURLConnection) u.openConnection();
    uc.setReadTimeout(1);//I have tried this without timeout and with it too. But it didnt work
    System.out.println(uc.getResponseCode());
} catch (Exception ex) {
    System.out.println("Unable to connect to internet without proxy.....");
    System.out.println("Checking for any proxy settings from the PC");
    System.setProperty("java.net.useSystemProxies", "true");
    try {
        System.setProperty("java.net.useSystemProxies", "true");
        URL u = new URL("http://www.google.com/");
        HttpURLConnection uc = (HttpURLConnection) u.openConnection();
        System.out.println(uc.getResponseCode());
        System.out.println("Internet connection available");
    } catch (Exception e) {
        System.out.println("Internet connection not available :(");
    }
}

最初に、プロキシなしで URL 接続を開こうとしています (システムにインターネットに接続するためのプロキシがないことを前提としています)。タイムアウトを 1 ミリ秒に設定しました。サイトから応答コードを取得しようとしています。エラーが発生した場合 (タイムアウトなど)、catch ブロックで を に設定して、システムのプロキシを使用してインターネットに接続しようとしていuseSystemProxiesますtrue。しかし、その後もサイトからの応答が得られません。

プロキシ設定のあるシステムを使用しています。

私もキャッチブロックで次のことを試しました

Proxy next = ProxySelector.getDefault().select(new URI("http://www.google.com/")).iterator().next();
if (next.address() != null) {
    System.out.println("Detecting Proxy configurations.....");
    String proxy = next.address().toString();
    String proxyHost = proxy.substring(0, proxy.indexOf(":"));
    String proxyPort = proxy.substring(proxy.indexOf(":") + 1);
    System.out.println("Proxy Configuration : " + proxyHost + " @ " + proxyPort);
}

上記のコード ブロックも機能しません。誰でもこれで私を助けることができますか?

4

2 に答える 2

1

InetAddress.isReachable

そのアドレスが到達可能かどうかをテストします。実装によってホストに到達しようとする最善の努力が払われますが、ファイアウォールとサーバー構成によって要求がブロックされ、特定のポートにアクセスできる場合でも、到達不能ステータスになる場合があります。典型的な実装では、特権を取得できる場合は ICMP ECHO REQUEST を使用します。それ以外の場合は、宛先ホストのポート 7 (Echo) で TCP 接続を確立しようとします。ミリ秒単位のタイムアウト値は、試行にかかる最大時間を示します。応答を得る前に操作がタイムアウトした場合、ホストは到達不能と見なされます。負の値を指定すると、IllegalArgumentException がスローされます。

于 2013-03-28T06:46:34.543 に答える
0

catch ブロックの最初のコード スニペットで、次のコードを設定してみてください。

System.setProperty("http.proxyHost", "Proxy host");
System.setProperty("http.proxyPort", "Proxy Port");

プロキシがシステム プロキシとして登録されており、JVM から見えないようです。

于 2013-03-28T06:46:41.490 に答える