2009-06-17 5 views
13

このような状況になると、MacBook Proに2つのネットワークインターフェイスがあります。 1つは静的に定義されたイーサネットインターフェイスで、もう1つはDHCPで設定されたワイヤレスインターフェイスです。JVM(またはIDE)が使用するネットワークインターフェイスを指定することは可能ですか

私は(IntelliJの8)だけではなく、単にJVMを介して、または私のIDEAのいずれかを介して、リスト内の最初のものを選んで、私の静的有線インタフェースを使用するために、特定のJavaプロジェクトを設定する方法を見つけ出すために

をしようとしています

私は仮想環境が私の​​有線インターフェイスだけを供給しているが、この広告のパフォーマンス上の問題と、Windows/OSX間のフリップの一般的な頭痛のVM웨어のインスタンスを介してこれを達成することができた。

これまで私はjvmプロパティを見つけることができず、どのnicが使用されるかを指定したり、それを定義するIntelliJのドキュメントを見たりすることはできませんでした。できるだけ痛みを伴わずにこれを解決する方法について誰かが考えているなら、私は助けに感謝します。

答えて

2

はい、あなたが道に従うことによって指定することができます。

int port= 52000; //いくつかの空きポート172.16.30.205が私のPCのIPアドレスの一つである

MulticastSocket msocket = new MulticastSocket(port);

msocket.setInterface(InetAddress.getByName("172.16.30.205"));

と私はインターフェイスを介して通信したいと思います。

4

通信に使用されるNICは、どのアドレスにアクセスできるかに応じて最適な「ルート」に応じてオペレーティングシステムによって選択されます。特定のNICを選択するために、NICドライバの上にあるアプリケーションのための方法はありません。特定のアドレスにバインドされたポートでリッスンしているときにのみ閉じることができます。これは、サーバーを実行している場合にのみ適用されます。

NICに特有のルートの「メトリック」を変更して、OSに優先させるように設定できます。

+0

これは私が恐れていた答えです。私は現在、ダックテープのVMWareソリューションを適用しようとします。 私は、誰がそれを呼んでいたかに応じて、単にnics間のトラフィックを移動させるインテリジェントなプロキシの使用についても考えていました。 –

+2

この回答は正しくありません。ローカルソケットを特定のローカルIPアドレスにバインドすると、対応するNICが使用されます。 – EJP

12

java.net.Socketには、どのローカルIPアドレスをバインドするかを指定するコンストラクタがあり、各ネットワークインターフェイスには独自のIPアドレスが割り当てられます。

しかし、java.net.Socketから上位​​のプロトコル(HTTPなど)に移行することは別の問題ですが、そのようなことは指定しないでください。

これを行うためのJVMレベルの方法はわかりませんが、悲しいことですが、上記のプログラムによるアプローチだけです。

2

これは助けになることがあります。 Identify Network Interface Example

「[I]あなたが好みを持っているか、そうでないNICを使用するかを指定する必要がありますfは、あなたが適切なインタフェースのためのシステムを照会し、上のアドレスを見つけることができます使用したいインターフェイスを選択してください。

関連する問題