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

物联网 基于netty构建mqtt服务udp支持

  • 物联网 基于netty构建mqtt服务udp支持
    • 简述
    • 源码
    • 代码

物联网 基于netty构建mqtt服务udp支持

简述

应用中分别启动TCP和UDP两个服务,实现协议的分离与消息互通

源码

https://gitee.com/kcnf-iot/iot-sample/tree/master/netty/netty-sample-02

代码

package com.jysemel.iot; import io.netty.bootstrap.Bootstrap; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioDatagramChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.mqtt.MqttDecoder; import io.netty.handler.codec.mqtt.MqttEncoder; public class DualProtocolServer { public static void main(String[] args) throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioEventLoopGroup(); EventLoopGroup udpGroup = new NioEventLoopGroup(); // UDP工作组 try { // --- 1. MQTT over TCP 服务 (端口1883) --- ServerBootstrap tcpBootstrap = new ServerBootstrap(); tcpBootstrap.group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) { ChannelPipeline p = ch.pipeline(); p.addLast(new MqttDecoder(64 * 1024)); p.addLast(MqttEncoder.INSTANCE); p.addLast("mqttHandler", new MqttServerHandler()); // MQTT业务逻辑 } }); ChannelFuture tcpFuture = tcpBootstrap.bind(1883).sync(); System.out.println("[TCP] MQTT Broker 启动, 端口 1883"); // --- 2. UDP 服务 (端口8888) 接收自定义传感器数据 --- Bootstrap udpBootstrap = new Bootstrap(); udpBootstrap.group(udpGroup) .channel(NioDatagramChannel.class) .option(ChannelOption.SO_BROADCAST, true) .handler(new ChannelInitializer<NioDatagramChannel>() { @Override protected void initChannel(NioDatagramChannel ch) { ch.pipeline().addLast("udpHandler", new UdpServerHandler()); } }); ChannelFuture udpFuture = udpBootstrap.bind(8888).sync(); System.out.println("[UDP] 自定义传感器服务启动, 端口 8888"); tcpFuture.channel().closeFuture().sync(); udpFuture.channel().closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); udpGroup.shutdownGracefully(); } } }
package com.jysemel.iot; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.channel.socket.DatagramPacket; import java.nio.charset.StandardCharsets; public class UdpServerHandler extends SimpleChannelInboundHandler<DatagramPacket> { @Override protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) { ByteBuf content = packet.content(); String udpData = content.toString(StandardCharsets.UTF_8); System.out.println("[UDP] Received: " + udpData); // 将UDP数据转换为MQTT消息,并广播给所有MQTT客户端 // 这里固定发布到 "udp/sensor" 主题 MqttServerHandler.broadcast("udp/sensor", udpData); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { System.out.println("UDP error: " + cause.getMessage()); } }
http://www.zskr.cn/news/1317652.html

相关文章:

  • 英雄联盟免费开源录像编辑工具:League Director完整使用指南
  • C++ TinyWebServer项目实战:手把手教你用阻塞队列实现高性能异步日志(附完整代码)
  • 3步高效下载抖音无水印视频:douyin_downloader专业解决方案完整指南
  • Scrcpy键鼠反控原理详解:你的点击如何“隔空”操作安卓手机?
  • ARM NEON指令集:SIMD并行计算与浮点优化指南
  • 【免费下载】 MobaXterm 汉化版资源文件下载
  • 2026年汽车
  • 基于MakeCode Arcade与PyGamer的嵌入式游戏开发:从图形化编程到硬件联动
  • 重点关注:哪些问题是口腔门诊装修要重点关注的呢?
  • 【亲测免费】 Altium Designer 10完美精减版:轻松上手,高效设计
  • QT中使用MFC的示例工程
  • Final SWFPlayer源码解析:它如何在安卓12上搞定连Chrome都放弃的Flash?
  • 别再硬编码数据了!用Vue 3 + Element Plus + ECharts 5 实现一个动态数据看板(附完整源码)
  • Linux应用配置分层实战指南
  • 2026年贵阳、大方、惠水百货批发与地摊货源怎么选?思洪多元深度对比指南 - 企业名录优选推荐
  • 2025年网盘下载新范式:开源直链助手的技术演进与生态价值
  • 如何5分钟解放QQ音乐加密文件:qmc-decoder终极解密指南
  • LVGL 8.3.0 版本 QT 仿真工程
  • DVC1124芯片上电与初始化流程详解:从复位、延时到看门狗配置
  • ARM A64 SIMD指令集优化实战指南
  • 基于STM32F103与CAN总线的智能直流伺服驱动器设计
  • 告别网盘限速烦恼:开源直链下载助手完整使用教程
  • 云境标书AI的安全吗?2026年企业级核心数据隐私与防废标合规安全全景解析 - 陈工0237
  • 【2026 5月最新】光影看图下载安装教程:RAW格式秒开,摄影师筛片必备 - PC修复电脑医生
  • 认知架构设计:平衡约束与涌现的AI系统框架
  • 解决ESP32-S3 USB MSC速度慢?实测调整TinyUSB FIFO大小提升数倍传输速率
  • Lattice Radiant 2023.1 安装避坑指南:从下载到配置环境变量,一次搞定所有问题
  • STM32团队协作福音:用PlatformIO统一开发环境,告别‘我本地是好的’
  • DeepSeek开招Harness产品经理!「参与Agent桌面端产品全过程」
  • AI专著撰写全攻略:工具助力,快速产出20万字专著!