0

ホスト名の代わりに解決された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

URLをそのまま使用すると(ドメイン名をIPアドレスに置き換えずに)正常に接続できます。

私が正しくやっているかどうか教えてください。

4

2 に答える 2

2

原則として、ホスト名ベースのURLを使用してみてください。同じIP上に複数のWebサイトがあり、サイト名のみで区別されることは珍しくありません(いわゆる仮想ホスティング)。あなたがしていることは、与えられたIP上に単一のサイトがある場合にのみ機能します。

ロードバランサーがバランシングする「サイト」ごとに1つのIPを持つことは非常に一般的ですが、2つの連続したリクエストに対して同じバックエンドに接続するという保証はありません。ただし、仮想ホスティングの使用を負荷分散レイヤーにまで拡張するWebロードバランサーがあります。

ホスト名ベースのURLでダウンロードを続けるようにします。

于 2011-06-17T11:07:36.433 に答える
0

VHostの問題を回避するための1つの解決策は、独自のDNSサーバーを使用し、接続しているホストに対して常に同じIPアドレスを返すことです。

これには、アプリケーションを変更する必要はありません。

于 2011-06-17T11:14:45.727 に答える