30 Ağustos 2023 Çarşamba

DatagramChannel Sınıfı - NIO Multicast Gönderme ve Alma

Ö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. 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
);

Hiç yorum yok:

Yorum Gönder