组播Socket基础

组播是比单播宽比广播窄的目标性更强的点对点通信。组播将数据从一台主机发送给多个不同

的主机。数据只传到某些通过加入组播组的客户端。

程序员和网络管理员不用负责选择在哪些点上复制数据,甚至不用负责发送多个副本。
Internet路由器会处理这些事情。

应用程序只将数据报包发送给组播地址,路由器将确保包被发送到改组播组中的所有主机。

组播地址:称为组播组的一组主机所共享的地址。组播地址的范围在224.0.0.0---

239.255.255.255之间(都为D类地址 1110开头)。

从应用程序来讲组播和普通UDP socket之间的区别在于必须考虑TTL值。这时IP首部中取值 0-

255的一个字节。 它的含义为包被丢弃前通过的路由数目。每通过一个路由器,其TTL减少1,

有些路由器减少2或更多。当TTL值为0时包就被丢弃。

组播最大的限制在于特殊的组播路由器是否可用。 ping all-routers.mcast.net
查看网络是否连接组播路由器。


[b]常用的API函数:[/b]

MulticastSocket()throws SocketException:绑定匿名端口
MulticastSocket(int port)throws SocketException:绑定已知端口
MulticastSocket(SocketAddress address)throws IOException:

你还可以向构造函数传送null,然后通过bind()方法进行连接

leaveGroup(InetAddress address)

public void joinGroup(InetAddress address)throws IOException
加入组播组


下面例子代码:
  try
{
MulticastSocket ms =new MulticastSocket(4000);
InetAddress ia = InetAddress.getByName("224.2.2.2");
ms.joinGroup(ia);
byte[] buffer=new byte[8192];
while(true)
{
DatagramPacket dp =new DatagramPacket(buffer,buffer.length);
ms.receive(dp);
String s=new String(dp.getData(),"8859_1");
System.out.println(s);
}
}


[b]例子2:将数据包发往组播组中的每台主机[/b]

try
{
InetAddress ia= InetAddress.getByName("experiment.mcast.net");
byte[] data= "dddffssdfdfdf".getBytes();
int port=4000;
DatagramPacket dp =new DatagramPacket(data,data.length,ia,port);
MulticastSocket ms =new MulticastSocket();
ms.send(dp);
}
catch(IOException ex)
{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值