java组播MulticastSocket

简介: 在单播模式中有服务器端和客户端之分,而组播模式与单播模式不同,每个端都是以路由器或交换机做为中转广播站,任意一端向路由器或交换机发送消息,路由或交换机负责发送其他节点,每个节点都是同等的。

在单播模式中有服务器端和客户端之分,而组播模式与单播模式不同,每个端都是以路由器或交换机做为中转广播站,任意一端向路由器或交换机发送消息,路由或交换机负责发送其他节点,每个节点都是同等的。所以在编程模式上用同一个类表示即可——MulticastSocket

    MulticastSocket属于jdk提供的类,类路径为java.net.MulticastSocket,利用此类可以很方便地实现组播功能,下面展示一个简单例子,两个节点之间通过组播传输消息。

①节点一,指定组播地址为228.0.0.4,端口为8000,节点一通过调用MulticastSocketjoinGroup方法申请将节点一加入到组播队伍中,接着使用一个无限循环往组里发“Hello from node1”消息,这是为了方便节点2加入后接收节点1的消息做准备,需要说明的是组播是通过DatagramPacket对象发送消息的,调用MulticastSocketsend方法即可把消息发送出去。这里为了缩减例子长度省去了退出组及关闭套接字的一些操作,实际使用中需完善。

public class Node1 {

private static int port = 8000;

private static String address = "228.0.0.4";

public static void main(String[] args) throws Exception {

try {

InetAddress group = InetAddress.getByName(address); 

MulticastSocket mss = null;

mss = new MulticastSocket(port);

mss.joinGroup(group);

while (true) {

String message = "Hello from node1";

byte[] buffer = message.getBytes(); 

DatagramPacket dp = new DatagramPacket(buffer, buffer.length,

group, port);

mss.send(dp); 

Thread.sleep(1000);

}

} catch (IOException e) {

e.printStackTrace();

}

}

 

②节点二,指定同样的组播地址与端口,申请加入与节点一相同的组播组,接着通过循环不断接收来自其他节点发送的消息,通过MulticastSocketreceive方法可读到消息,将不断接收到来自节点一发送的消息“receive from node1:Hello from node1”。当然节点2也可以往组播组发送消息,因为每个节点都是同等的,只要其他节点对组播消息进行接收。如果你还想增加其他节点,尽管申请加入组播组,所有节点都可以接收发送消息。

public class Node2 {

private static int port = 8000;

private static String address = "228.0.0.4";

public static void main(String[] args) throws Exception {

InetAddress group = InetAddress.getByName(address); 

MulticastSocket msr = null;

try {

msr = new MulticastSocket(port);

msr.joinGroup(group);

byte[] buffer = new byte[1024];

while (true) {

DatagramPacket dp = new DatagramPacket(buffer, buffer.length); 

msr.receive(dp); 

String s = new String(dp.getData(), 0, dp.getLength()); 

System.out.println("receive from node1:"+s);

}

} catch (IOException e) {

e.printStackTrace();

}

}

目录
相关文章
|
运维 Cloud Native 关系型数据库
“瑶池”正式发布,一站式数据管理与服务
11月3日,在2022云栖大会上,阿里巴巴集团副总裁、阿里云数据库产品事业部负责人李飞飞发表《一站式、全场景数据管理与服务》主题演讲,分享了数据库发展的四个核心趋势,并发布数据库独立品牌“瑶池”,将云原生关系型数据库PolarDB、云原生数据仓库AnalyticDB (简称ADB)、云原生多模数据库Lindorm等产品统一归属到全新品牌“瑶池”。
2628 0
 “瑶池”正式发布,一站式数据管理与服务
|
10月前
|
API 数据库
京东图片搜索商品拍立淘接口(JD.item_search_img)
拍立淘是阿里巴巴淘宝平台推出的基于图像识别技术的购物应用功能,旨在提升商品搜索效率与准确性。用户可通过上传图片快速找到相似商品。其核心接口item_search_img利用先进图像识别技术提取商品特征,并在数据库中匹配相似商品,返回包含商品ID、标题、价格等详细信息的结果列表,支持按价格、销量等多种方式排序,极大优化了用户的购物体验。
|
9月前
|
存储 资源调度 Java
计算机基础(1)——计算机体系结构和组成
计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 在过去的几十年里,计算机科学经历了令人瞩目的飞速发展。经历了电子管、晶体管、集成电路的世代发展,体积越来越小、性能越来越强,为人类带来了巨大的便利和变革,下面我们来回顾计算机的发展历程。
2740 2
计算机基础(1)——计算机体系结构和组成
|
11月前
|
数据采集 存储 分布式计算
ClickHouse大规模数据导入优化:批处理与并行处理
【10月更文挑战第27天】在数据驱动的时代,高效的数据导入和处理能力是企业竞争力的重要组成部分。作为一位数据工程师,我在实际工作中经常遇到需要将大量数据导入ClickHouse的需求。ClickHouse是一款高性能的列式数据库系统,非常适合进行大规模数据的分析和查询。然而,如何优化ClickHouse的数据导入过程,提高导入的效率和速度,是我们面临的一个重要挑战。本文将从我个人的角度出发,详细介绍如何通过批处理、并行处理和数据预处理等技术优化ClickHouse的数据导入过程。
1010 0
|
数据可视化 关系型数据库 MySQL
【IDEA】配置mysql环境并创建mysql数据库
【IDEA】配置mysql环境并创建mysql数据库
2005 0
|
人工智能 关系型数据库 数据库
PostgreSQL 常见问题解决方案 - ERROR: database is being accessed by other users
PostgreSQL 常见问题解决方案 - ERROR: database is being accessed by other users
|
C++
【SPSS】两独立样本T检验分析详细操作教程(附案例实战)
【SPSS】两独立样本T检验分析详细操作教程(附案例实战)
2256 0
|
监控 算法 网络架构
路由震荡原因 及解决方法
路由震荡原因 及解决方法
657 0
|
存储 缓存 网络协议
【Java网络编程】基于UDP-Socket 实现客户端、服务器通信
【Java网络编程】基于UDP-Socket 实现客户端、服务器通信
791 0
|
前端开发 数据库
mybatisplus---接口返回的数据为null
mybatisplus---接口返回的数据为null
mybatisplus---接口返回的数据为null