当前位置 类层次 (JDK) 所有类 (JDK) 所有域和方法 (JDK)

类 java.net.MulticastSocket

java.lang.Object
   |
   +----java.net.DatagramSocket
           |
           +----java.net.MulticastSocket

public class MulticastSocket
extends DatagramSocket

多址发送报文端口(socket)类用来发送和接收 IP 多址发送报文。 MulticastSocket 是 (UDP) 报文端口,带有连接因特网上其他多址发送主机的附加功能。

多址发送组由 D 类IP 地址指定,范围在 224.0.0.1239.255.255.255 之间,并包含一个标准 UDP 端口号码。 要想连接一个多址发送组,可以首先创建一个带有所需端口的 MulticastSocket , 再调用方法 joinGroup(InetAddress groupAddr) :

 // 连接多址发送组并发问候信息
 ...
 byte[] msg = {'H', 'e', 'l', 'l', 'o'};
 InetAddress group = InetAddress.getByName("228.5.6.7");
 MulticastSocket s = new MulticastSocket(6789);
 s.joinGroup(group);
 DatagramPacket hi = new DatagramPacket(msg, msg.length,
                             group, 6789);
 s.send(hi);
 // 获得响应!
 byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK,我已完成通话 - 脱离该组...
 s.leaveGroup(group);
 
给一个多址发送组发信息时, 所有 预订了该主机和端口的接收者接收该信息(在报文的存活时间内,见下面)。 该 socket 不必是发信息的多址发送组的成员。

当 socket 预定一个多址发送组/端口时, 它会接收到其它主机向该组 /端口发送的报文,就如同该组/端口的其他成员。 socket 通过方法 leaveGroup(InetAddress addr) 退出一个组。 多个 MulticastSocket 可同时预定一个多址发送组和端口,并且它们都会接收到该组的报文。

当前 applet 不允许使用多址发送 socket 。


构造子索引

MulticastSocket()
创建一个多址发送 socket。
MulticastSocket(int)
创建多址发送 socket 并将其联系到特定端口。

方法索引

getInterface()
查找用来多址发送的网络接口地址。
getTTL()
获得在该 socket 发送的信息包的缺省存活时间。
joinGroup(InetAddress)
连接一个多址发送组。
leaveGroup(InetAddress)
脱离多址发送组。
send(DatagramPacket, byte)
将带有 TTL (存活时间) 的分组报文发送到目的地。
setInterface(InetAddress)
设置在此 socket 上的多址发送网络输出接口,设置为非系统默认值。
setTTL(byte)
设置在该 socket 发送的信息包的缺省存活时间。

构造子

MulticastSocket
 public MulticastSocket() throws IOException
创建一个多址发送 socket。

MulticastSocket
 public MulticastSocket(int port) throws IOException
创建多址发送 socket 并将其绑定到特定端口。

参数:
local - 使用的端口。

方法

setTTL
 public void setTTL(byte ttl) throws IOException
设置在该 socket 上发送的信息包的缺省存活时间(TTL)。TTL 设置发送到多址发送组的 DatagramPackets 的存活时间,该时间定义了信息包死亡之前在网络上被转发的 "hops" 数。

ttl 是 无符号 8位数, 并必须属于范围 0

Parameters:
ttl - 存活时间
getTTL
 public byte getTTL() throws IOException
获得在该 socket 上发送的信息包的缺省存活时间。

joinGroup
 public void joinGroup(InetAddress mcastaddr) throws IOException
加入一个多址发送组。

参数:
mcastaddr - 要加入的多址发送地址
抛出: IOException
如果连接时出错或该地址不是多址发送地址。
leaveGroup
 public void leaveGroup(InetAddress mcastaddr) throws IOException
脱离多址发送组。

参数:
mcastaddr - 要脱离的多址发送地址
抛出: IOException
如果离开时出错或该地址不是多址发送地址。
setInterface
 public void setInterface(InetAddress inf) throws SocketException
设置此 socket 上的多址发送网络输出接口,设置为非系统默认值。用于 multihomed 主机。

getInterface
 public InetAddress getInterface() throws SocketException
提取用来多址发送的网络接口地址。

send
 public synchronized void send(DatagramPacket p,
                               byte ttl) throws IOException
将带有 TTL (存活时间)的分组报文包发送到目的地。此方法只在需要特定 TTL 的实例中使用;或者通常在该 socket 上设置一次 TTL,然后对所有信息包均使用此缺省 TTL 。此方法 改变该 socket 的缺省 TTL。

参数:
p - 被发送的信息包。 信息包必须包含目标多址发送IP 地址以及被发送的数据。向目标多址发送地址发送信息包时不必是该组的成员。
ttl - 多址发送信息包的可选存活时间。 缺省 ttl 是 1。
抛出: IOException
如果发生错误,例如在设置 ttl 时出错。
参见:
send, receive

当前位置 类层次 (JDK) 所有类 (JDK) 所有域和方法 (JDK)