Domanda

La situazione è questa, ho due interfacce di rete nel mio macbook pro. Uno è un'interfaccia Ethernet definita staticamente e l'altro è un'interfaccia wireless configurata DHCP.

Sto cercando di capire come configurare un progetto java specifico per utilizzare solo la mia interfaccia cablata staticamente e non semplicemente scegliere il primo nell'elenco tramite la JVM o la mia IDEA (IntelliJ 8)

Sono riuscito a raggiungere questo obiettivo tramite un'istanza di vmware in cui il mio ambiente virtuale si nutre solo della mia interfaccia cablata ma questo ha problemi di prestazioni degli annunci e solo mal di testa generali di sfogliare tra windows / osx.

Finora non sono stato in grado di trovare una proprietà jvm che mi permetta di specificare quale nic viene utilizzata né ho visto la documentazione per IntelliJ che la definisce. Se qualcuno ha qualche idea su come risolverlo nel modo più indolore possibile, apprezzerei l'aiuto.

È stato utile?

Soluzione

Sì, è possibile specificare nel modo seguente:

int port = 52000; // alcune porte libere

MulticastSocket msocket = new MulticastSocket (porta);

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

Dove 172.16.30.205 è uno degli indirizzi IP del mio PC e vorrei comunicare tramite l'interfaccia.

Altri suggerimenti

java.net.Socket ha un costruttore che specifica a quale indirizzo IP locale associarsi e poiché ogni interfaccia di rete ottiene il proprio indirizzo IP, è possibile utilizzarlo.

Ma passare da un java.net.Socket a un protocollo di livello superiore (ad es. HTTP) è completamente un'altra questione, ma non si specifica quale sarebbe.

Non conosco un modo a livello di JVM di farlo, purtroppo, solo l'approccio programmatico di cui sopra.

La scheda NIC utilizzata per le comunicazioni viene selezionata dal sistema operativo in base alla migliore "route" disponibile per qualsiasi indirizzo a cui si accede. Non è possibile per un'applicazione che si trova sopra i driver della scheda NIC selezionare una scheda NIC specifica. Puoi avvicinarti solo quando ascolti una porta associata a un indirizzo specifico, che è applicabile solo se stai eseguendo un server.

Potresti provare a modificare la "metrica" ??della rotta specifica di una scheda di rete per forzare il sistema operativo a preferirla.

Questo può essere d'aiuto: Identifica esempio di interfaccia di rete

" [I] Se hai una preferenza o altrimenti devi specificare quale scheda NIC usare, puoi interrogare il sistema per le interfacce appropriate e trovare un indirizzo sull'interfaccia che vuoi usare. "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top