`
ba1du
  • 浏览: 32706 次
  • 性别: Icon_minigender_1
  • 来自: Blizzard
社区版块
存档分类
最新评论

【转载】java中的组播编程

阅读更多
编辑一个java组播应用程序的过程如下

1. 创建一个用于发送和接收的MulticastSocket组播套接字对象
2. 创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
3. 使用组播套接字joinGroup(),将其加入到一个组播
4. 使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包.
   或者
   使用组播套接字的receive()方法,将组播数据包对象放入其中,接收组播数据包
5. 解码组播数据包提取信息,并依据得到的信息作出响应String s = new String(dp.getData(), 0, dp.getLength());
6. 重复过程4和5,即在while循环中实现。
7. 使用组播套接字的leaveGroup()方法,离开组播组;关闭组播套接字

接收组播数据包程序:
public class MulticastReceived {

	public static void main(String[] args) throws Exception {
		InetAddress group = InetAddress.getByName("224.0.0.4"); // 组播地址
		int port = 4006; // 端口
		MulticastSocket msr = null;
		try {
			msr = new MulticastSocket(port); // 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
			msr.joinGroup(group); // 3.使用组播套接字joinGroup(),将其加入到一个组播
			byte[] buffer = new byte[8192];
			System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")");
			while (true) {
				DatagramPacket dp = new DatagramPacket(buffer, buffer.length); // 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象
				msr.receive(dp); // 4.使用组播套接字的receive()方法,将组播数据包对象放入其中,接收组播数据包
				String s = new String(dp.getData(), 0, dp.getLength()); // 5.解码组播数据包提取信息,并依据得到的信息作出响应
				System.out.println(s);
			}
		} catch (IOException e) {
			e.printStackTrace();

		} finally {
			if (msr != null) {
				try {
					msr.leaveGroup(group); // 7.使用组播套接字的leaveGroup()方法,离开组播组
					msr.close(); // 关闭组播套接字
				} catch (IOException e) {
				}
			}
		}
	}
}



发送组播包代码:
public class MulticastSender {

	public static void main(String[] args) throws Exception {
		InetAddress group = InetAddress.getByName("224.0.0.1"); // 组播地址
		int port = 4000; // 端口
		MulticastSocket mss = null;
		try {
			mss = new MulticastSocket(port); // 1.创建一个用于发送和接收的MulticastSocket组播套接字对象
			mss.joinGroup(group); // 3.使用组播套接字joinGroup(),将其加入到一个组播
			byte[] buffer = new byte[8192];
			System.out.println("接收数据包启动!(启动时间:)" + new java.util.Date() + ")");
			while (true) {
				String message = "Hello" + new java.util.Date();
				byte[] buffer2 = message.getBytes(); // 2.创建一个指定缓冲区大小及组播地址和端口的DatagramPacket组播数据包对象

				DatagramPacket dp = new DatagramPacket(buffer, buffer.length, group, port);
				// msr.receive(dp); //接收组播数据包

				mss.send(dp); // 4.使用组播套接字的send()方法,将组播数据包对象放入其中,发送组播数据包
				// String s = new String(dp.getData(), 0, dp.getLength()); //5.解码组播数据包提取信息,并依据得到的信息作出响应
				System.out.println("发送数据包给" + group + ":" + port);
				Thread.sleep(1000);
			}
		} catch (IOException e) {
			e.printStackTrace();

		} finally {
			if (mss != null) {
				try {
					mss.leaveGroup(group); // 7.使用组播套接字的leaveGroup()方法,离开组播组
					mss.close(); // 关闭组播套接字
				} catch (IOException e) {
				}
			}
		}
	}
}


注意:
1、IPV4的组播地址为:224.0.0.0-239.255.255.255
2、加入组播组:joinGroup方法
3、MulticastSocket是组播类
4、离开组播组:leaveGroup
5、设置每个组播报文的生存时间:
setTimeToLive(int);
参数为报文在网络上转发的网络链路计数。
1)   0-如果组播限制在同一主机上的进程
2)  1-组播限制在同一子网上的进程
3)  32-组播限制在同个站点上的进程
4)  64-组播限制在同一区域内的进程
5)  128-组播限制在同一大陆上的进程
6)   255-无限制
分享到:
评论

相关推荐

    基于Java网络编程中组播技术的应用与研究.pdf

    在Java中实现组播技术,主要是通过MulticastSocket类和DatagramPacket类来完成。MulticastSocket类是Socket类的一个子类,专门用于处理组播数据包。首先,需要创建一个MulticastSocket对象,并通过setTimeToLive方法...

    java开发的组播聊天室

    Java中,我们可以利用`java.net.MulticastSocket`类来实现组播功能。首先,创建一个MulticastSocket实例,然后加入到指定的组播组,这样就能接收到该组播组内的消息。 在聊天室的实现中,服务器端通常需要监听特定...

    Java 组播组中发送和接受数据实例.7z

    这个“Java 组播组中发送和接受数据实例.7z”压缩包很可能是包含了一个或多个Java程序,用于演示如何在Java中实现多播通信。 多播通信的核心在于Internet多播地址和多播组的概念。Internet多播地址属于D类IP地址...

    java-multicast-instance.rar_java multicast_组播 Java

    5. **离开组播组**:当不再需要接收组播数据时,应调用`leaveGroup(InetAddress group)`方法离开组播组,以释放网络资源: ```java socket.leaveGroup(group); ``` 6. **关闭MulticastSocket**:最后,别忘了关闭`...

    基于Java的组播组中发送和接受数据实例.zip

    这个"基于Java的组播组中发送和接受数据实例.zip"的代码可能包含了以上所述的步骤,通过运行和分析代码,你可以更深入地理解Java中组播通信的工作原理和实现方式。对于学习和开发涉及组播的Java应用程序来说,这是一...

    Java聊天室,组播+私聊

    首先,我们要理解Java中的网络编程基础。在Java中,Socket编程是网络通信的核心,它提供了客户端和服务器端之间的连接,使得数据能够在两台计算机之间交换。在这个聊天室中,可能使用了ServerSocket来创建服务器端,...

    华为JAVA编程规范、编程军规

    以下是基于标题“华为JAVA编程规范、编程军规”以及描述中提及的文档,提炼出的一些核心知识点: 1. **命名规范**:Java编程中的命名规则非常重要,华为编程规范强调了类名、方法名、变量名应清晰易懂,遵循驼峰...

    Java 并发编程实战.pdf

    此外,该书可能会对Java中一些新的并发API进行探讨,如java.util.concurrent包下的工具类和接口,例如Executor框架、Future、CompletableFuture、ConcurrentHashMap、Semaphore等。这些工具类和接口在构建大规模并发...

    《java 并发编程实战高清PDF版》

    书中详细讨论了Java中的线程管理,包括如何创建和启动线程,以及如何控制线程的生命周期。读者将学习到`Thread`类和`Runnable`接口的基本用法,以及如何通过实现`Callable`接口创建带返回值的线程。 锁是Java并发...

    Java网络编程第三版.pdf

    1. **Java网络编程基础**:首先,书中会介绍Java中的Socket编程,包括TCP和UDP协议的基础知识,以及如何使用Java的Socket和ServerSocket类创建客户端和服务器端的连接。 2. **I/O与NIO**:Java的I/O流系统是网络...

    基于Java网络编程中组播技术的应用研究.zip

    基于Java网络编程中组播技术的应用研究

    java_udp.rar_java udp_组播

    Java UDP(用户数据报协议)是Java网络编程中不可或缺的一部分,尤其在实现P2P(对等网络)软件时,其高效、无...这个实例为你提供了一个实践的起点,通过学习和运行这个代码,你可以更好地掌握Java中的UDP组播编程。

    Java高手真经 编程基础卷:Java核心编程技术

    Java高手真经 编程基础卷:Java核心编程技术

    Java网络编程(第4版)PDF

    在Java网络编程中,首要涉及的是I/O模型。书中会介绍基础的套接字(Socket)编程,包括TCP和UDP协议的应用。TCP提供面向连接的服务,确保数据的可靠传输,而UDP则是无连接的,更注重传输效率。读者将学习如何创建和...

    Java并发编程实践高清pdf及源码

    2. **同步控制**:Java中的`synchronized`关键字用于控制对共享资源的访问,它可以修饰方法或代码块,确保同一时间只有一个线程能执行特定的代码。此外,`ReentrantLock`类提供了更细粒度的锁控制。 3. **并发容器*...

    [JAVA编程模式与范例]

    [JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例][JAVA编程模式与范例]...

    Java中的异步网络编程

    Java中的异步网络编程 Java中的异步网络编程

    JAVA网络编程资料(1)-Socket套接字—Java套接字编程.chm

    JAVA网络编程资料(1)-Socket套接字—Java套接字编程.chm

    Java高手真经(编程基础卷)光盘全部源码

    javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业参考(文本编辑器) javathread.zip 10.Java多线程...

    JAVA游戏编程

    JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门 JAVA游戏编程 JAVA入门

Global site tag (gtag.js) - Google Analytics