2009-06-17 10 views
13

Die Situation geht so, ich habe zwei Netzwerkschnittstellen in meinem Macbook Pro. Eine ist eine statisch definierte Ethernet-Schnittstelle und die andere ist eine DHCP-konfigurierte drahtlose Schnittstelle.Ist es möglich anzugeben, welche Netzwerkschnittstelle für eine JVM (oder IDE) zu verwenden ist

Ich versuche, herauszufinden, wie ein bestimmtes Java-Projekt konfigurieren meine statisch verdrahtete Schnittstelle nur zu bedienen und einfach nicht den ersten in der Liste auswählen, entweder durch die JVM oder durch meine IDEA (IntelliJ 8)

Ich habe es geschafft, dies über eine Instanz von VMware zu erreichen, wo ich meine virtuelle Umgebung nur von meiner kabelgebundenen Schnittstelle füttert, aber dies zeigt Leistungsprobleme und nur allgemeine Kopfschmerzen des Umblätterns zwischen Windows/OSX.

Ich konnte bisher keine jvm-Eigenschaft finden, mit der ich angeben kann, welche nic verwendet wird, noch habe ich Dokumentation für IntelliJ gesehen, die das definiert. Wenn jemand irgendwelche Ideen hat, wie man dies so schmerzlos wie möglich lösen kann, würde ich die Hilfe schätzen.

Antwort

2

Ja, Sie durch folgende Art und Weise angeben:

int port= 52000; // some frei Port

MulticastSocket msocket = new MulticastSocket(port);

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

Wo 172.16.30.205 ist eine meines PC-IP-Adresse und Ich möchte über die Schnittstelle kommunizieren.

4

Die für die Kommunikation verwendete NIC wird vom Betriebssystem ausgewählt, je nachdem, welche Route für welche Adresse verfügbar ist. Es gibt keine Möglichkeit für eine Anwendung, die oberhalb der NIC-Treiber sitzt, eine bestimmte NIC auszuwählen. Sie können sich nur dann schließen, wenn Sie einen Port überwachen, der an eine bestimmte Adresse gebunden ist. Dies ist nur relevant, wenn Sie einen Server betreiben.

Sie könnten versuchen, die 'Metrik' der für eine Netzwerkkarte spezifischen Route zu ändern, um zu erzwingen, dass das Betriebssystem sie bevorzugt.

+0

Das ist, was ich befürchtet habe, danke für die Antwort Ich werde versuchen, meine Duck Tape Vmware Lösung für jetzt anzuwenden. Ich dachte auch darüber nach, einen intelligenten Proxy zu verwenden, der den Verkehr einfach zwischen den NICs verschiebt, je nachdem, wer ihn anruft. –

+2

Diese Antwort ist nicht korrekt. Wenn Sie Ihren lokalen Socket an eine bestimmte lokale IP-Adresse binden, verwendet er die entsprechende NIC. – EJP

12

java.net.Socket hat einen Konstruktor, der angibt, an welche lokale IP-Adresse gebunden werden soll, und da jede Netzwerkschnittstelle ihre eigene IP-Adresse erhält, können Sie diese verwenden.

Aber von einem java.net.Socket zu einem übergeordneten Protokoll (z. B. HTTP) zu bekommen, ist eine andere Sache, aber Sie geben nicht an, was das wäre.

Ich kenne keine JVM-Ebene, dies zu tun, leider, nur die oben genannten programmatischen Ansatz.

2

Diese Hilfe sein kann: Identify Network Interface Example

„[I] f Sie eine Präferenz haben oder auf andere Weise angeben müssen, welche NIC, verwenden Sie das System für die entsprechenden Schnittstellen abfragen kann und eine Adresse finden auf die Schnittstelle, die Sie verwenden möchten. "