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(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, 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, 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()