Şöyle yaparız.
1. bind : Network interface belirtilmediği için tüm ağ bağdaştırıcılarını dahil eden bir port açar. Böylece multicast olmayan paketleri de alabiliriz.
2. join : Burada loopback interface üzerindeki 224.0.0.255:9999 adresine multicast join yapılıyor. Eğer istenirse interface ismi (eth0 gibi) direkt kullanılabilir.
// Create a DatagramChannel. DatagramChannel channel = DatagramChannel.open(); // Bind the channel to a local port. channel.bind(new InetSocketAddress(9999)); // Join the multicast group. InetAddress address = InetAddress.getByName("127.0.0.1"); NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address); InetAddress group = InetAddress.getByName("224.0.0.255"); channel.join(group,networkInterface); // Create a datagram packet. byte[] data = "Hello, world!".getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, group, 9999); // Send the datagram packet. channel.send(packet); // Close the channel. channel.close();
Örnek
Şöyle yaparız.
1. bind : Network interface belirtilmediği için tüm ağ bağdaştırıcılarını dahil eden bir port açar
2. join : Burada loopback interface üzerindeki 239.255.0.1:5000 adresine multicast join yapılıyor. Eğer istenirse interface ismi (eth0 gibi) direkt kullanılabilir.
3. .setOption(StandardSocketOptions.IP_MULTICAST_IF, networkInterface); bence gerekli değil
InetAddress address = InetAddress.getByName("127.0.0.1");
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(address);
InetAddress group = InetAddress.getByName("239.255.0.1")
DatagramChannel channel = DatagramChannel.open(StandardProtocolFamily.INET)
.setOption(StandardSocketOptions.SO_REUSEADDR, true)
.bind(new InetSocketAddress(5000))
.setOption(StandardSocketOptions.IP_MULTICAST_IF, networkInterface);
MembershipKey key = channel.join(group, networkInterface
);