Во время работы над приложением Java под Mac OS X (Lion, 10.7.2, Java версия "1.6.0_29") я столкнулся со странной проблемой при попытке отправить многоадресные дейтаграммы UDP. Пакеты отправляются только на один сетевой адаптер, и я не могу контролировать, какой из них.
Следующий пример кода иллюстрирует то, что я пытаюсь сделать:
public class MCast {
public static void main(String[] args) throws IOException {
InetAddress multicastAddr = InetAddress.getByName("224.0.0.1");
int port = 58680;
byte[] data = "test".getBytes();
DatagramPacket packet = new DatagramPacket(data, data.length, multicastAddr, port);
MulticastSocket socket = new MulticastSocket();
socket.joinGroup(multicastAddr);
socket.setNetworkInterface(NetworkInterface.getByName("en0"));
socket.send(packet);
System.out.println("Packet sent.");
}
}
При выполнении этого кода я использую Wireshark для проверки всего трафика, выходящего на en0. На указанный порт пакеты не отправляются. Однако указанные пакеты появляются на трассе для en1.
Когда я отключаю en1, пакеты выходят на en0 правильно.
Я в растерянности. Кто-нибудь знает, что происходит?