public void join(String groupName, int port) {
        try {
            MulticastSocket msocket = new MulticastSocket(port);
            group = InetAddress.getByName(groupName);
            msocket.joinGroup(group);
        } catch (IOException e) {
        }
    }
e154. Receiving from a Multicast Group
Once you've created a multicast socket and joined the group, all datagrams sent to its corresponding multicast address will be available to be read from the socket. You can read from the socket just like you would from a unicast socket. 
    public void read(MulticastSocket msocket, byte[] inbuf) {
        try {
            DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length);
    
            // Wait for packet
            msocket.receive(packet);
    
            // Data is now in inbuf
            int numBytesReceived = packet.getLength();
        } catch (IOException e) {
        }
    }e155. Sending to a Multicast Group
You can send to a multicast socket using either a DatagramSocket or a MulticastSocket. What makes it multicast is the address that is in the datagram. If the address is a multicast address, the datagram will reach the multicast members in the group. You only need to use MulticastSocket if you want to control the time-to-live of the datagram. 
    byte[] outbuf = new byte[1024];
    int port = 1234;
    try {
        DatagramSocket socket = new DatagramSocket();
        InetAddress groupAddr = InetAddress.getByName("228.1.2.3");
        DatagramPacket packet = new DatagramPacket(outbuf, outbuf.length, groupAddr, port);
        socket.send(packet);
    } catch (SocketException e) {
    } catch (IOException e) {
    }