В Java вы можете использовать класс NetworkInterface
вместе с Socket.bind()
, чтобы указать, к какому интерфейсу привязываться.
Пример, взятый из этой ссылки :
NetworkInterface nif = NetworkInterface.getByName("bge0");
Enumeration nifAddresses = nif.getInetAddresses();
Socket soc = new java.net.Socket();
soc.bind(nifAddresses.nextElement());
soc.connect(new InetSocketAddress(address, port));
Затем, установив два сокета, по одному на интерфейс, вы можете использовать оба одновременно.
Другой способ решения этой проблемы, однако, заключается в связывании интерфейса , что является проблемой конфигурации (например, в Linux ) и представляет два физических интерфейса как один виртуальный интерфейс. (Связывание - это полная противоположность указания, какой интерфейс использовать при создании сокета, но не является проблемой программирования)