1、最近作项目,须要使用socket作一个常链接,实现实时通讯,可是需求是在同一个wifi环境下,ip地址是动态获取的,这样就形成了服务端地址的不肯定性。解决这个问题的关键就是如何拿到服务端的Ip。咱们能够这样想,服务端能够在得到ip之后经过一种方式把这个地址告诉客户端。这样咱们就注意到UDP多点广播是一个好的解决方法。html
要使用多点广播,须要让一个数据报标有一组目标主机地址,其思想是设置一组特殊网络地址做为多点广播地址,第一个多点广播地址都被看做是一个组,当客户端须要发送、接收广播信息时,加入该组就能够了。IP协议为多点广播提供这批特殊的IP地址,这些IP地址范围是224.0.0.0---239.255.255.255,其中224.0.0.0为系统自用。在java中须要用到MulticastSocket这个类。java
其主要思路就是虚拟一个网络组,只要注册加入这个组的客户端均可以接收到广播者发送的数据。缓存
1、建立一个MulticastSocket类,端口号自定义,可是每一个接收者的端口号要与这个一致网络
mSocket=newMulticastSocket(BROADCAST_PORT);socket
二、虚拟一个多点广播地址,224.0.0.1--239.255.255.255任选。ide
address= InetAddress.getByName(BROADCAST_IP);this
三、创建须要发送出去的数据,自定义的,xxxx是确认信息,还包括局域网ip和socket端口号,为创建socket作准备。spa
sendData= ("xxxx"+"-"+ ip +"-"+ port).getBytes();线程
3、建立一个DatagramPacket对象,包括须要发送的数据,广播地址和端口号code
dataPacket=newDatagramPacket(sendData,sendData.length,address,
BROADCAST_PORT);
四、将该MulticastSocket对象加入到指定的多点广播地址
mSocket.joinGroup(address);//加入广播接收组
五、设置广播生存时间0-255
mSocket.setTimeToLive(1);
6. 使用MulticastSocket对象的send方法 发送数据
mSocket.send(dataPacket);
7. 不接收广播的时候调用leaveGroup方法
mSocket.leaveGroup(address);