Socket编程:MulticastSocket-API简介

MulticastSocket为多播数据套接字,用于发送和接收IP多播包,此类继承自DatagramSocket即"多播"为UDP,但是它具有加入"多播组"的能力.

一.协议介绍:

有两种类型的"一对多"服务:广播(broadcast)和多播(multicast).对与广播,本地网络(仅限于本地网络)都会受到一个数据副本.对于多播,消息只会发送给一个多播地址,网络只会把数据包发给那些需要接受数据的多播地址的数据主机.只有UDP方式允许广播和多播.

 

广播UDP数据报文和单播相似,唯一的区别是其使用的是一个广播地址而不是常规的IP.IPV6中没有明确提供广播地址,然后有一个全节点/link-local范围的多播地址,FF02::1,发送给该地址的消息将会多播到一个连接上的所有节点.IPV4的广播地址为255.255.255.255.将消息发送到统一广播网络上的注意,广播消息不会被路由器转发.

本地广播的功能有限但是某些场景非常有用,它通常用于网络游戏中位于同一本地网络(局域网)的玩家之间进行交换状态信息."广播"的代码和单播一样,只是消息地址需要换成"广播"(setBroadcast(true)开启广播信息).

因为平台系统不同,可能会广播的支持有差异性,部分系统不支持用户设置广播信息.

 

多播和广播类似,区别于单播的是它不再指定一个ip地址而且多播组(一组地址),IPV4的多播地址区间为224.0.0.0到239.255.255.255,IPV6的多播地址以FF开头.

 

  • MulticastSocket()
  • MulticastSocket(int port)
  • MulticastSocket(SockeAddress address)
  • public void setTimeToLive(int ttl):设置socket发送的多播数据包最长的存活时间.ttl范围为0~255,表示报文被传输的最大路径.报文被路由器转发一次,将会导致报文的ttl递减,当ttl为0时,此报文将被丢弃(不再被转发).可以避免一个数据包在路由器之间无限制的传播.如果值为0则只能在本机传播,1则只能在本地子网中传播.
  • public void joinGroup(InetAddress address): 针对消息接收者加入多播组.address必须为"多播地址",否则将抛出异常.网络多播只将消息发送给一组指定的接受者,这组接受者称为"多播组",通过共享的多播组地址确定,接受者需要一种机制来通知网络它对发送到特定地址的消息感兴趣,以使网络将数据包转发给它.这种通知机制叫做加入组.
  • public void leaveGroup(InetAddress address): 针对消息接受者离开多播组.
  • public void setLoopbackMode(boolean):设置回传模式,如果为true,则socket将会忽略自身发送的组播数据包.如果为false,则可以接受到自己发送的数据包.

你可能感兴趣的:(socket编程)