Можно ли указать, какой сетевой интерфейс для JVM (или IDE) использовать

Ситуация такая: у меня есть два сетевых интерфейса в моем macbook pro. Один из них представляет собой статически определенный Ethernet-интерфейс, а другой - DHCP-настроенный беспроводной интерфейс.

Я пытаюсь понять, как настроить конкретный проект java только для использования моего статически подключенного интерфейса, а не просто выбрать первый в списке либо через JVM, либо через мою IDEA (IntelliJ 8)

Мне удалось добиться этого через экземпляр vmware, где у меня есть виртуальная среда, загружающая только мой проводной интерфейс, но это проблемы с производительностью объявлений и просто общие головные боли при переходе между окнами /osx.

Я до сих пор не смог найти свойство jvm, которое позволяет мне указать, какой nic используется, и я не видел документацию для IntelliJ, которая определяет это. Если у кого-нибудь есть идеи о том, как решить это безболезненно, я буду благодарен за помощь.

Ответы

Ответ 1

Да, вы можете указать следующим образом:

int port= 52000;//некоторый свободный порт

MulticastSocket msocket = new MulticastSocket(port);

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

Где 172.16.30.205 является одним из моих IP-адресов ПК, и я хотел бы общаться через интерфейс.

Ответ 2

java.net.Socket имеет конструктор, который указывает, к какому локальному IP-адресу привязывается, и поскольку каждый сетевой интерфейс получает свой собственный IP-адрес, вы можете использовать его.

Но переход от java.net.Socket к протоколу более высокого уровня (например, HTTP) - это совсем другое дело, но вы не укажете, что бы это было.

Я не знаю, как это сделать с JVM-уровнями, к сожалению, только вышеуказанный программный подход.

Ответ 3

Сетевой адаптер, используемый для связи, выбирается операционной системой в зависимости от лучшего "маршрута", доступного для доступа к любому адресу. Для приложения, расположенного над драйверами NIC, нет возможности выбрать конкретный сетевой адаптер. Вы можете приблизиться только при прослушивании порта, привязанного к определенному адресу, что применимо только в том случае, если вы используете сервер.

Вы можете попробовать изменить "метрику" маршрута, специфичного для сетевого адаптера, чтобы заставить ОС предпочесть его.

Ответ 4

Это может быть полезно: Определить пример сетевого интерфейса

"[I] f у вас есть предпочтение или иначе нужно указать, какой сетевой адаптер использовать, вы можете запросить систему для соответствующих интерфейсов и найти адрес на интерфейсе, который хотите использовать.