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框架进行服务端与客户端数据通信相关推荐

  1. SpringBoot(23) 集成socket.io服务端和客户端实现通信

    一.前言 websocket和socket.io区别? websocket 一种让客户端和服务器之间能进行双向实时通信的技术 使用时,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况 适合用于cli ...

  2. 使用HTML5的WebSocket实现服务端和客户端数据通信(有演示和源码)

    WebSocket协议是基于TCP的一种新的网络协议.WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信. ...

  3. SpringBoot集成WebSocket案例:服务端与客户端消息互通

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  4. springboot+websocket实现服务端、客户端

    一.引言 小编最近一直在使用springboot框架开发项目,毕竟现在很多公司都在采用此框架,之后小编也会陆续写关于springboot开发常用功能的文章. 什么场景下会要使用到websocket的呢 ...

  5. java mina 服务端_Mina客户端和服务端代码编写

    1.客户端 package com.boonya.protocol; import java.net.InetSocketAddress; import java.nio.charset.Charse ...

  6. umi框架SSR 服务端获取cookie

    umi框架SSR 服务端获取cookie 在项目核心文件server.js 中增加传入自定义参数到ctx中 app.use(async (ctx, next) => { const { html ...

  7. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  8. Winform中使用MQTTnet实现MQTT的服务端和客户端之间的通信以及将订阅的消息保存到文件

    场景 MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻 ...

  9. netty服务器返回信息关闭,netty4 服务端同步客户端返回的结果

    netty是一个异步通讯框架,在有的时候咱们想使用服务端向客户端发送消息,服务端同步等待客户端返回结果真进行下一步的业务逻辑操做.那要怎么作才能同步获取客户端返回的数据呢?这里我用到了JDK中的闭锁等 ...

最新文章

  1. 关于dataTables 的排序问题
  2. java数组赋值语句,稳进大厂
  3. iOS转让app-您必须移除要转让的 App 的所有构建版本和测试员,并清除“测试信息”下的所有信息字段解决方案...
  4. 如何使用区块链技术进行项目开发
  5. python调用高德api路径规划_Python调用高德API实现批量地址转经纬度并写入表格的功能...
  6. python数学计算函数_Python 内置函数(数学运算类,逻辑判断类)
  7. java 自动生成文档_[原]java开发文档的自动生成方式
  8. java可视化压缩_WEB可视化技术发展
  9. 一份超详细的MySQL高性能优化实战总结
  10. 想象力惊人!只凭一句话,AI就能脑补出动漫小片
  11. FileStream对象的使用
  12. python中else与if的匹配原则是什么_if-else语句中,if和else的配对原则各是什么
  13. POJ 1398 Complete the sequence! ★ (差分)
  14. 江苏专转本计算机考试模拟试卷,江苏专转本计算机模拟试题 11
  15. SVN可视化管理iF.SVNAdmin+LDAP认证
  16. 一张图片即可入侵你的电脑
  17. 抖音只能上下滑动吗_抖音的上下滑实现—iOS
  18. su 与 su - 的区别
  19. 第十五天PAT-A1124 Raffle for Weibo Followers简单模拟测试点三错误说明
  20. 数据驾驶舱只是面子工程?它的真正作用你根本就不了解

热门文章

  1. c语言定义5个元素数组, 对数组进行从小到大排序,定义一个5行5列的二维数组,并动态赋值,将第3列的数组进行从小到大的排序...
  2. java并发核心知识体系精讲_Java 面试突击之 Java 并发知识基础 amp; 进阶考点全解析
  3. ajax应用_AJAX的应用
  4. cisc 和 risc_RISC和CISC | 电脑组织
  5. 机器学习 导论_机器学习导论
  6. 调整灰度图像的大小,而无需在Python中使用任何内置函数
  7. 第 2-4 课:克隆和序列化 + 面试题
  8. 一口气说出 6 种延时队列的实现方法,面试官满意的笑了
  9. asp.net mvc3.0第一个程序helloworld开发图解
  10. Oracle 练习P297 131026 PL/SQL块程序