如题所示,本文要写的是两台或多台android设备,其中有一台作为服务端,则另外一台或几台作为客户端,然后通过UDP进行自动连接.其实现的原理很简单,服务端这一边通过MulticastSocket将自己的有关信息,如IP,端口等广播出去,同一个广播地址里面的客户端可以接收到该广播,并从中解析要相关的信息.

   使用UDP进行多点广播,其基本的步骤如下:

一.  发送方发送广播步骤:

1.  创建一个MulticastSocket对象


MulticastSocket multicastSocket= new  MulticastSocket(4444);

2.  创建一个 InetAddress .要使用多点广播,需要让一个数据报标有一组目标主机地址,其思想便是设置一组特殊网络地址作为多点广播地址,第一个多点广播地址都被看作是一个组,当客户端需要发送.接收广播信息时,加入该组就可以了.IP协议为多点广播提供这批特殊的IP地址,这些IP地址范围是224.0.0.0---239.255.255.255,其中224.0.0.0为系统自用.下面BROADCAST_IP是自己声明的一个String类型的变量,其范围但是前面所说的IP范围,比如BROADCAST_IP="224.224.224.224"

InetAddress serverAddress = InetAddress.getByName(BROADCAST_IP);

3.  需要广播出去的重要信息,比如服务端的局域网IP,或动态获得IP.下面介绍.

String ip= "192.168.137.60";

4.  将要广播出去的数据转为byte类型

byte data[] = ip.getBytes();

5. 创建一个DatagramPacket 对象,并指定要讲这个数据包发送到网络当中的哪个地址,以及端口号

DatagramPacket  package = new DatagramPacket (data , data.length , serverAddress , 4444);

6. 将该MulticastSocket对象加入到指定的多点广播地址,MulticastSocket使用public void joinGroup(InetAddress mcastaddr)  throws IOException方法加入指定组.

multicastSocket.joinGroup(serverAddress);

7.  调用MulticastSocket对象的send方法 发送数据




8.  如果不想再接收,广播数据,可以采用

public void leaveGroup(InetAddress mcastaddr) throws IOException
 
 
multicastSocket.leaveGroup(serverAddress);

 

二.  接收方接收广播步骤:

1.  创建一个MulticastSocket 对象,并指定监听的端口号

MulticastSocket multicastSocket= new  MulticastSocket

2.  创建一个 InetAddress .

InetAddress serverAddress = InetAddress.getByName(BROADCAST_IP);

3.  将该MulticastSocket对象加入到指定的多点广播地址,MulticastSocket使用public void joinGroup(InetAddress mcastaddr)  throws                       IOException方法加入指定组.

multicastSocket.joinGroup(serverAddress);

4. 创建一个byte数组用于接收

byte data[] = new byte[1024];

5. 创建一个空的DatagramPackage对象


6. 使用receive方法接收发送方所发送的数据,同时这也是一个阻塞的方法

socket.receive(package); 

7. 得到发送过来的数据

String serverIP=new String(package.getData() , package.getOffset() , package.getLength());


8. 同样地,如果不想再接收,广播数据,可以采用 

public void leaveGroup(InetAddress mcastaddr) throws IOException
 

 
  multicastSocket.leaveGroup(serverAddress);