所有类


java.net
类 MulticastSocket

java.lang.Object
  继承者 java.net.DatagramSocket
      继承者 java.net.MulticastSocket

public class MulticastSocket
   
   
   
   
   
extends DatagramSocket

多播数据报套接字类用于发送和接收 IP 多播包。MulticastSocket 是一种 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主机的“组”的附加功能。

多播组通过 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);
 
将消息发送到多播组时,该主机和端口的所有预定接收者都将接收到消息(在数据包的生存时间范围内,请参阅下文)。套接字不必成为多播组的成员即可向其发送消息。

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

同时,不允许 applet 使用多播套接字。

从以下版本开始:
JDK1.1

构造方法摘要
MulticastSocket()
          创建多播套接字。
MulticastSocket(int port)
          创建多播套接字并将其绑定到特定端口。
MulticastSocket(SocketAddress bindaddr)
          创建绑定到指定套接字地址的 MulticastSocket。
 
方法摘要
 InetAddress getInterface()
          检索用于多播数据包的网络接口的地址。
 boolean getLoopbackMode()
          获取多播数据报的本地回送的设置。
 NetworkInterface getNetworkInterface()
          获取多播网络接口集合。
 int getTimeToLive()
          获取在套接字上发出的多播数据包的默认生存时间。
 byte getTTL()
          已过时。 使用 getTimeToLive 方法来代替,该方法返回 int(而不是 byte)。
 void joinGroup(InetAddress mcastaddr)
          加入多播组。
 void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
          加入指定接口上的指定多播组。
 void leaveGroup(InetAddress mcastaddr)
          离开多播组。
 void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
          离开指定本地接口上的多播组。
 void send(DatagramPacket p, byte ttl)
          已过时。 使用以下代码或其等效代码:...... 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 setTimeToLive(int ttl)
          设置在此 MulticastSocket 上发出的多播数据包的默认生存时间,以便控制多播的范围。
 void setTTL(byte ttl)
          已过时。 使用 setTimeToLive 方法来代替,该方法使用 int(而不用 byte)作为 ttl 的类型。
 
从类 java.net.DatagramSocket 继承的方法
bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

MulticastSocket

public MulticastSocket()
                throws IOException
创建多播套接字。

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

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

抛出:
IOException - 如果在创建 MulticastSocket 时发生 I/O 异常
SecurityException - 如果安全管理器存在并且其 checkListen 方法不允许进行该操作。
另请参见:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(int port)
                throws IOException
创建多播套接字并将其绑定到特定端口。

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

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

参数:
port - 要使用的端口
抛出:
IOException - 如果在创建 MulticastSocket 时发生 I/O 异常
SecurityException - 如果安全管理器存在并且其 checkListen 方法不允许进行该操作。
另请参见:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(SocketAddress bindaddr)
                throws IOException
创建绑定到指定套接字地址的 MulticastSocket。

或者,如果地址为 null,则创建未绑定套接字。

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

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

参数:
bindaddr - 要绑定到的套接字地址;或者为 null,它表示非绑定套接字。
抛出:
IOException - 如果在创建 MulticastSocket 时发生 I/O 异常
SecurityException - 如果安全管理器存在并且其 checkListen 方法不允许进行该操作。
从以下版本开始:
1.4
另请参见:
SecurityManager.checkListen(int), DatagramSocket.setReuseAddress(boolean)
方法详细信息

setTTL

@Deprecated
public void setTTL(byte ttl)
            throws IOException
已过时。 使用 setTimeToLive 方法来代替,该方法使用 int(而不用 byte)作为 ttl 的类型。

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

ttl 为无符号 8 位量,所以其必须0 <= ttl <= 0xFF 范围内。

参数:
ttl - 生存时间
抛出:
IOException - 如果在设置默认生存时间值时发生 I/O 异常
另请参见:
getTTL()

setTimeToLive

public void setTimeToLive(int ttl)
                   throws IOException
设置在此 MulticastSocket 上发出的多播数据包的默认生存时间,以便控制多播的范围。

ttl 必须0 <= ttl <= 255 范围内,否则将抛出 IllegalArgumentException。

参数:
ttl - 生存时间
抛出:
IOException - 如果在设置默认生存时间值时发生 I/O 异常
另请参见:
getTimeToLive()

getTTL

@Deprecated
public byte getTTL()
            throws IOException
已过时。 使用 getTimeToLive 方法来代替,该方法返回 int(而不是 byte)。

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

返回:
默认生存时间值
抛出:
IOException - 如果在获取默认生存时间值时发生 I/O 异常
另请参见:
setTTL(byte)

getTimeToLive

public int getTimeToLive()
                  throws IOException
获取在套接字上发出的多播数据包的默认生存时间。

返回:
默认生存时间值
抛出:
IOException - 如果在获取默认生存时间值时发生 I/O 异常
另请参见:
setTimeToLive(int)

joinGroup

public void joinGroup(InetAddress mcastaddr)
               throws IOException
加入多播组。其行为可能受到 setInterfacesetNetworkInterface 的影响。

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

参数:
mcastaddr - 要加入的多播地址
抛出:
IOException - 如果存在错误加入或者当地址不是多播地址时。
SecurityException - 如果安全管理器存在并且其 checkMulticast 方法不允许加入。
另请参见:
SecurityManager.checkMulticast(InetAddress)

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部