2011-12-15 34 views
4

私の問題は、以下の通りである。Javaの名前のDNSでIPアドレスを取得します

私はJavaプログラム、サーバーを持っている、それはクライアントからのTCP接続を待っています。 問題は、サーバが接続を待つために使用しているIPアドレスが時間とともに変化する可能性があるということです... だから、私はクライアントが何らかの方法でこのアドレスを取得できるようにします。 私はいくつかのDNSサーバを設定する必要があると思いますが、私は正確には分かりません。無料などのサービスがある場合...

だから私はそれがこのように動作すると思う: 開始時にサーバーは、そのIPを取得します。次に、いくつかのDNS(?)サービスにアクセスして、このIPを利用可能にします。 それでクライアントはgetByNameのようなものを作って、接続を確立するサーバのIPが何であるかを見てください。
このようになりますか?そうであれば、 Javaサーバーコードでこれはどのように使用できますか(どのように設定するのですか)

+0

これはホームネットワークですか?仕事をしている場合、これは既にネットワークチームによって管理されているはずです。サーバー側ではあまり変更されていません(後でリッスンしているのは、異なるネットワーク上に複数のインターフェイスがある場合のみです)。自宅にいる場合は、ルーターの設定を確認して、DNSをサポートできるかどうか確認してください。 – Nim

答えて

3

Javaアプリケーションがインターネット上のマシン上で実行されている場合、利用可能なサービスであり、すでにLAN上の他のマシンから少なくとも1つのIPを見ることができます。私がIPアドレスを取得するために以下に書いたのと同様のJavaコードを使用してください。

import java.net.*; 
import java.io.*; 

public class Ip { 
    public static void main (String[] args) throws IOException { 
    String hostname = args[0]; 

    try { 
     InetAddress ipaddress = InetAddress.getByName(hostname); 
     System.out.println("IP address: " + ipaddress.getHostAddress()); 
    } catch (UnknownHostException e) { 
     System.out.println("Could not find IP address for: " + hostname); 
    } 
    } 
} 

PS。 Javaサーバーアプリケーションを実行しているマシンのIPが変更されている場合(ホームマシン上で実行され、ISPが動的IPを割り当てている場合)、http://www.dyndns.comなどの無料サービスを使用します。この場合、IP変更の動的DNSに通知する必要があるため、少し複雑になります。一部のルータにはこの機能が組み込まれていますが、一部のルータには組み込まれていません。この場合、dynamicDNSに通知する必要があります。あなたのためにこれを行うインターネット上で利用可能なスクリプトがたくさんあります(通常はLinux/UNIX用です)。また、Windows用のフリーウェアツールがいくつかあります。私はWindowsでこれをしたことはありませんでしたが、私はLinuxでそれを行いました。うまく動作します。

+0

あなたの答えに感謝します。 dyndnsは私が使用しようとしていたもので、今設定しようとしています – kri8or

+0

あなたを助けてくれることを嬉しく思います。 – DejanLekic

-1

通常、クライアントはIPではなくDNSによってサーバーに接続する必要があります。 example.comに接続するようにクライアントを設定し、example.comというDNS名をIPアドレスを指すように設定してください。

+0

クライアントはさまざまな方法でサーバーに接続できます。時にはどんなIPでもない! (例:UNIXドメインソケット)すべてがデザインに依存します。第二に、IPが変更された場合(そして、明らかにOPから判断して)、DNSを(もし所有していれば)簡単に設定することはできません。さらに、サーバーのIPが静的になることは事前に分かっていますが、ホスト名は設定されていない可能性があります。 – DejanLekic

関連する問題