Java网络编程之组播小案例

原创 2012年03月26日 16:52:53

网络数据传输分为三类,单播,广播,组播,其中组播是兼容前两者特点。发送者每次发送的数据可以被组内的所有

接受者收到。在组内的发送者和每一个接受者之间实现点到多点网络传输,也称多点传送。

组播是一种介于单播传输和广播传输之间的一种中间技术。当采用组播方式传送数据包时,发送方只需要发送一份

相同的数据包,通过路由器动态决定数据包的路由,即寻找组播组的地址,只有必要时才赋值数据,然后将数据发送到

这个组的每一个主机中。它可以大大提高数据传送效率,减少了骨干网络出现网络拥塞的可能性。比前两种方式效率都

很好。

下面来演示一下使用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();
	}
}

通过开启多个接收端,然后开启发送端,就可以实现组播的效果

【Linux网络编程】多播、组播

概述 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组...
  • dengjin20104042056
  • dengjin20104042056
  • 2016年08月29日 22:29
  • 1354

linux网络编程之二-----多播(组播)编程

多播编程实例服务器端下面是一个多播服务器的例子。多播服务器的程序设计很简单,建立一个数据包套接字,选定多播的IP地址和端口,直接向此多播地址发送数据就可以了。多播服务器的程序设计,不需要服务器加入多播...
  • ctthunagchneg
  • ctthunagchneg
  • 2015年06月20日 01:25
  • 1300

linux网络编程之一-----多播(组播)编程

什么是多播        组播(Multicast)是网络一种点对多(one to many)的通信方式,通过报文复制完成网络中一台server对应多台接收者的高效数据传 送。对其形象的比喻就是类似于...
  • ctthunagchneg
  • ctthunagchneg
  • 2015年06月20日 00:33
  • 2387

WIFI项目--【Java TCP/IP Socket】 — 单播、广播、组播

在当前网络通信中(TCP/IP也不例外)有三种通信模式:单播、广播、组播(又叫多播, 个人感觉叫多播描述的有点不恰当),其中多播出现的时间最晚,但同时具备单播和广播的优点,最具有发展前景。 通信方式...
  • u011484134
  • u011484134
  • 2015年10月24日 20:53
  • 1022

【Java TCP/IP Socket】 — 单播、广播、组播

在当前网络通信中(TCP/IP也不例外)有三种通信模式:单播、广播、组播(又叫多播, 个人感觉叫多播描述的有点不恰当),其中多播出现的时间最晚,但同时具备单播和广播的优点,最具有发展前景。...
  • dabing69221
  • dabing69221
  • 2013年12月12日 18:54
  • 7121

Linux环境下服务器利用组播来获取客户端IP

linux环境中,在通信双方互相不知对方IP的情况下,使用组播传输来获取对方IP。主要内容有如何获取本机IP地址和主机名以及组播传输两方面内容。...
  • qq_14976351
  • qq_14976351
  • 2016年11月27日 20:58
  • 1398

windows网络编程之组播

setsockopt (s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger)); ///////////////////////...
  • u011164819
  • u011164819
  • 2016年10月31日 09:28
  • 1390

java UDP协议和组播实现

java UDP协议和组播实现 UDP(User Datagram Protocol,用户数据报协议)是传输层的另一种协议,它比TCP具有更快的传输速度,但是不可靠。 UDP发送的数据单元称为UD...
  • gebitan505
  • gebitan505
  • 2014年06月25日 11:38
  • 2057

Java UDP 单播、多播(组播)、广播、任播(未实现)

单播、组播、广播、任播的定义 单播(unicast): 是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如...
  • chy555chy
  • chy555chy
  • 2016年10月11日 16:28
  • 2511

java基于socket的组播协议实现代码(局域网聊天室)

背景:N台设备需要在同组局域网内搜索到带有某个特征的设备,该设备接收到消息以后同样以组播的方式返回信息,两两交换ip地址以后实现一对一的信息交互。 上代码: package com.sdzn.we...
  • lishirong
  • lishirong
  • 2016年04月13日 08:49
  • 1584
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java网络编程之组播小案例
举报原因:
原因补充:

(最多只允许输入30个字)