Java 中的 java.net.MulticastSocket 类

2024年9月10日 | 阅读 6 分钟

Java 中的 MulticastSocket 类是 DatagramSocket 类的子类,用于发送和接收多播数据报。多播数据报是一种发送到网络上一组主机的数据报。MulticastSocket 类提供了加入和离开多播组以及发送和接收多播数据报的方法。

要创建 MulticastSocket 对象,请指定多播组地址和端口号。然后,您可以使用 MulticastSocket 对象发送和接收多播数据报。

MulticastSocket 类是发送和接收多播数据报的强大工具。它可以用于实现各种应用程序,例如聊天、文件共享和流媒体应用程序。

构造函数

public MulticastSocket(): Java 中的 MulticastSocket 类用于发送和接收 IP 多播数据报。它提供了加入和离开多播组以及发送/接收多播数据包的功能。

语法

public MulticastSocket(int port): public MulticastSocket(int port) 方法是 Java.net.MulticastSocket 类中的一个构造函数,用于创建一个绑定到指定端口的新 MulticastSocket 对象。该构造函数不接受其他参数。

语法

参数

port : MulticastSocket 对象应绑定的端口号。

public MulticastSocket(SocketAddress bindaddr): MulticastSocket 类中的 MulticastSocket(SocketAddress bindaddr) 构造函数用于创建一个 MulticastSocket 对象并将其绑定到指定的 SocketAddress。

语法

参数

bindaddr : MulticastSocket 对象应绑定的套接字地址。

方法

setTTL (已弃用): MulticastSocket 类中已弃用的 setTTL(int ttl) 方法曾用于设置多播数据包的生存时间 (TTL) 值。TTL 值决定了多播数据包在网络中可以传播多远。

语法

参数

ttl : 生存时间

setTimeToLive(): MulticastSocket 类中的 setTimeToLive(int ttl) 方法用于设置多播数据包的生存时间 (TTL) 值。TTL 值决定了多播数据包在网络中可以传播多远。

TTL 值必须在 0 到 255 之间(含)。如果 TTL 值超出此范围,将抛出 IllegalArgumentException。使用 TTL 值为 0 发送的多播数据包不会在网络上传输,但可能会在本地传递。

语法

参数

ttl : 生存时间

getTTL (已弃用): getTimeToLive() 方法返回套接字上发送的多播数据包的默认生存时间。

语法

返回: 默认的生存时间值

抛出

IOException: 获取默认生存时间值时发生 I/O 错误;getTTL() 方法会抛出 IOException。

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

语法

返回: 默认的生存时间值

抛出

IOException: 获取默认生存时间值时发生 I/O 异常。

joinGroup(): Java.net.MulticastSocket 类中的 joinGroup() 方法用于加入本地系统上的指定多播组。多播组由传递给 joinGroup() 方法的 InetAddress 对象标识。

语法

参数

group: 标识要加入的多播组的 InetAddress 对象。

ttl: 发送到多播组的多播数据包的 TTL 值。

抛出

IOException: 加入多播组时出错。

SecurityException: 如果安全管理器不允许此操作。

joinGroup() 方法还有一个重载版本,允许您指定加入多播组时要使用的网络接口。

语法

参数

mcastaddr : 标识要加入的多播组的 SocketAddress 对象。

netIf: NetworkInterface 对象指定要用于加入多播组的网络接口。

抛出

IOException: 加入多播组时出错。

SecurityException: 如果安全管理器不允许此操作。

leaveGroup(): 它允许 MulticastSocket 停止接收来自指定多播组的多播数据包。

语法

参数

mcastaddr : 标识要离开的多播组的 InetAddress 对象。

抛出

IOException: 离开多播组时出错。

SecurityException: 如果安全管理器不允许此操作。

leaveGroup() 方法还有一个重载版本,允许您指定要离开多播组的网络接口。

语法

参数

mcastaddr : 标识要离开的多播组的 SocketAddress 对象。

netIf: NetworkInterface 对象指定要用于离开多播组的网络接口。

抛出

IOException: 离开多播组时出错。

SecurityException: 如果安全管理器不允许此操作。

setInterface(): Java 中的 setInterface() 方法用于设置 MulticastSocket 将用于发送和接收多播数据包的网络接口。

语法

参数

inf: InetAddress 对象指定应使用的网络接口。

抛出

SocketException: 如果底层协议中存在错误,例如 TCP 错误。

getInterface(): Java 中的 getInterface() 方法用于获取 MulticastSocket 当前用于发送和接收多播数据包的网络接口。该方法返回一个表示网络接口的 InetAddress 对象。

语法

抛出

SocketException: 如果底层协议中存在错误,例如 TCP 错误。

setNetworkInterface(): 指定此套接字上外发多播数据报的网络接口。

语法

参数

netIf: NetworkInterface 对象指定应使用的网络接口。

抛出

SocketException: 如果底层协议中存在错误,例如 TCP 错误。

getNetworkInterface(): getNetworkInterface() 方法返回用于从此套接字发送数据包的网络接口。

语法

抛出

SocketException: 如果底层协议中存在错误,例如 TCP 错误。

setLoopbackMode(): Java 中的 setLoopbackMode() 方法用于打开或关闭 MulticastSocket 的回送模式。回送模式默认启用。启用回送模式时,套接字会接收由套接字本身发送的多播数据包。

它用于指定多播数据包是否会回送到本地套接字。

语法

参数

disable: 一个布尔值,指定是否应启用或禁用回送模式。

抛出

SocketException: 如果底层协议中存在错误,例如 TCP 错误。

getLoopbackMode(): 获取套接字是否会接收其多播数据包的设置。

语法

抛出

SocketException: 如果底层协议中存在错误,例如 TCP 错误。

send() (已弃用): Java 中的 send() 方法用于将数据包发送到多播组。它允许为出站数据包指定一个与通过 setTimeToLive() 方法指定的默认值不同的生存时间 (TTL) 值。send() 方法不会更改默认 TTL 值,仅将指定值用于当前数据包。

语法

参数

p: 要发送的数据报包。

ttl: 数据包的生存时间 (TTL) 值。

抛出

IOException: 发送数据包时发生错误。

Java 程序演示各种 MulticastSocket 类。

文件名: CustomMulticastSocketExample

输出

Network Interface: name:lo (lo)
Received: Hello, multicast!