Java使用MulticastSocket实现多点广播


MulticastSocket可以将数据报以广播的方式发送到多个客户端。

MulticastSocket有如下3个构造方法

public MulticastSocket():使用本机默认地址,随机端口来创建MulticastSocket对象。

public MulticastSocket(int portNumber):使用本机默认地址,指定端口创建MulticastSocket对象。

public MulticastSocket(SocketAddress bindaddr):使用本机指定IP地址,指定端口来创建MulticastSocket对象。

创建MulticastSocket对象后,还炫耀将MulticastSocket加入到指定的多点广播地址,MulticastSocket使用joinGroup()方法加入指定组;使用leaveGroup()方法脱离一个组。

joinGroup(InetAddress addr);

leaveGroup(InetAddress addr);

InetAddress 类没有提供构造,而提供如下两个静态方法来获取InetAddress对象

getByName(String host):如getByName("localhost"),getByName(www.bkjia.com);

getByAddress(byte []addr):如getByAddress(new byte[]{127,0,0,1});

MulticastSocket类中有一个setTimeToLive(int ttl),当ttl为0时,指定数据报应停留在本地主机,为1时,指定数据报发送到本地局域网网,为32时,发送到本站点的网络上。为64时,发送到本地区,128时,发送到本大洲,255为全球。

  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.InetAddress;  
  4. import java.net.MulticastSocket;  
  5. import java.util.Scanner;  
  6.   
  7.   
  8. public class Test implements Runnable{  
  9.     MulticastSocket socket;  
  10.     DatagramPacket rece;  
  11.     byte []buffer;  
  12.       
  13.     public Test()  
  14.     {  
  15.         try {  
  16.             socket=new MulticastSocket(4800);  
  17.             InetAddress addr=InetAddress.getByAddress(new byte[]{(byte)230,0,0,1});  
  18.             socket.joinGroup(addr);  
  19.             buffer=new byte[4000];  
  20.             rece=new DatagramPacket(buffer,4000);  
  21.             Thread th=new Thread(this);  
  22.             th.start();  
  23.             Scanner sc=new Scanner(System.in);  
  24.             while(sc.hasNextLine())  
  25.             {  
  26.                 DatagramPacket dp=new DatagramPacket(sc.nextLine().getBytes(),sc.nextLine().getBytes().length,addr,4800);  
  27.                 socket.send(dp);  
  28.             }  
  29.               
  30.               
  31.               
  32.               
  33.               
  34.               
  35.               
  36.               
  37.         } catch (Exception e) {  
  38.             // TODO Auto-generated catch block   
  39.             e.printStackTrace();  
  40.         }  
  41.     }  
  42.       
  43.     public static void main(String[] args) {  
  44.         new Test();  
  45.           
  46.     }  
  47.   
  48.     @Override  
  49.     public void run() {  
  50.         while(true)  
  51.         {  
  52.             try {  
  53.                 socket.receive(rece);  
  54.                 System.out.println(new String(buffer));  
  55.             } catch (IOException e) {  
  56.                 e.printStackTrace();  
  57.             }  
  58.               
  59.         }  
  60.           
  61.     }  
  62.   
  63. }  

上面的代码能运行,貌似有点问题,不过还是可以通讯,有时间在好好做一做,先做到这里。

相关内容