import java.io.*;
import java.net.*;
import java.util.*;

public class t_MulticastSocket {
    final static short port = 4446;
    final static String m_addr = "230.0.0.1";
    static byte[] buff = new byte[1000];
    
    public static void main(String[] args) throws IOException {

// Socket address

		InetSocketAddress addr = new InetSocketAddress(m_addr, port);
		System.out.println("\nInetSocketAddress");
		System.out.println("toString: "+addr.toString());
		System.out.println("Address:  "+addr.getAddress());
		System.out.println("Hostname: "+addr.getHostName());
		System.out.println("Port:     "+addr.getPort());
		System.out.println("HashCode: "+addr.hashCode());

// Sending packets
			
		DatagramPacket snd = new DatagramPacket("Ahoj".getBytes(), "Ahoj".length(), addr);
		System.out.println("\nSending packet");
		System.out.println("SocketAddr:"+snd.getSocketAddress().toString());
		System.out.println("Address:  "+snd.getAddress());
		System.out.println("Port:     "+snd.getPort());
		System.out.println("Data:     " + new String(snd.getData()));
		System.out.println("Length:   "+snd.getLength());
		System.out.println("Offset:   "+snd.getOffset());

//Receiving packets

		DatagramSocket s = new DatagramSocket();
       	MulticastSocket r = new MulticastSocket(port);
       	
    	byte[] r_buf = new byte[256];
        DatagramPacket rcv = new DatagramPacket(r_buf, r_buf.length);
            
       	InetAddress address = InetAddress.getByName(m_addr);
    	r.joinGroup(address);

	    for (int i = 0; i < 5; i++) {

            s.send(snd);
            r.receive(rcv);
            
            System.out.println("Msg: " + new String(rcv.getData(),0,rcv.getLength()));
		}

		r.leaveGroup(address);
		r.close();
    }

}