理论教育 Java程序设计中的组播:优点和缺点

Java程序设计中的组播:优点和缺点

时间:2023-10-18 理论教育 版权反馈
【摘要】:当然,组播也具有以下缺点:组播与单播相比没有纠错机制,当发生错误的时候难以弥补。表13.12MulticastSocket的常用方法使用UDP进行多播程序设计的一般过程如下:接收端准备一个空的数据包用来准备保存接收的数据。图13.16UDP通信交互过程一个简单的UDP组播程序,实现发送端向指定组播地址发送数据,接收端加入指定组播地址接收数据。

Java程序设计中的组播:优点和缺点

单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网所有主机的数据通信。然而很多情况下,需要对一组特定的主机进行通信,不是一台主机也不是整个局域网上的所有主机,这时候就需要用到“组播”。

组播,也称为“多播”,它是先将网络中的主机进行逻辑分组,然后在进行数据发送的时候,仅在同一分组中进行,其他没有加入此分组的主机不会收到数据。

组播和广播的区别在于前者既可以一次将数据发送到多个主机,又能保证不影响其他不需要(未加入组)的主机的通信。因此,组播主要应用于网上视频、网上会议等。

另外,相对于单播和广播,组播具有如下的优点:

(1)节省了带宽和服务器。组播将具有同种业务的主机加入同一数据流后可以共享同一通道,这样既具有广播的优点而又不需要广播那么多的带宽。

(2)服务器的总带宽不受客户端带宽的限制。由于组播协议是根据接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。

(3)组播允许在广域网即Internet上进行传输,而不像广播仅仅只能在同一局域网上才能进行。

当然,组播也具有以下缺点:

(1)组播与单播相比没有纠错机制,当发生错误的时候难以弥补。

(2)组播的网络支持存在缺陷,需要路由器及网络协议栈的支持。

要实现组播,需要运用java.net 包下的MulticastSocket类。MulticastSocket类为多播数据套接字,用于发送和接收IP多播包,该类继承自DatagramSocket,在DatagramSocket的基础上加入了“多播组”的功能。

创建MulticastSocket对象的构造方法与创建DatagramSocket对象的构造方法类似,需要根据发送端和接收端的不同,应选择不同的构造方法。

1.MulticastSocket ()

该构造方法用于创建发送端的MulticastSocket对象,若在创建MulticastSocket对象没有指定端口号,系统会分配一个没有被其他网络程序所使用的端口号。

2.MulticastSocket (int port)

该构造方法既可用于创建接收端的MulticastSocket对象,也可以创建发送端的MulticastSocket对象。在创建接收端的MulticastSocket对象时,必须指定端口号,该端口号表示接收端的数据监听端口。

MulticastSocket类还提供了用于发送和接收DatagramPacket数据报、加入多播组和离开多播组等方法,这些常用方法如表13.12所示。

表13.12 MulticastSocket的常用方法

使用UDP进行多播程序设计的一般过程如下:

(1)接收端准备一个空的数据包用来准备保存接收的数据。

(2)接收端创建MulticastSocket,并监听某个端口是否有数据输入。(www.daowen.com)

(3)接收端使用joinGroup()方法加入某个指定的多播组。

(4)接收端调用MulticastSocket的receive()方法等待接收数据。

(5)发送端创建多播Socket(MulticastSocket)。

(6)发送端准备要发送的数据包,并在数据包中写入多播组的IP地址和数据接收端口号。

(7)发送端使用MulticastSocket的send()方法发送数据,并在数据发送完毕之后释放资源。

(8)接收端收到数据并进行处理,在处理完毕之后释放资源。

UDP组播的交互过程如图13.16所示。

图13.16 UDP通信交互过程

【例13.7】一个简单的UDP组播程序,实现发送端向指定组播地址发送数据,接收端加入指定组播地址接收数据。

在cn.pzhu.udp包下创建一个名为ReceiverGroup的类,并在类中编写接收端程序,关键代码如下:

下面,开始编写发送端程序。在cn.pzhu.udp包下创建一个名为SenderGroup的类,并在类中编写发送端程序,关键代码如下:

程序运行后,发送端运行结果如图13.17所示。

图13.17 发送端运行结果

接收端接收数据,运行结果如图13.18所示。

图13.18 接收端接收数据之后的运行结果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