用数据报进行广播通讯-Java网络编程

DatagramSocket只允许数据报发送一个目的地址,java.net包中提供了一个类MulticastSocket,允许数据报以广播方式发送到该端口的所有客户。MulticastSocket用在客户端,监听服务器广播来的数据。1. 客户方程序:MulticastClient.java  import java.io.*;  import java.net.*;  import java.util.*;  public class MulticastClient {    public static void main(String args[]) throws IOException    {     MulticastSocket socket=new MulticastSocket(4446);     //创建4446端口的广播套接字     InetAddress address=InetAddress.getByName("230.0.0.1");     //得到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("Quote of theMoment:"+received);       //打印得到的字符串     } //循环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("MulticastServerThread");      //调用父类,也就是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");        //得到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( ); //关闭广播套接口   } }

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《用数据报进行广播通讯-Java网络编程》
文章链接:https://www.skykkk.com/archives634.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

相关推荐

  • 暂无文章