Most visited

Recently visited

Added in API level 1

MulticastSocket

public class MulticastSocket
extends DatagramSocket

java.lang.Object
   ↳ java.net.DatagramSocket
     ↳ java.net.MulticastSocket


多播数据报套接字类对发送和接收IP多播包很有用。 MulticastSocket是一个(UDP)DatagramSocket,具有用于连接互联网上其他多播主机的“组”的附加功能。

多播组由D类IP地址和标准UDP端口号指定。 D类IP地址的范围是224.0.0.0239.255.255.255 (含)。 地址224.0.0.0被保留,不应该被使用。

通过首先创建一个具有所需端口的MulticastSocket,然后调用 joinGroup(InetAddress groupAddr)方法,可以加入多播组:

 // 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.

当一个套接字订阅一个多播组/端口时,它接收其他主机发送给该组/端口的数据报,就像该组和端口的所有其他成员一样。 套接字通过leaveGroup(InetAddress addr)方法放弃组中的成员资格。 多个MulticastSocket可以同时订阅多播组和端口,并且它们都将接收组数据报。

目前小应用程序不允许使用多播套接字。

Summary

Public constructors

MulticastSocket()

创建一个多播套接字。

MulticastSocket(int port)

创建一个多播套接字并将其绑定到特定端口。

MulticastSocket(SocketAddress bindaddr)

创建绑定到指定套接字地址的MulticastSocket。

Public methods

InetAddress getInterface()

检索用于多播数据包的网络接口的地址。

boolean getLoopbackMode()

获取多播数据报本地回送的设置。

NetworkInterface getNetworkInterface()

获取多播网络接口集。

byte getTTL()

此方法在API级别1中已弃用。请改用getTimeToLive方法,它将返回int而不是字节

int getTimeToLive()

获取套接字上发送的多播数据包的默认生存时间。

void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)

在指定的接口上加入指定的组播组。

void joinGroup(InetAddress mcastaddr)

加入多播组。

void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)

在指定的本地接口上保留多播组。

void leaveGroup(InetAddress mcastaddr)

保留一个多播组。

void send(DatagramPacket p, byte ttl)

此方法在API级别1中已弃用。请使用以下代码或其替代方法:...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(P); mcastSocket.setTimeToLive(TTL); ......

void setInterface(InetAddress inf)

设置其行为受网络接口值影响的方法所使用的多播网络接口。

void setLoopbackMode(boolean disable)

禁用/启用多播数据报的本地回送该选项由平台的网络代码用作设置多播数据是否将循环回本地套接字的提示。

void setNetworkInterface(NetworkInterface netIf)

指定在此套接字上发送的传出多播数据报的网络接口。

void setTTL(byte ttl)

此方法在API级别1中已弃用。请改用setTimeToLive方法,它使用int而不是byte作为ttl的类型。

void setTimeToLive(int ttl)

设置此 MulticastSocket发出的多播数据包的默认生存时间以控制多播的范围。

Inherited methods

From class java.net.DatagramSocket
From class java.lang.Object
From interface java.io.Closeable
From interface java.lang.AutoCloseable

Public constructors

MulticastSocket

Added in API level 1
MulticastSocket ()

创建一个多播套接字。

如果有安全管理器,则首先使用0作为其参数调用其方法checkListen ,以确保允许操作。 这可能会导致SecurityException。

当创建套接字时,会调用 setReuseAddress(boolean)方法来启用SO_REUSEADDR套接字选项。

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

Added in API level 1
MulticastSocket (int port)

创建一个多播套接字并将其绑定到特定端口。

如果有安全管理器,则首先使用port参数作为其参数来调用其checkListen方法,以确保允许操作。 这可能会导致SecurityException。

当创建套接字时,会调用 setReuseAddress(boolean)方法来启用SO_REUSEADDR套接字选项。

Parameters
port int: 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

Added in API level 1
MulticastSocket (SocketAddress bindaddr)

创建绑定到指定套接字地址的MulticastSocket。

或者,如果地址是 null ,则创建一个未绑定的套接字。

如果有安全管理器,则首先使用SocketAddress端口作为其参数调用其checkListen方法,以确保允许操作。 这可能会导致SecurityException。

当创建套接字时,会调用 setReuseAddress(boolean)方法来启用SO_REUSEADDR套接字选项。

Parameters
bindaddr SocketAddress: 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.

也可以看看:

Public methods

getInterface

Added in API level 1
InetAddress getInterface ()

检索用于多播数据包的网络接口的地址。

Returns
InetAddress 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.

也可以看看:

getLoopbackMode

Added in API level 1
boolean getLoopbackMode ()

获取多播数据报本地回送的设置。

Returns
boolean true if the LoopbackMode has been disabled
Throws
SocketException if an error occurs while getting the value

也可以看看:

getNetworkInterface

Added in API level 1
NetworkInterface getNetworkInterface ()

获取多播网络接口集。

Returns
NetworkInterface the multicast NetworkInterface currently set
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

getTTL

Added in API level 1
byte getTTL ()

此方法在API级别1中已弃用。
相反,使用getTimeToLive方法,它返回一个int而不是一个字节

获取套接字上发送的多播数据包的默认生存时间。

Returns
byte the default time-to-live value
Throws
IOException if an I/O exception occurs while getting the default time-to-live value

