public class MulticastSocket extends DatagramSocket
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.
Constructor and 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.
|
Modifier and Type | Method and Description |
---|---|
InetAddress |
getInterface()
Retrieve the address of the network interface used for multicast packets.
|
boolean |
getLoopbackMode()
Get the setting for local loopback of multicast datagrams.
|
NetworkInterface |
getNetworkInterface()
Get the multicast network interface set.
|
int |
getTimeToLive()
Get the default time-to-live for multicast packets sent out on the socket.
|
void |
joinGroup(InetAddress mcastaddr)
Joins a multicast group.
|
void |
joinGroup(SocketAddress mcastaddr,
NetworkInterface netIf)
Joins the specified multicast group at the specified interface.
|
void |
leaveGroup(InetAddress mcastaddr)
Leave a multicast group.
|
void |
leaveGroup(SocketAddress mcastaddr,
NetworkInterface netIf)
Leave a multicast group on a specified local interface.
|
void |
setInterface(InetAddress inf)
Set the multicast network interface used by methods whose behavior would be affected by the value of the network
interface.
|
void |
setLoopbackMode(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.
|
void |
setNetworkInterface(NetworkInterface netIf)
Specify the network interface for outgoing multicast datagrams sent on this socket.
|
void |
setTimeToLive(int ttl)
Set the default time-to-live for multicast packets sent out on this
MulticastSocket in order to control
the scope of the multicasts. |
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
public MulticastSocket() throws IOException
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.
IOException
- if an I/O exception occurs while creating the MulticastSocketSecurityException
- if a security manager exists and its checkListen
method doesn't allow the operation.public MulticastSocket(int port) throws IOException
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.
port
- port to useIOException
- if an I/O exception occurs while creating the MulticastSocketSecurityException
- if a security manager exists and its checkListen
method doesn't allow the operation.public MulticastSocket(@Nullable SocketAddress bindaddr) throws IOException
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.
bindaddr
- Socket address to bind to, or null
for an unbound socket.IOException
- if an I/O exception occurs while creating the MulticastSocketSecurityException
- if a security manager exists and its checkListen
method doesn't allow the operation.public InetAddress getInterface() throws SocketException
InetAddress
representing the address of the network interface used for multicast packets.SocketException
- if there is an error in the underlying protocol, such as a TCP error.setInterface(java.net.InetAddress)
public boolean getLoopbackMode() throws SocketException
SocketException
- if an error occurs while getting the valuesetLoopbackMode(boolean)
public NetworkInterface getNetworkInterface() throws SocketException
NetworkInterface
currently setSocketException
- if there is an error in the underlying protocol, such as a TCP error.setNetworkInterface(NetworkInterface)
public int getTimeToLive() throws IOException
IOException
- if an I/O exception occurs while getting the default time-to-live valuesetTimeToLive(int)
public void joinGroup(InetAddress mcastaddr) throws IOException
setInterface
or setNetworkInterface
.
If there is a security manager, this method first calls its checkMulticast
method with the
mcastaddr
argument as its argument.
mcastaddr
- is the multicast address to joinIOException
- 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.public void joinGroup(SocketAddress mcastaddr, @Nullable NetworkInterface netIf) throws IOException
If there is a security manager, this method first calls its checkMulticast
method with the
mcastaddr
argument as its argument.
mcastaddr
- is the multicast address to joinnetIf
- specifies the local interface to receive multicast datagram packets, or null to defer to the
interface set by setInterface(InetAddress)
or
setNetworkInterface(NetworkInterface)
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 socketpublic void leaveGroup(InetAddress mcastaddr) throws IOException
setInterface
or setNetworkInterface
.
If there is a security manager, this method first calls its checkMulticast
method with the
mcastaddr
argument as its argument.
mcastaddr
- is the multicast address to leaveIOException
- 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.public void leaveGroup(SocketAddress mcastaddr, @Nullable NetworkInterface netIf) throws IOException
If there is a security manager, this method first calls its checkMulticast
method with the
mcastaddr
argument as its argument.
mcastaddr
- is the multicast address to leavenetIf
- specifies the local interface or null to defer to the interface set by
setInterface(InetAddress)
or
setNetworkInterface(NetworkInterface)
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 socketpublic void setInterface(InetAddress inf) throws SocketException
inf
- the InetAddressSocketException
- if there is an error in the underlying protocol, such as a TCP error.getInterface()
public void setLoopbackMode(boolean disable) throws SocketException
Because this option is a hint, applications that want to verify what loopback mode is set to should call
getLoopbackMode()
disable
- true
to disable the LoopbackModeSocketException
- if an error occurs while setting the valuegetLoopbackMode()
public void setNetworkInterface(NetworkInterface netIf) throws SocketException
netIf
- the interfaceSocketException
- if there is an error in the underlying protocol, such as a TCP error.getNetworkInterface()
public void setTimeToLive(int ttl) throws IOException
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.
ttl
- the time-to-liveIOException
- if an I/O exception occurs while setting the default time-to-live valuegetTimeToLive()