android 局域网广播ip,同wifi环境下android设备自动获取socket服务端的ip地址和端口号的方法-UDP广播...

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);

你可能感兴趣的:(android,局域网广播ip)