Java网络编程之组播小案例
2012-03-26 16:52
441 查看
网络数据传输分为三类,单播,广播,组播,其中组播是兼容前两者特点。发送者每次发送的数据可以被组内的所有
接受者收到。在组内的发送者和每一个接受者之间实现点到多点网络传输,也称多点传送。
组播是一种介于单播传输和广播传输之间的一种中间技术。当采用组播方式传送数据包时,发送方只需要发送一份
相同的数据包,通过路由器动态决定数据包的路由,即寻找组播组的地址,只有必要时才赋值数据,然后将数据发送到
这个组的每一个主机中。它可以大大提高数据传送效率,减少了骨干网络出现网络拥塞的可能性。比前两种方式效率都
很好。
下面来演示一下使用Java Socket的组播类实现一个组播的小案例
首先是接收端
然后是发送端
通过开启多个接收端,然后开启发送端,就可以实现组播的效果
接受者收到。在组内的发送者和每一个接受者之间实现点到多点网络传输,也称多点传送。
组播是一种介于单播传输和广播传输之间的一种中间技术。当采用组播方式传送数据包时,发送方只需要发送一份
相同的数据包,通过路由器动态决定数据包的路由,即寻找组播组的地址,只有必要时才赋值数据,然后将数据发送到
这个组的每一个主机中。它可以大大提高数据传送效率,减少了骨干网络出现网络拥塞的可能性。比前两种方式效率都
很好。
下面来演示一下使用Java Socket的组播类实现一个组播的小案例
首先是接收端
package com.bird.test; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; import java.util.Date; /** * 组播的客户端 * @author Bird * */ public class MulticastReceive { public static void main(String[] args) throws Exception { test(); } public static void test() throws Exception{ InetAddress group = InetAddress.getByName("224.0.0.2");//组播地址 int port = 8888; MulticastSocket msr = null;//创建组播套接字 try { msr = new MulticastSocket(port); msr.joinGroup(group);//加入连接 byte[] buffer = new byte[8192]; System.out.println("接收数据包启动!(启动时间: "+new Date()+")"); while(true){ //建立一个指定缓冲区大小的数据包 DatagramPacket dp = new DatagramPacket(buffer, buffer.length); msr.receive(dp); String s = new String(dp.getData(),0,dp.getLength()); //解码组播数据包 System.out.println(s); } } catch (Exception e) { e.printStackTrace(); }finally{ if(msr!=null){ try { msr.leaveGroup(group); msr.close(); } catch (Exception e2) { // TODO: handle exception } } } } }
然后是发送端
package com.bird.test; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; import java.util.Date; /** * 组播的服务端 * @author Bird * */ public class MulticastSender { public static void server() throws Exception{ InetAddress group = InetAddress.getByName("224.0.0.2");//组播地址 int port = 8888; MulticastSocket mss = null; try { mss = new MulticastSocket(port); mss.joinGroup(group); System.out.println("发送数据包启动!(启动时间"+new Date()+")"); while(true){ String message = "Hello "+new Date(); byte[] buffer = message.getBytes(); DatagramPacket dp = new DatagramPacket(buffer, buffer.length,group,port); mss.send(dp); System.out.println("发送数据包给 "+group+":"+port); Thread.sleep(1000); } } catch (Exception e) { e.printStackTrace(); }finally{ try { if(mss!=null){ mss.leaveGroup(group); mss.close(); } } catch (Exception e2) { // TODO: handle exception } } } public static void main(String[] args) throws Exception { server(); } }
通过开启多个接收端,然后开启发送端,就可以实现组播的效果
相关文章推荐
- Java网络编程之组播小案例
- Java学习笔记52(网络编程:UDP协议案例)
- Java学习笔记53(网络编程:TCP协议案例)
- Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例
- Java网络编程:简单聊天机器人实现案例
- java网络编程之服务端客户端socket简单通信案例
- [置顶] JAVA进阶案例 TCP编程之网络聊天工具(客户端)
- Java网络编程之Netty入门案例-yellowcong
- [置顶] JAVA进阶案例 TCP编程之网络聊天工具(服务端)
- Java基础知识强化之网络编程笔记07:TCP之服务器给客户端一个反馈案例
- 案例三:java网络编程(对象流传输)
- 【网络编程3】Java组播套接字
- JAVA网络编程UDP案例
- 案例四:java网络编程 双工通讯(带界面)
- java网络编程和io,多线程结合完成文件上传和下载案例
- Java网络编程——13.IP组播
- JAVA网络编程UDP案例
- Java基础知识强化之网络编程笔记04:UDP之发送端的数据来自于键盘录入案例
- Java学习图形界面+网络编程案例---------网络简易通讯
- JAVA 网络编程(包含案例)