Java.Net.ConnectException: 接続タイムアウト
java.net
パッケージには、インターネット上の任意のサーバーとの接続に使用できる多くの関数が含まれているため、GET
や POST
などの残りの呼び出しに使用できます。
このチュートリアルでは、このパッケージを使用して基本的なネットワーク呼び出しを行い、直面して解決できるエラーに焦点を当てます。
Java で java.net
を使用してネットワーク呼び出しを行う
ネットワーク呼び出しを行うことは、Java 開発者が日常的に直面する最も重要なことの 1つです。 ネットワーク呼び出しを正しく行うと、アプリケーションがより堅牢になり、ユーザー エクスペリエンスが向上します。
java.net
パッケージには、ネットワーク呼び出しに関連する多くの機能があります。
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
class Main {
public static void main(String args[]) throws Exception {
HttpURLConnection.setFollowRedirects(true); // Defaults to true
String url = "https://www.delftstack.com/howto/java/";
URL request_url = new URL(url);
HttpURLConnection http_conn = (HttpURLConnection) request_url.openConnection();
http_conn.setConnectTimeout(100000);
http_conn.setReadTimeout(100000);
http_conn.setInstanceFollowRedirects(true);
System.out.println(String.valueOf(http_conn.getResponseCode()));
}
}
上記のコード セグメントは、url
変数に対して GET
リクエストを作成し、接続を開きます。 すべてがうまくいくと、応答コード 200
が出力されます。
ただし、試行回数が多すぎると、サーバーへの接続に失敗し、IOException
がスローされる場合があります。
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
class Main {
public static void main(String args[]) throws Exception {
URL url = new URL("https://reqres.in/api/users");
HttpURLConnection http = (HttpURLConnection) url.openConnection();
http.setRequestMethod("POST");
http.setDoOutput(true);
http.setRequestProperty("Content-Type", "application/json");
http.setRequestProperty("Content-Length", "0");
String body = "{\"name\": \"morpheus\",\"job\": \"leader\"}";
http.getOutputStream().write(body.getBytes("UTF8"));
System.out.println(http.getResponseCode() + " " + http.getResponseMessage());
http.disconnect();
}
}
上記のコード セグメントは、サンプル REST API サーバーに対して POST
リクエストを作成し、レスポンスを返します。
Java の java.net
パッケージのエラー
Java でネットワーク呼び出しを行う際に、Connection Timed Out
問題が発生する場合があります。 これらの問題を修正することは、ブラウザーで特定の URL が開かない理由と似ている場合があります。
それらは次のことが原因である可能性があります。
- URL の IP/ドメインが正しくありません。
- IP/ドメインに対応するサーバーがダウンしています。
- ファイアウォールがリクエストをブロックしたか、インターネットがプロキシの背後にある可能性があります。
- サーバーが IP をブロックリストに登録している可能性があります。
例えば:
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
class Main {
public static void main(String args[]) throws Exception {
URLConnection urlConnection = null;
OutputStream outputStream = null;
URL url = new URL("http://google.com");
urlConnection = url.openConnection();
urlConnection.setConnectTimeout(1);
}
}
出力:
Exception in thread "main" java.net.SocketTimeoutException: Connect timed out
at java.base/java.net.Socket.connect(Socket.java:648)
at java.base/sun.net.NetworkClient.doConnect(NetworkClient.java:177)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:474)
at java.base/sun.net.www.http.HttpClient.openServer(HttpClient.java:569)
at java.base/sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
...
したがって、上記の例外は、ソケットまたは URL への適切な接続を開くことができず、ポートの組み合わせまたはタイムアウトが URL に接続するのに不十分な場合にスローされます。この場合、urlConnection.setConnectTimeout(1); によって制限されます。
.
Java での Connection Timed Out
エラーを回避するために、次のことを試すことができます。
setFixedLengthStreamingMode()
を介してコンテンツの長さを設定します。- URL 接続が最初の試行で失敗した場合に備えて、接続を再試行します。
setConnectTimeout
関数を使用して、接続制限をより高い値に増やします。