当前位置: 首页 > news >正文

详细介绍:Java广播 —如何利用广播做服务发现

通过广播可以在局域网内广播信息,广播接收端通过监听广播信息,可以自动发现局域网内所有的设备/服务信息。

1. 发送广播

在 Java 中通过将 DatagramSocket 设置 setBroadcast(true) 来发送广播。

DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);
// 广播内容
byte[] broadcastContent = "广播内容".getBytes();
// 发送广播的指定端口
int broadcastPort = 12135;
// 发送广播的地址
InetAddress broadcastAddress = InetAddress.getByName("255.255.255.255");
// 构建广播数据包
DatagramPacket packet = new DatagramPacket(broadcastContent, broadcastContent.length,  broadcastAddress, broadcastPort);
socket.send(pocket);
  • broadcastAddress(255.255.255.255): 表示发送到本地网络中的所有设备,并且不会被路由器转发到其他网络,意味着该网络数据包会广播到局域网中的所有设备。
  • broadcastPort(12135): 表示发送到该端口,广播数据包只能发送到一个端口,不能发送到多个端口。

除了通过 255.255.255.255 也可以设置发送到指定的子网的所有主机。如: 192.168.1.255。
可以通过以下方式获取当前主机所在子网的所有广播地址列表。

private static List<InetAddress> listAllBroadcastAddresses() throws SocketException {List<InetAddress> broadcastList = new ArrayList<>();// 获取所有的网络接口  Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();while (interfaces.hasMoreElements()) {NetworkInterface networkInterface = interfaces.nextElement();// 剔除本地回环地址(127.0.0.1) 以及未启用的接口if (networkInterface.isLoopback() || !networkInterface.isUp()) {continue;}// 提取每个地址的广播地址networkInterface.getInterfaceAddresses().stream().map(InterfaceAddress::getBroadcast).filter(Objects::nonNull).forEach(broadcastList::add);}return broadcastList;}

这样就可以从列表中选择向哪一个子网发送广播信息,或是遍历列表都发送。

2. 接收广播

接收广播同样是通过 DatagramSocket 类,但不需要设置为广播模式,需要监听本地端口,这个端口也就是广播发送端广播的端口。

// 监听端口
DatagramSocket socket = new DatagramSocket(12135);
byte[] receiveBuff = new byte[1024];
DatagramPacket packet = new DatagramPacket(receiveBuff, receiveBuff.length);
// 阻塞式等待接收广播信息
socket.receive(packet);
// 解析广播信息
String receiveContent = new String(packet.getData(), 0, packet.getLength());
System.out.println("接收到广播信息 :" + receiveContent);

3. 应用

通过广播的方式,我们可以做到局域网内的自动服务发现。比如以下技术都是通过广播来做到的

  1. DHCP, 客户端通过广播 255.255.255.255,67端口发现DHCP服务器。
  2. 打印机,物联网设备的设备发现
  3. 局域网游戏服务器的服务发现

3.1 服务发现流程

  1. 客户端向局域网的指定端口定期发送广播信息。
  2. 服务端在指定端口监听所有客户端的广播信息。
  3. 服务端解析接收到的广播信息,获取与客户端的通信方式(通信方式自定义,可以通过TCP协议,HTTP协议…)
  4. 以TCP协议为例,客户端发送的数据包中应该有通信端口,服务端通过该端口与客户端进行双向通信。
  5. 服务端维护已连接的客户端列表。

3.2 注意点

  1. 广播的数据意味着可以被网络中所有的设备监听到,因此可以在广播数据包时做好数据加密。
  2. 在客户端与服务端进行双向连接时做身份验证
  3. 控制广播频率,如30秒一次,高频广播会占用带宽。
http://www.jsqmd.com/news/382860/

相关文章:

  • 汇总2
  • XML Schema 实例详解
  • Ideal Switch MATLAB_help文档DeepSeek翻译
  • 洛谷 P1075:[NOIP 2012 普及组 T1] 质因数分解 ← 整数唯一分解定理
  • PostgreSQL JOIN:深入理解与高效使用
  • 从数据采集到 API 市场的完整技术链路
  • 完整教程:基于太阳光模拟的AR-HUD聚焦光斑检测
  • 【题解】Atcoder Beginner Contest 445(ABC445) A~D,F
  • 深入解析Python中dict与set的实现原理
  • sql语言之having语句使用
  • GitHub 热榜项目 - 日榜(2026-02-14)
  • 汇总3
  • 2026年精雕机厂家实力推荐榜:CNC/模具/治具/石墨/金属/龙门/去毛刺/打孔精雕机十大品牌,聚焦高精度与稳定性的工业智造之选 - 品牌企业推荐师(官方)
  • 汇总5
  • 银川兴庆区搬家公司推荐哪家?看完这篇不踩坑!正规靠谱搬家公司实测 - 宁夏壹山网络
  • 2026国内UI/UE设计公司口碑实力榜 10家优选服务商盘点
  • 2026年钣金加工厂家推荐排行榜:激光切割/折弯焊接/冲压喷涂/精密钣金,涵盖不锈钢/铝合金/镀锌板等多材质,专业定制设备外壳与配件! - 品牌企业推荐师(官方)
  • 546456
  • 789789
  • Kubernetes 实战:基于 StatefulSet 构建 MySQL 主从集群(GTID + 自动复制)
  • SQL PRIMARY KEY(主键)
  • Java异常——自定义异常
  • HTML5 测验
  • 2026年二手乳品设备厂家推荐榜单:冻干机/杀菌机/过滤机/制粒机/罐装机/包装机/压片机/榨汁机/反应釜等源头工厂精选,助力降本增效 - 品牌企业推荐师(官方)
  • PHP HTTP详解
  • 速看!大数据领域异常检测的实战心得
  • 大数据领域数据可视化的热力图展示技巧
  • 构建未来教育新生态:智慧校园一体化平台方案关键模块建设浅析
  • 学习记录260214
  • 构建未来教育新生态:智慧校园系统方案关键模块建设浅析