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