Java UDP组播的总结

备注:本文客户端 指消息的发送方,服务端 指消息的接收方
1、客户端发送也可以使用  DatagramSocket 类,但对于组播需要指定 setTimeToLive(ttl),使用DatagramSocket  作为发送方是怎么处理的 ,不太确定
2、客户端使用 MulticastSocket 类时可以不加入广播组
3、客户端向组播的虚拟IP和port-A 发送数据时,服务端必须监听这个port-A才能收到数据,在服务端侧,这个port 并不是虚拟IP的port ,而是服务端本地的port ,所以这个port 在服务端并不能多次被绑定。从结果上来讲 可以理解为 客户端向虚拟IP的主机的port-A发送消息后,虚拟IP主机会向加入这个组的所有机器的port-A 端口发送消息,所以可以理解为 组播中 组 是虚拟IP+Port来标识一个组(但组的port 和服务端监听的port 必须一致) 
4、组播各个机器不互通的解决方法
由于单播是指定发送目的的IP和端口,所有只要能ping通对方的IP就能将单播的UDP报文发送过去。
但是对于组播,由于加入和发送的目的是D类地址,所以得保证各个机器之间是同一个网段 解决办法:
1)禁止其他网卡,只保留一块网卡
2)修改IP和网关,确认在同一网段(在只有一块儿网卡的前提下 才确定有效)
3) 服务端有多块网卡的情况:绑定地址时 加上 指定网卡的IP+port(可以使用InetSocketAddress 类
MulticastSocket datagramSocket = new MulticastSocket(new InetSocketAddress("192.168.1.106",56544)); 表示 监听IP为192.168.1.106这个网卡的56544端口
   客户端有多块网卡的情况:绑定地址时 加上 指定网卡的IP+port
MulticastSocket datagramSocket = new MulticastSocket(new InetSocketAddress("192.168.1.106",56544)); 表示 使用IP为192.168.1.106这个网卡的56544端口 作为发送方的信息,
发送时 再指定接收组的 虚拟IP和端口
DatagramPacket datagramPacket = new DatagramPacket(bytes,0,bytes.length,InetAddress.getByName("226.7.8.9"),10022);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值