14 Aralık 2017 Perşembe

DatagramChannel Sınıfı - NIO

Giriş
Şu satırı dahil ederiz.
import java.nio.channels.DatagramChannel;
TCP istemcisi için SocketChannel sınıfı kullanılır. TCP sunucusu için ServerSocketChannel sınıfı kullanılır.

bind metodu
Şöyle yaparız
DatagramChannel datagramChannel = DatagramChannel.open(StandardProtocolFamily.INET
InetAddress address = InetAddress.getByName("127.0.0.1");
datagramChannel.bind(new InetSocketAddress(address, 34521));
join metodu - MulticasGroup + NetworkInterface
İmzası şöyle
MembershipKey join(InetAddress group, NetworkInterface interf)
Örnek
Şöyle yaparız. Burada bind() çağrısı da yapılıyor. Böyle port belirtiliyor. Ayrıca loopback interface üzerindeki 239.255.0.1 adresine multicast join yapılıyor. Eğer istenirse interface ismi (eth0 gibi) direkt kullanılabilir. 
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
);
join metodu - Source-specific multicast (SSM) 
İmzası şöyle
MembershipKey join(InetAddress group, NetworkInterface interf, InetAddress source)
Açıklaması şöyle
Source-specific multicast (SSM) is an extension of multicast communication that allows receivers to specify not only the multicast group address they want to receive from but also the source of the multicast traffic. This can be useful for scenarios where you want to ensure that you receive multicast traffic only from specific sources.
open metodu
Şöyle yaparız.
DatagramChannel channel = DatagramChannel.open();
receive metodu
Şöyle yaparız.
ByteBuffer byteBuffer = ByteBuffer.allocate(1500);
byteBuffer.clear();
InetSocketAddress sa = (InetSocketAddress) channel.receive(byteBuffer);


System.out.println("received from " + sa.getHostString());
socket metodu
Alttaki socket nesnesine erişiriz.
channel.socket().bind(new InetSocketAddress(port));


Hiç yorum yok:

Yorum Gönder