java.net.InetAddressによるIPv6アドレスの指定
Javaでは、IPアドレスの指定はjava.net.InetAddressクラスを使用して行います。
(1)IPv6アドレス文字列による指定
InetAddress address = InetAddress.getByName("2001:db8:3001:1");
(2)リンクローカルアドレスのスコープ指定(スコープ識別子の指定)
InetAddress address = InetAddress.getByName("ff02::1%2");
(3)リンクローカルアドレスのスコープ指定(マルチキャスト時ネットワークインタフェース指定)
// NetworkInterfaceを指定したMulticastSocketの生成
NetworkInterface ifc = NetworkInterface.getByName("eth2");
MulticastSocket socket = new MulticastSocket();
socket.setNetworkInterface(ifc);
// アドレスを指定したDatagramPacketの作成
byte[] buffer = ...
SocketAddress address = new InetSocketAddress("ff02::1", 55555);
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, address);
// マルチキャストパケットの送信
socket.send(packet);
リンクローカルアドレスを宛先に指定して通信を行うときは、スコープ識別子を指定しないとIPパケットが送出されないことがあります。(送出されることもある)
送出されないときも、アプリケーション側ではエラーとして検出できません。