Class MulticastSocket
- java.lang.Object
-
- java.net.DatagramSocket
-
- java.net.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.0to239.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 Summary
Constructors Constructor Description MulticastSocket()Create a multicast socket.MulticastSocket(int port)Create a multicast socket and bind it to a specific port.MulticastSocket(SocketAddress bindaddr)Create a MulticastSocket bound to the specified socket address.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description InetAddressgetInterface()Retrieve the address of the network interface used for multicast packets.booleangetLoopbackMode()Get the setting for local loopback of multicast datagrams.NetworkInterfacegetNetworkInterface()Get the multicast network interface set.intgetTimeToLive()Get the default time-to-live for multicast packets sent out on the socket.voidjoinGroup(InetAddress mcastaddr)Joins a multicast group.voidjoinGroup(SocketAddress mcastaddr, NetworkInterface netIf)Joins the specified multicast group at the specified interface.voidleaveGroup(InetAddress mcastaddr)Leave a multicast group.voidleaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)Leave a multicast group on a specified local interface.voidsetInterface(InetAddress inf)Set the multicast network interface used by methods whose behavior would be affected by the value of the network interface.voidsetLoopbackMode(boolean disable)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.voidsetNetworkInterface(NetworkInterface netIf)Specify the network interface for outgoing multicast datagrams sent on this socket.voidsetTimeToLive(int ttl)Set the default time-to-live for multicast packets sent out on thisMulticastSocketin order to control the scope of the multicasts.-
Methods inherited from class java.net.DatagramSocket
bind, close, connect, connect, disconnect, getBroadcast, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass
-
-
-
-
Constructor Detail
-
MulticastSocket
public MulticastSocket() throws IOExceptionCreate a multicast socket.If there is a security manager, its
checkListenmethod 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 MulticastSocketSecurityException- if a security manager exists and itscheckListenmethod doesn't allow the operation.
-
MulticastSocket
public MulticastSocket(int port) throws IOExceptionCreate a multicast socket and bind it to a specific port.If there is a security manager, its
checkListenmethod is first called with theportargument 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 MulticastSocketSecurityException- if a security manager exists and itscheckListenmethod 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
checkListenmethod 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, ornullfor an unbound socket.- Throws:
IOException- if an I/O exception occurs while creating the MulticastSocketSecurityException- if a security manager exists and itscheckListenmethod doesn't allow the operation.- Since:
- 1.4
-
-
Method Detail
-
setTimeToLive
public void setTimeToLive(int ttl) throws IOExceptionSet the default time-to-live for multicast packets sent out on thisMulticastSocketin order to control the scope of the multicasts.The ttl must be in the range
0 <= ttl <= 255or anIllegalArgumentExceptionwill be thrown. Multicast packets sent with a TTL of0are 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 IOExceptionGet 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 bysetInterfaceorsetNetworkInterface.If there is a security manager, this method first calls its
checkMulticastmethod with themcastaddrargument 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 itscheckMulticastmethod doesn't allow the join.
-
leaveGroup
public void leaveGroup(InetAddress mcastaddr) throws IOException
Leave a multicast group. Its behavior may be affected bysetInterfaceorsetNetworkInterface.If there is a security manager, this method first calls its
checkMulticastmethod with themcastaddrargument 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 itscheckMulticastmethod 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
checkMulticastmethod with themcastaddrargument as its argument.- Parameters:
mcastaddr- is the multicast address to joinnetIf- specifies the local interface to receive multicast datagram packets, or null to defer to the interface set bysetInterface(InetAddress)orsetNetworkInterface(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 itscheckMulticastmethod 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
checkMulticastmethod with themcastaddrargument as its argument.- Parameters:
mcastaddr- is the multicast address to leavenetIf- specifies the local interface or null to defer to the interface set bysetInterface(InetAddress)orsetNetworkInterface(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 itscheckMulticastmethod 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
InetAddressrepresenting 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()
-
getNetworkInterface
public NetworkInterface getNetworkInterface() throws SocketException
Get the multicast network interface set.- Returns:
- the multicast
NetworkInterfacecurrently set - Throws:
SocketException- if there is an error in the underlying protocol, such as a TCP error.- Since:
- 1.4
- See Also:
setNetworkInterface(NetworkInterface)
-
setLoopbackMode
public void setLoopbackMode(boolean disable) throws SocketExceptionDisable/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-trueto disable the LoopbackMode- Throws:
SocketException- if an error occurs while setting the value- Since:
- 1.4
- See Also:
getLoopbackMode()
-
getLoopbackMode
public boolean getLoopbackMode() throws SocketExceptionGet 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)
-
-