Package java.net

Class MulticastSocket

  • All Implemented Interfaces:
    Closeable, AutoCloseable

    public class MulticastSocket
    extends DatagramSocket
    The multicast datagram socket class is useful for sending and receiving IP multicast packets. A MulticastSocket is a (UDP) DatagramSocket, with additional capabilities for joining "groups" of other multicast hosts on the internet.

    A multicast group is specified by a class D IP address and by a standard UDP port number. Class D IP addresses are in the range 224.0.0.0 to 239.255.255.255, inclusive. The address 224.0.0.0 is reserved and should not be used.

    One would join a multicast group by first creating a MulticastSocket with the desired port, then invoking the joinGroup(InetAddress groupAddr) method:

     // join a Multicast group and send the group salutations
     ...
     String msg = "Hello";
     InetAddress group = InetAddress.getByName("228.5.6.7");
     MulticastSocket s = new MulticastSocket(6789);
     s.joinGroup(group);
     DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
                                 group, 6789);
     s.send(hi);
     // get their responses!
     byte[] buf = new byte[1000];
     DatagramPacket recv = new DatagramPacket(buf, buf.length);
     s.receive(recv);
     ...
     // OK, I'm done talking - leave the group...
     s.leaveGroup(group);
     
    When one sends a message to a multicast group, all subscribing recipients to that host and port receive the message (within the time-to-live range of the packet, see below). The socket needn't be a member of the multicast group to send messages to it.

    When a socket subscribes to a multicast group/port, it receives datagrams sent by other hosts to the group/port, as do all other members of the group and port. A socket relinquishes membership in a group by the leaveGroup(InetAddress addr) method. Multiple MulticastSocket's may subscribe to a multicast group and port concurrently, and they will all receive group datagrams.

    Currently applets are not allowed to use multicast sockets.

    Since:
    JDK1.1
    • Constructor Detail

      • MulticastSocket

        public MulticastSocket()
                        throws IOException
        Create a multicast socket.

        If there is a security manager, its checkListen method is first called with 0 as its argument to ensure the operation is allowed. This could result in a SecurityException.

        Throws:
        IOException - if an I/O exception occurs while creating the MulticastSocket
        SecurityException - if a security manager exists and its checkListen method doesn't allow the operation.
      • MulticastSocket

        public MulticastSocket​(int port)
                        throws IOException
        Create a multicast socket and bind it to a specific port.

        If there is a security manager, its checkListen method is first called with the port argument as its argument to ensure the operation is allowed. This could result in a SecurityException.

        Parameters:
        port - port to use
        Throws:
        IOException - if an I/O exception occurs while creating the MulticastSocket
        SecurityException - if a security manager exists and its checkListen method doesn't allow the operation.
      • MulticastSocket

        public MulticastSocket​(@Nullable
                               SocketAddress bindaddr)
                        throws IOException
        Create a MulticastSocket bound to the specified socket address.

        Or, if the address is null, create an unbound socket.

        If there is a security manager, its checkListen method is first called with the SocketAddress port as its argument to ensure the operation is allowed. This could result in a SecurityException.

        Parameters:
        bindaddr - Socket address to bind to, or null for an unbound socket.
        Throws:
        IOException - if an I/O exception occurs while creating the MulticastSocket
        SecurityException - if a security manager exists and its checkListen method doesn't allow the operation.
        Since:
        1.4
    • Method Detail

      • setTimeToLive

        public void setTimeToLive​(int ttl)
                           throws IOException
        Set the default time-to-live for multicast packets sent out on this MulticastSocket in order to control the scope of the multicasts.

        The ttl must be in the range 0 <= ttl <= 255 or an IllegalArgumentException will be thrown. Multicast packets sent with a TTL of 0 are not transmitted on the network but may be delivered locally.

        Parameters:
        ttl - the time-to-live
        Throws:
        IOException - if an I/O exception occurs while setting the default time-to-live value
        See Also:
        getTimeToLive()
      • getTimeToLive

        public int getTimeToLive()
                          throws IOException
        Get the default time-to-live for multicast packets sent out on the socket.
        Returns:
        the default time-to-live value
        Throws:
        IOException - if an I/O exception occurs while getting the default time-to-live value
        See Also:
        setTimeToLive(int)
      • joinGroup

        public void joinGroup​(InetAddress mcastaddr)
                       throws IOException
        Joins a multicast group. Its behavior may be affected by setInterface or setNetworkInterface.

        If there is a security manager, this method first calls its checkMulticast method with the mcastaddr argument as its argument.

        Parameters:
        mcastaddr - is the multicast address to join
        Throws:
        IOException - if there is an error joining or when the address is not a multicast address.
        SecurityException - if a security manager exists and its checkMulticast method doesn't allow the join.
      • leaveGroup

        public void leaveGroup​(InetAddress mcastaddr)
                        throws IOException
        Leave a multicast group. Its behavior may be affected by setInterface or setNetworkInterface.

        If there is a security manager, this method first calls its checkMulticast method with the mcastaddr argument as its argument.

        Parameters:
        mcastaddr - is the multicast address to leave
        Throws:
        IOException - if there is an error leaving or when the address is not a multicast address.
        SecurityException - if a security manager exists and its checkMulticast method doesn't allow the operation.
      • joinGroup

        public void joinGroup​(SocketAddress mcastaddr,
                              @Nullable
                              NetworkInterface netIf)
                       throws IOException
        Joins the specified multicast group at the specified interface.

        If there is a security manager, this method first calls its checkMulticast method with the mcastaddr argument as its argument.

        Parameters:
        mcastaddr - is the multicast address to join
        netIf - specifies the local interface to receive multicast datagram packets, or null to defer to the interface set by setInterface(InetAddress) or setNetworkInterface(NetworkInterface)
        Throws:
        IOException - if there is an error joining or when the address is not a multicast address.
        SecurityException - if a security manager exists and its checkMulticast method doesn't allow the join.
        IllegalArgumentException - if mcastaddr is null or is a SocketAddress subclass not supported by this socket
        Since:
        1.4
      • leaveGroup

        public void leaveGroup​(SocketAddress mcastaddr,
                               @Nullable
                               NetworkInterface netIf)
                        throws IOException
        Leave a multicast group on a specified local interface.

        If there is a security manager, this method first calls its checkMulticast method with the mcastaddr argument as its argument.

        Parameters:
        mcastaddr - is the multicast address to leave
        netIf - specifies the local interface or null to defer to the interface set by setInterface(InetAddress) or setNetworkInterface(NetworkInterface)
        Throws:
        IOException - if there is an error leaving or when the address is not a multicast address.
        SecurityException - if a security manager exists and its checkMulticast method doesn't allow the operation.
        IllegalArgumentException - if mcastaddr is null or is a SocketAddress subclass not supported by this socket
        Since:
        1.4
      • setInterface

        public void setInterface​(InetAddress inf)
                          throws SocketException
        Set the multicast network interface used by methods whose behavior would be affected by the value of the network interface. Useful for multihomed hosts.
        Parameters:
        inf - the InetAddress
        Throws:
        SocketException - if there is an error in the underlying protocol, such as a TCP error.
        See Also:
        getInterface()
      • getInterface

        public InetAddress getInterface()
                                 throws SocketException
        Retrieve the address of the network interface used for multicast packets.
        Returns:
        An InetAddress representing the address of the network interface used for multicast packets.
        Throws:
        SocketException - if there is an error in the underlying protocol, such as a TCP error.
        See Also:
        setInterface(java.net.InetAddress)
      • setNetworkInterface

        public void setNetworkInterface​(NetworkInterface netIf)
                                 throws SocketException
        Specify the network interface for outgoing multicast datagrams sent on this socket.
        Parameters:
        netIf - the interface
        Throws:
        SocketException - if there is an error in the underlying protocol, such as a TCP error.
        Since:
        1.4
        See Also:
        getNetworkInterface()
      • setLoopbackMode

        public void setLoopbackMode​(boolean disable)
                             throws SocketException
        Disable/Enable local loopback of multicast datagrams The option is used by the platform's networking code as a hint for setting whether multicast data will be looped back to the local socket.

        Because this option is a hint, applications that want to verify what loopback mode is set to should call getLoopbackMode()

        Parameters:
        disable - true to disable the LoopbackMode
        Throws:
        SocketException - if an error occurs while setting the value
        Since:
        1.4
        See Also:
        getLoopbackMode()
      • getLoopbackMode

        public boolean getLoopbackMode()
                                throws SocketException
        Get the setting for local loopback of multicast datagrams.
        Returns:
        true if the LoopbackMode has been disabled
        Throws:
        SocketException - if an error occurs while getting the value
        Since:
        1.4
        See Also:
        setLoopbackMode(boolean)