组播主要就是创建一个MulticastSocket,然后还是通过和UDP一样的DatagramPacket来收发数据
一般是先加入一个组播网,发送数据,接收数据,然后离开组播网
下面是一个Java Network Programming的例子,我略加改动,用来对组播网all-systems.mcast.net 4000监听以及发送数据
请先运行MulticastSniffer然后再运行MulticastSender
 public class MulticastSniffer{
 public static void main(String[] args){
 InetAddress group = null;
 int port = 0;
 try{
 group = InetAddress.getByName(args[0]);
 port = Integer.parseInt(args[1]);
 }
 catch(Exception e){
 try{
 group = InetAddress.getByName("sap.mcast.net");
 }
 catch(UnknownHostException e1){
 System.err.println("Shit happens");
 System.exit(0);
 }
 port = 9875;
 }
 MulticastSocket ms = null;
 try{
 ms = new MulticastSocket(port);
 ms.joinGroup(group);  byte[] buffer = new byte[8192];
 while(true){
 DatagramPacket dp = new DatagramPacket(buffer,buffer.length);
 ms.receive(dp);
 String s = new String(dp.getData());
 System.out.println(s);
 }
 }
 catch(IOException e){
 System.err.println(e);
 }
 finally{
 if(ms != null){
 try{
 ms.leaveGroup(group);
 ms.close();
 }
 catch(IOException e){}
 }
 }
   }
 }
 public class MulticastSender{
   public static void main(String[] args){
  InetAddress ia = null;
  int port = 0;
  byte ttl = (byte)1;   try{
  ia = InetAddress.getByName(args[0]);
  port = Integer.parseInt(args[1]);
  if(args.length > 2)  ttl = (byte)Integer.parseInt(args[2]);
  }
  catch(Exception e){
  System.err.println(e);
  System.err.println(
  "Usage: java MulticastSender multicast_address port ttl");
  System.exit(1);
  }   byte[] data = "Here is some multicast data\r\n".getBytes();
  DatagramPacket dp = new DatagramPacket(data,data.length,ia,port);   try{
  MulticastSocket ms = new MulticastSocket();
  ms.joinGroup(ia);
  for(int i = 1;i < 10;i++){
  ms.send(dp);
  ms.setTimeToLive(ttl);
  }
  ms.leaveGroup(ia);
  ms.close();
  }
  catch(SocketException e){
  System.err.println(e);
  }
  catch(IOException ie){
  System.err.println(ie);
  }
    }
  }