本文へジャンプ

JavaによるIPv6ソケットプログラミング

JavaにおけるIPv6ソケットプログラミング。

java.netパッケージAPI

Javaでは、java.netパッケージによってネットワークプログラミングAPIが提供されています。Javaを実行するホスト環境でIPv6がサポートされていれば、java.netパッケージは、IPv4、IPv6がほとんど透過となっています。

IPv6アドレスの使用

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パケットが送出されないことがあります。(送出されることもある)
送出されないときも、アプリケーション側ではエラーとして検出できません。

TCP
TCPのプログラミングについては、IPv4とAPIが同じなので、特筆することはないです。

UDP
UDPのプログラミングについては、IPv4とAPIが同じなので、特筆することはないです。

参考文献