news 2026/1/30 5:36:37

Java广播 —如何利用广播做服务发现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java广播 —如何利用广播做服务发现

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

1. 发送广播

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

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

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

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

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

2. 接收广播

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

// 监听端口DatagramSocketsocket=newDatagramSocket(12135);byte[]receiveBuff=newbyte[1024];DatagramPacketpacket=newDatagramPacket(receiveBuff,receiveBuff.length);// 阻塞式等待接收广播信息socket.receive(packet);// 解析广播信息StringreceiveContent=newString(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. 服务端维护已连接的客户端列表。
服务发现端局域网客户端服务发现端局域网客户端定期发送广播数据包监听广播数据包监听到广播数据包解析数据包,获取通信端口与客户端IP请求与客户端通信响应服务端请求更新客户端列表客户端下线请求更新客户端列表

3.2 注意点

  1. 广播的数据意味着可以被网络中所有的设备监听到,因此可以在广播数据包时做好数据加密。
  2. 在客户端与服务端进行双向连接时做身份验证
  3. 控制广播频率,如30秒一次,高频广播会占用带宽。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/24 19:50:59

学长亲荐9个一键生成论文工具,自考毕业论文轻松搞定!

学长亲荐9个一键生成论文工具&#xff0c;自考毕业论文轻松搞定&#xff01; AI 工具让论文写作不再难 对于自考学生来说&#xff0c;撰写毕业论文是一项既重要又充满挑战的任务。在时间紧张、资料繁杂的情况下&#xff0c;如何高效完成一篇符合要求的论文&#xff0c;成为许多…

作者头像 李华
网站建设 2026/1/27 6:12:48

为开发者厘清选择方向:2025 AIGC最具影响力AI应用开发平台公布

作者&#xff1a;刘文轩 1月17日&#xff0c;在第五届AIGC开发者大会上&#xff0c;至顶科技联合 AIGCLINK 开发者社区评选出了“2025 AIGC 最具影响力 AI 应用开发平台”。评选通过专家推举和社区投票&#xff0c;围绕当下开发者真实使用场景展开&#xff0c;重点关注平台的整…

作者头像 李华
网站建设 2026/1/29 10:12:16

ssm466洗衣店管理系统--论文

目录SSM466洗衣店管理系统论文摘要开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;SSM466洗衣店管理系统论文摘要 随着信息技术的快速发展&#xff0c;传统洗衣店管理模式在效率和服务质量上面临诸多挑战。SSM466洗衣店管理系统…

作者头像 李华
网站建设 2026/1/22 3:54:00

ssm468高校科研学术成果管理系统--论文

目录高校科研学术成果管理系统设计与实现开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;高校科研学术成果管理系统设计与实现 高校科研学术成果管理系统是针对高等院校科研管理需求开发的信息化平台&#xff0c;旨在实现论文、…

作者头像 李华
网站建设 2026/1/27 4:08:08

ssm469基于JAVAWEB的辅导员考评管理系统ssm

目录系统概述技术架构功能模块创新点应用价值开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统概述 SSM469基于JAVAWEB的辅导员考评管理系统采用SpringSpringMVCMyBatis&#xff08;SSM&#xff09;框架开发&#xff0c;旨在…

作者头像 李华
网站建设 2026/1/30 3:42:19

没有公网IP,入手了NAS怎么玩?

最近有小伙伴开始折腾NAS&#xff0c;历经千辛万苦之后终于把飞牛NAS搞定了。但是随之而来的又是另一件麻烦的事情&#xff1a;家里的宽带没有下发公网IPv6&#xff0c;自己也不知道怎么去调整&#xff0c;于是就找到了小白。 所以就有了今天的这篇文章&#xff1a;没有公网IP…

作者头像 李华