/* * Java読書会 ハンズオン * IPv6マルチキャスト実習 */ package javareading.handson.ipv6udp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * マルチキャスト送信クラス。 * 「IPv6のマルチキャストソケット(UDP)を使って全員に対して自分の名前を定期的に送信する。 * * @author imai * */ public class MyMulticastSender implements Runnable { private static final String MYNAME = "K.Imai"; private static final int INTERVAL = 2 * 1000; // msec private static final int BUFFERSIZE = 64; private InetAddress mcastAddress; private int mcastPort; private DatagramSocket socket; public MyMulticastSender(String host, int port) throws IOException { mcastAddress = InetAddress.getByName(host); mcastPort = port; socket = new DatagramSocket(); socket.setSendBufferSize(BUFFERSIZE); System.out.println("local address, port = " + socket.getLocalAddress() + ", " + socket.getLocalPort()); System.out.println("multicast address, port = " + mcastAddress + ", " + mcastPort); System.out.println("send bufsize = " + socket.getSendBufferSize()); } public void run() { try { int count = 0; String dataForm = "%04d " + MYNAME; while (true) { byte[] data = String.format(dataForm, count++).getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, mcastAddress, mcastPort); socket.send(packet); Thread.sleep(INTERVAL); } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } finally { socket.close(); System.out.println("exiting"); } } public static void main(String args[]) throws IOException { new Thread(new MyMulticastSender("ff35:40:fdb4:353a:c83f:10::10", 10101)).start(); } }