SpringBoot使用Mina框架进行服务端与客户端数据通信
pom.xml引入
<dependency><groupId>org.apache.mina</groupId><artifactId>mina-core</artifactId><version>2.1.3</version>
</dependency>
<dependency><groupId>org.apache.mina</groupId><artifactId>mina-integration-beans</artifactId><version>2.1.3</version>
</dependency>
服务端创建采集服务TCP线程
@Configuration
public class TCPServ {//数据采集开关。配置项中获取@Value("${monitordata.company.electricity.enableSwitch}")private boolean enableSwitch = false;@Value("${monitordata.company.electricity.tcpPort}")private int port;@AutowiredServerHandler serverHandler; //Mina事件类ServerHandler@Beanpublic IoAcceptor companyElectricityTCPServ() throws Exception {if (!enableSwitch) {return null;}IoAcceptor acceptor = new NioSocketAcceptor();acceptor.getSessionConfig().setReadBufferSize(1024 * 1024);//设置缓冲区acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60*5); //配置会话信息//其中需要注意的是,在服务端和客户端的代码里面,如果要传递string信息,codec编码过滤器中,要这么写:new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8")))。否则报错。//acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));acceptor.setHandler(serverHandler); //自定义处理业务的代码:自定义的类try {acceptor.bind(new InetSocketAddress(port));//绑定端口号} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("Socket服务器在端口:" + port + "已经启动");return acceptor;}
}
Mina事件类ServerHandler
@Component
public class ServerHandler extends IoHandlerAdapter {@AutowiredMeterCollectsDataService meterCollectsDataService;@AutowiredElectricCollectorService electricCollectorService;@Overridepublic void sessionCreated(IoSession session) throws Exception {session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60*5);String key = session.getRemoteAddress().toString();System.out.println("设备接入:" + key);}@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {String key = session.getRemoteAddress().toString();IoBuffer ioBuffer = (IoBuffer) message;byte[] data = new byte[ioBuffer.limit()];ioBuffer.get(data);String msg = new String(data);System.out.println("收到数据:" + msg);//发送数据String sendData = ""; session.write(IoBuffer.wrap(sendData.getBytes("utf-8")));}@Overridepublic void exceptionCaught(IoSession session, Throwable cause) throws Exception {System.out.println("exceptionCaught");session.closeNow();}@Overridepublic void sessionIdle(IoSession session, IdleStatus status) throws Exception {if (status == IdleStatus.BOTH_IDLE) {System.out.println("BOTH空闲");session.closeNow();}}@Overridepublic void sessionClosed(IoSession session) throws Exception {System.out.println("sessionClosed");System.out.println("设备断开:" + session.getRemoteAddress().toString());}
}
调试
使用上传文件中的网络调试工具进行测试
SpringBoot使用Mina框架进行服务端与客户端数据通信相关推荐
- SpringBoot(23) 集成socket.io服务端和客户端实现通信
一.前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于cli ...
- 使用HTML5的WebSocket实现服务端和客户端数据通信(有演示和源码)
WebSocket协议是基于TCP的一种新的网络协议.WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信. ...
- SpringBoot集成WebSocket案例:服务端与客户端消息互通
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- springboot+websocket实现服务端、客户端
一.引言 小编最近一直在使用springboot框架开发项目,毕竟现在很多公司都在采用此框架,之后小编也会陆续写关于springboot开发常用功能的文章. 什么场景下会要使用到websocket的呢 ...
- java mina 服务端_Mina客户端和服务端代码编写
1.客户端 package com.boonya.protocol; import java.net.InetSocketAddress; import java.nio.charset.Charse ...
- umi框架SSR 服务端获取cookie
umi框架SSR 服务端获取cookie 在项目核心文件server.js 中增加传入自定义参数到ctx中 app.use(async (ctx, next) => { const { html ...
- springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据
SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...
- Winform中使用MQTTnet实现MQTT的服务端和客户端之间的通信以及将订阅的消息保存到文件
场景 MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻 ...
- netty服务器返回信息关闭,netty4 服务端同步客户端返回的结果
netty是一个异步通讯框架,在有的时候咱们想使用服务端向客户端发送消息,服务端同步等待客户端返回结果真进行下一步的业务逻辑操做.那要怎么作才能同步获取客户端返回的数据呢?这里我用到了JDK中的闭锁等 ...
最新文章
- 关于dataTables 的排序问题
- java数组赋值语句,稳进大厂
- iOS转让app-您必须移除要转让的 App 的所有构建版本和测试员,并清除“测试信息”下的所有信息字段解决方案...
- 如何使用区块链技术进行项目开发
- python调用高德api路径规划_Python调用高德API实现批量地址转经纬度并写入表格的功能...
- python数学计算函数_Python 内置函数(数学运算类,逻辑判断类)
- java 自动生成文档_[原]java开发文档的自动生成方式
- java可视化压缩_WEB可视化技术发展
- 一份超详细的MySQL高性能优化实战总结
- 想象力惊人!只凭一句话,AI就能脑补出动漫小片
- FileStream对象的使用
- python中else与if的匹配原则是什么_if-else语句中,if和else的配对原则各是什么
- POJ 1398 Complete the sequence! ★ (差分)
- 江苏专转本计算机考试模拟试卷,江苏专转本计算机模拟试题 11
- SVN可视化管理iF.SVNAdmin+LDAP认证
- 一张图片即可入侵你的电脑
- 抖音只能上下滑动吗_抖音的上下滑实现—iOS
- su 与 su - 的区别
- 第十五天PAT-A1124 Raffle for Weibo Followers简单模拟测试点三错误说明
- 数据驾驶舱只是面子工程?它的真正作用你根本就不了解
热门文章
- c语言定义5个元素数组, 对数组进行从小到大排序,定义一个5行5列的二维数组,并动态赋值,将第3列的数组进行从小到大的排序...
- java并发核心知识体系精讲_Java 面试突击之 Java 并发知识基础 amp; 进阶考点全解析
- ajax应用_AJAX的应用
- cisc 和 risc_RISC和CISC | 电脑组织
- 机器学习 导论_机器学习导论
- 调整灰度图像的大小,而无需在Python中使用任何内置函数
- 第 2-4 课:克隆和序列化 + 面试题
- 一口气说出 6 种延时队列的实现方法,面试官满意的笑了
- asp.net mvc3.0第一个程序helloworld开发图解
- Oracle 练习P297 131026 PL/SQL块程序