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.baidu.com);
getByAddress(byte []addr):如getByAddress(new byte[]{127,0,0,1});
MulticastSocket类中有一个setTimeToLive(int ttl),当ttl为0时,指定数据报应停留在本地主机,为1时,指定数据报发送到本地局域网网,为32时,发送到本站点的网络上。为64时,发送到本地区,128时,发送到本大洲,255为全球。
import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; import java.util.Scanner; public class Test implements Runnable{ MulticastSocket socket; DatagramPacket rece; byte []buffer; public Test() { try { socket=new MulticastSocket(4800); InetAddress addr=InetAddress.getByAddress(new byte[]{(byte)230,0,0,1}); socket.joinGroup(addr); buffer=new byte[4000]; rece=new DatagramPacket(buffer,4000); Thread th=new Thread(this); th.start(); Scanner sc=new Scanner(System.in); while(sc.hasNextLine()) { DatagramPacket dp=new DatagramPacket(sc.nextLine().getBytes(),sc.nextLine().getBytes().length,addr,4800); socket.send(dp); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { new Test(); } @Override public void run() { while(true) { try { socket.receive(rece); System.out.println(new String(buffer)); } catch (IOException e) { e.printStackTrace(); } } } }
上面的代码能运行,貌似有点问题,不过还是可以通讯,有时间在好好做一做,先做到这里。