Android:ホスト名の代わりに解決されたIPアドレスを使用する
-
28-10-2019 - |
質問
解決されたIPアドレスを使用してホスト名の代わりにサーバーに接続したいと思うでしょう。これが私のコードスニペットです:
// Get domain name from URL
String domainName = url.substring("http://".length(),
url.indexOf("/", 8));
// Get IP address as string
InetAddress inet = null;
try {
inet = InetAddress.getByName(domainName);
} catch (UnknownHostException e) {
Log.i(TAG, "The IP address cannot be resolved for " + domainName);
}
resolvedIP = inet.getHostAddress();
.
ここにIPアドレスを正常に取得できます。これで、URLを以下のように置き換えようとします。
url = url.replace(domainName, resolvedIP);
Now I connect to server:
URL download = new URL(url);
conn = (HttpURLConnection) url.openConnection();
conn.getInputStream(); //Throws IO Exception
.
(ドメイン名をIPアドレスに置き換えずに)URLを使用すると、正常に接続できます。
私が正しく物事をやっているのか教えてください。
解決
一般的な規則として、ホスト名ベースのURLを使用してください。同じIPに複数のWebサイトを持つことは、サイト名(いわゆる仮想ホスティング)によってのみ区別されます。あなたがしていることは、特定のIPに単一のサイトがある場合にのみ機能します。
ロードバランサには、それが残高ごとに1つのIPを持つことが非常に一般的ですが、2つの連続した要求に対して同じバックエンドに接続するという保証はまだありません。ただし、バーチャルホスティングの使用をロードバランシングレイヤーにすべての方法を延ばすWebロードバランサがあります。
私は単にホスト名ベースのURLによってダウンロードをスティックしようとします。
他のヒント
VHostの問題を回避するための1つの解決策は、独自のDNSサーバーを使用し、接続しているホストに対して常に同じIPアドレスを返すことです。
これには、アプリケーションを変更する必要はありません。
所属していません StackOverflow