//得到230.0.0.1的地址信息 socket.joinGroup(address);
//使用joinGroup()将广播套接字绑定到地址上 DatagramPacket packet; for(int i=0;i<5;i++) {
byte[] buf=new byte[256]; //创建缓冲区
packet=new DatagramPacket(buf,buf.length); //创建接收数据报
socket.receive(packet); //接收
String received=new String(packet.getData()); //由接收到的数据报得到字节数组, //并由此构造一个String对象
System.out.println(\ //打印得到的字符串 } //循环5次
socket.leaveGroup(address); //把广播套接字从地址上解除绑定 socket.close(); //关闭广播套接字 } }
2. 服务器方程序:MulticastServer.java public class MulticastServer{
public static void main(String args[]) throws java.io.IOException {
new MulticastServerThread().start(); //启动一个服务器线程 } }
3. 程序MulticastServerThread.java import java.io.*; import java.net.*; import java.util.*;
public class MulticastServerThread extends QuoteServerThread
//从QuoteServerThread继承得到新的服务器线程类MulticastServerThread {
Private long FIVE_SECOND=5000; //定义常量,5秒钟 public MulticastServerThread(String name) throws IOException {
super(\
//调用父类,也就是QuoteServerThread的构造函数 }
public void run() //重写父类的线程主体 {
while(moreQuotes) {
//根据标志变量判断是否继续循环 try{
byte[] buf=new byte[256]; //创建缓冲区 String dString=null;
if(in==null) dString=new Date().toString(); //如果初始化的时候打开文件失败了, //则使用日期作为要传送的字符串 else dString=getNextQuote();
//否则调用成员函数从文件中读出字符串 buf=dString.getByte();
//把String转换成字节数组,以便传送send it
InetAddress group=InetAddress.getByName(\ //得到230.0.0.1的地址信息 DatagramPacket packet=new DatagramPacket(buf,buf.length,group,4446);
//根据缓冲区,广播地址,和端口号创建DatagramPacket对象 socket.send(packet); //发送该Packet try{
sleep((long)(Math.random()*FIVE_SECONDS)); //随机等待一段时间,0~5秒之间 }catch(InterruptedException e) { } //异常处理 }catch(IOException e){ //异常处理 e.printStackTrace( ); //打印错误栈 moreQuotes=false; //置结束循环标志 } }
socket.close( ); //关闭广播套接口 } }