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) {
				}
			}
		}
	}
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值