1

LAN 上で「Base」という名前のコンピュータを探していますが、それが見つからず、戻ってくるのは ISP からのアドレスです (したがって、Net アクセスは確実に機能しています)。戻り値は「Base/81.200.64.50」です。基本的に、名前を見つけることはできません。エミュレーターを使用しています。私が使用しているコードは、Windows 上で動作する Java コードのコピーであり、正常に動作し、LAN アドレスを返します。私は何が欠けていますか???

コードは次のとおりです。

InetAddress address = InetAddress.getByName(Constants.serverNameStr);

OK - 問題は DNS ルックアップのようです。「Base」を「www.google.com」に置き換えると、Google の 74.125.230.145 になります。エミュレーターがローカル ルーターの DNS を使用して名前を解決できないようです。エミュレーターの設定を微調整しようとしましたが、運がありません。何か案は?


エミュレータのデバッグコンフィグにLANルーターのDNSも入れてみました。運がない

4

2 に答える 2

0

InetAddress.getByName()から有用な情報を取得できないという同様の問題がありますが、役立つ可能性のあるいくつかのことを理解しました。

  1. ISP(おそらくあなたが使用している)からのDNSを使用している場合、ISPは、要求したホストが見つからないときに、そのWebサイトの1つのIPアドレスを提供している可能性があります。たとえば、Comcastは、ホストが見つからない場合、実際のWebページのIPアドレスを返します。これに気付いたほとんどの人はこの動作を望んでおらず、ホームルーターのDNSアドレスをGoogleのDNSサーバーを指すように変更することで修正できます。8.8.8.8および8.8.4.4(プライマリおよびセカンダリDNSサーバー用)を使用します。GoogleのDNSサーバーも、一般的に高速で安全です。ルーターのDNSサーバーを変更した後、見つからないホストを要求すると、InetAddress.getByName()はUnknownHostExceptionをスローします。

  2. ホームルーターに接続されているデバイスのリストにローカルマシン名が表示されている場合は、InetAddress.getByName()の引数としてホスト名に「.local」を追加する必要がある場合があります。たとえば、Macラップトップのホスト名は「.local」で終わることがよくありますが、ルーターテーブルにはそれがユーザーに表示されません。(少なくとも、私のNetGearルーターはホスト名の「.local」部分を表示しません。)

于 2011-03-15T04:34:42.477 に答える