Spring Boot集成udp通讯

news/2024/9/26 0:05:23/

Spring Boot集成udp通讯

  • 加入依赖
  • 编辑配置文件
  • 配置相关属性
  • 具体业务类
  • 客户端
  • 调试

加入依赖

<!--加入UDP通信所需依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.integration</groupId><artifactId>spring-integration-ip</artifactId></dependency>

编辑配置文件

application.yml

# 和嵌入式udp通信的发送端口和监听端口地址
udp:listeningPort: 9911sendingPort: 9911

配置相关属性


@Component
@ConfigurationProperties(prefix = "udp")
public class UdpConfig {/*** 与嵌入式通信的udp监听端口*/private static Integer listeningPort;/*** 与嵌入式通信的udp发送端口*/private static Integer sendingPort;@Value("${udp.listeningPort}")public void setListeningPort(Integer listeningPort) {this.listeningPort = listeningPort;}@Value("${udp.sendingPort}")public void setSendingPort(Integer sendingPort) {this.sendingPort = sendingPort;}public static Integer getListeningPort() {return listeningPort;}public static Integer getSendingPort() {return sendingPort;}
}

具体业务类


@Configuration
public class UdpServer {private static final Logger logger = LoggerFactory.getLogger(UdpServer.class);/*** UDP消息接收服务*/@Beanpublic IntegrationFlow integrationFlow() {logger.info("UDP服务启动成功,端口号为: {}", UdpConfig.getListeningPort());return IntegrationFlows.from(Udp.inboundAdapter(UdpConfig.getListeningPort())).channel("udpChannel").get();}/*** 转换器*/@Transformer(inputChannel = "udpChannel", outputChannel = "udpFilter")public String transformer(@Payload byte[] payload, @Headers Map<String, Object> headers) {String message = new String(payload);// todo 进行数据转换message = message.toUpperCase();return message;}/*** 过滤器*/@Filter(inputChannel = "udpFilter", outputChannel = "udpRouter")public boolean filter(String message, @Headers Map<String, Object> headers) {// 获取来源IdString id = headers.get("id").toString();// 获取来源IP,可以进行IP过滤String ip = headers.get("ip_address").toString();// 获取来源PortString port = headers.get("ip_port").toString();// todo 信息数据过滤
//        if (true) {
//            // 没有-的数据会被过滤
//            return false;
//        }return true;}/*** 路由分发处理器:可以进行分发消息被那个处理器进行处理*/@Router(inputChannel = "udpRouter")public String router(String message, @Headers Map<String, Object> headers) {// 获取来源IdString id = headers.get("id").toString();// 获取来源IP,可以进行IP过滤String ip = headers.get("ip_address").toString();// 获取来源PortString port = headers.get("ip_port").toString();// todo 筛选,走那个处理器if (true) {return "udpHandle2";}return "udpHandle1";}/*** 最终处理器1*/@ServiceActivator(inputChannel = "udpHandle1")public void udpMessageHandle(String message) throws Exception {// todo 可以进行异步处理logger.info("message:" + message);}/*** 最终处理器2*/@ServiceActivator(inputChannel = "udpHandle2")public void udpMessageHandle2(String message) throws Exception {logger.info("UDP2:" + message);//接受消息处理业务}public void sendMsg(String message) {byte[] bytes = message.getBytes();UnicastSendingMessageHandler handler = new UnicastSendingMessageHandler("localhost", UdpConfig.getSendingPort());logger.info("发送UDP信息: {" + bytes + "}");handler.handleMessage(MessageBuilder.withPayload(bytes).build());logger.info("发送成功");}
}

客户端


@RestController
@RequestMapping("/udp")
public class UdpClient {private final static Logger logger = LoggerFactory.getLogger(UdpClient.class);@PostMapping("/send")public BaseResult send(@RequestParam("message") String message) {byte[] bytes = message.getBytes();UnicastSendingMessageHandler handler = new UnicastSendingMessageHandler("localhost", UdpConfig.getSendingPort());logger.info("发送UDP信息: {" + bytes + "}");handler.handleMessage(MessageBuilder.withPayload(bytes).build());logger.info("发送成功");return new BaseResult<>();}
}

调试

接口请求客户端地址{ip:host}/udp/send
在这里插入图片描述
debug查看 成功接收到消息


http://www.ppmy.cn/news/1503552.html

相关文章

Spring Security 概述,鸟瞰 Spring Security 及其功能

在本文中&#xff0c;我们将从鸟瞰的角度了解 Spring Security 的用途以及它能为我们提供什么。网络上的任何东西都可能是攻击的潜在受害者。不幸的是&#xff0c;在这个即使是最富有、最具创新性的技术公司也会受到黑客攻击的世界里&#xff0c;保护 Web 应用程序并实现授权和…

【常用库】【pytorch】基本部件

基本元件 1. 卷积 2. batchnorm loss函数 torch.nn.MSELoss() >>> a torch.rand(3) >>> a tensor([0.2161, 0.2227, 0.9175]) >>> b torch.rand(3) >>> b tensor([0.6976, 0.9149, 0.4918]) >>> mse torch.nn.MSELOSS() &…

APACHE安装与应用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

多媒体技术:深入探索其组成部分与核心要点

目录 1. 多媒体的组成部分 1.1 文本 1.2 图像 1.3 音频 1.4 视频 1.5 动画 2. 多媒体的特点 2.1 多样性 2.2 交互性 2.3 集成性 2.4 动态性 2.5 真实性 3. 多媒体的核心要点 3.1 数据压缩 3.2 数据格式 3.3 数据传输 3.4 用户交互 3.5 实时处理 3.6 多媒体同…

Flask Bootstrap #2 - MVC架构

Reference https://medium.com/%E5%B7%A5%E7%A8%8B%E9%9A%A8%E5%AF%AB%E7%AD%86%E8%A8%98/%E4%BD%BF%E7%94%A8-python-flask-%E5%BB%BA%E7%AB%8B%E7%B6%B2%E7%AB%99-353e449a9bc8 1 MVC架构 在 Flask Boostrap #1 - 安装Flask 透过 app.route() 建立路由是 flask API 常见的…

从零开始的MicroPython(三) 按键与外部中断

上一篇&#xff1a;从零开始的MicroPython(二) GPIO及点灯代码 文章目录 前言硬件原理软件原理注意代码编写轮询外部中断其他 前言 点灯是嵌入式GPIO输出的典型&#xff0c;按键则是输入的典型。 硬件原理 按键对角接通。 软件原理 如果是一端接高电平&#xff0c;一端接单…

spark 3.0.0源码环境搭建

环境 Spark版本&#xff1a;3.0.0 java版本&#xff1a;1.8 scala版本&#xff1a;2.12.19 Maven版本&#xff1a;3.8.1 编译spark 将spark-3.0.0的源码导入到idea中 执行mvn clean package -Phive -Phive-thriftserver -Pyarn -DskipTests 执行sparksql示例类SparkSQLExam…

计算机毕业设计选题推荐-社区停车信息管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…