也可以看看:

getTimeToLive

Added in API level 1
int getTimeToLive ()

获取套接字上发送的多播数据包的默认生存时间。

Returns
int the default time-to-live value
Throws
IOException if an I/O exception occurs while getting the default time-to-live value

也可以看看:

joinGroup

Added in API level 1
void joinGroup (SocketAddress mcastaddr, 
                NetworkInterface netIf)

在指定的接口上加入指定的组播组。

如果有安全管理器,则此方法首先使用 mcastaddr参数作为其参数调用其 checkMulticast方法。

Parameters
mcastaddr SocketAddress: is the multicast address to join
netIf NetworkInterface: 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

也可以看看:

joinGroup

Added in API level 1
void joinGroup (InetAddress mcastaddr)

加入多播组。 其行为可能受到setInterfacesetNetworkInterface影响。

如果有安全管理器,则此方法首先使用 mcastaddr参数作为其参数调用其 checkMulticast方法。

Parameters
mcastaddr InetAddress: 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

Added in API level 1
void leaveGroup (SocketAddress mcastaddr, 
                NetworkInterface netIf)

在指定的本地接口上保留多播组。

如果有安全管理器,则此方法首先使用 mcastaddr参数作为其参数来调用其 checkMulticast方法。

Parameters
mcastaddr SocketAddress: is the multicast address to leave
netIf NetworkInterface: 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

也可以看看:

leaveGroup

Added in API level 1
void leaveGroup (InetAddress mcastaddr)

保留一个多播组。 其行为可能受到setInterfacesetNetworkInterface影响。

如果有安全管理器,此方法首先调用其 checkMulticast方法与 mcastaddr作为参数来。

Parameters
mcastaddr InetAddress: 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.

也可以看看:

send

Added in API level 1
void send (DatagramPacket p, 
                byte ttl)

此方法在API级别1中已弃用。
使用下面的代码或其等效代替:...... int ttl = mcastSocket.getTimeToLive(); mcastSocket.setTimeToLive(newttl); mcastSocket.send(P); mcastSocket.setTimeToLive(TTL); ......

将数据报封包发送到目的地,并使用非套接字默认值的TTL(生存时间)。 这种方法只需要在需要特定TTL的情况下使用; 否则最好在套接字上设置一次TTL,并对所有数据包使用默认的TTL。 此方法改变套接字的默认TTL。 其行为可能受到setInterface影响。

如果有安全管理器,则此方法首先执行一些安全检查。 首先,如果p.getAddress().isMulticastAddress()为真,则此方法以p.getAddress()ttl作为参数调用安全管理器的checkMulticast方法。 如果对该表达式的评估为false,则此方法改为调用带有参数p.getAddress().getHostAddress()p.getPort()的安全管理器的checkConnect方法。 如果操作不被允许,每次调用安全管理器方法都可能导致SecurityException。

Parameters
p DatagramPacket: is the packet to be sent. The packet should contain the destination multicast ip address and the data to be sent. One does not need to be the member of the group to send packets to a destination multicast address.
ttl byte: optional time to live for multicast packet. default ttl is 1.
Throws
IOException is raised if an error occurs i.e error while setting ttl.
SecurityException if a security manager exists and its checkMulticast or checkConnect method doesn't allow the send.

也可以看看:

setInterface

Added in API level 1
void setInterface (InetAddress inf)

设置其行为受网络接口值影响的方法所使用的多播网络接口。 对于多宿主主机很有用。

Parameters
inf InetAddress: the InetAddress
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

setLoopbackMode

Added in API level 1
void setLoopbackMode (boolean disable)

禁用/启用多播数据报的本地回送该选项由平台的网络代码用作设置多播数据是否将循环回本地套接字的提示。

因为这个选项是一个提示,所以想验证什么环回模式设置的应用程序应该调用 getLoopbackMode()

Parameters
disable boolean: true to disable the LoopbackMode
Throws
SocketException if an error occurs while setting the value

也可以看看:

setNetworkInterface

Added in API level 1
void setNetworkInterface (NetworkInterface netIf)

指定在此套接字上发送的传出多播数据报的网络接口。

Parameters
netIf NetworkInterface: the interface
Throws
SocketException if there is an error in the underlying protocol, such as a TCP error.

也可以看看:

setTTL

Added in API level 1
void setTTL (byte ttl)

此方法在API级别1中已弃用。
相反,使用setTimeToLive方法,它使用int而不是byte作为ttl的类型。

设置在此 MulticastSocket上发出的多播数据包的默认生存时间,以控制多播的范围。

ttl是一个 无符号的 8位数量,因此 必须0 <= ttl <= 0xFF的范围内。

Parameters
ttl byte: the time-to-live
Throws
IOException if an I/O exception occurs while setting the default time-to-live value

也可以看看:

setTimeToLive

Added in API level 1
void setTimeToLive (int ttl)

设置此 MulticastSocket发出的多播数据包的默认生存时间以控制多播的范围。

ttl 必须0 <= ttl <= 255范围内, IllegalArgumentException将抛出IllegalArgumentException 0的TTL发送的组播数据包不在网络上传输,但可以在本地传送。

Parameters
ttl int: the time-to-live
Throws
IOException if an I/O exception occurs while setting the default time-to-live value

也可以看看:

Hooray!