环境:JDK1.8 WIN10
集成:SpringBoot+Mybatis+Mina+MySql
开发工具eclipse Neon.3 Release (4.6.3)
目录如下
Mina包中的ServerHandler里有所有的事件
在spring boot启动类中添加打开端口的方法
Util工具包中放了几个常用的进制转换、CRC校验、Unicode转换
ServerHandler中调用其他service需要使用特殊方法,类中已经注明流程
总结来说就三个步骤
1.在pom.xml中添加两个jar包 Mina和Socket
<!--socket通讯 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.0.1.RELEASE</version>
</dependency>
<!--Mina框架 -->
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.2</version>
</dependency>
2.在SpringBoot启动类Application中增加启动方法
@Bean
public IoAcceptor ioAcceptor() throws Exception {
IoAcceptor acceptor=new NioSocketAcceptor();
acceptor.setHandler(new ServerHandler());
acceptor.getSessionConfig().setReadBufferSize(1024);
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 100);
acceptor.bind(new InetSocketAddress(PORT));
System.out.println("服务器在端口:" + PORT + "已经启动");
return acceptor;
}
3.创建Mina事件类ServerHandler
package cn.yiyuan.Mina;
import javax.annotation.PostConstruct;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.transport.socket.SocketSessionConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import cn.yiyuan.Util.HexUtil;
@Component
public class ServerHandler extends IoHandlerAdapter {
private Logger logger = LoggerFactory.getLogger(this.getClass());
/* 在本类中调用其他service需要使用以下方法
*
* */
//1.声明service类
/*@Autowired
private TbBoxService tbBoxService;*/
private static ServerHandler serverHandler ;
//2通过@PostConstruct实现初始化bean之前进行的操作
@PostConstruct
public void init() {
serverHandler = this;
//serverHandler.tbBoxService = this.tbBoxService;.
//3.调用时需要加前缀 如 serverHandler.tbBoxService
}
@Override
public void sessionCreated(IoSession session) throws Exception { //用户连接到服务器
SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();
cfg.setSoLinger(0);
logger.info("[服务建立]" + session.getId());
}
@Override
public void messageReceived(IoSession session, Object message)throws Exception {//接收消息
IoBuffer bbuf = (IoBuffer) message;
byte[] byten = new byte[bbuf.limit()];
bbuf.get(byten, bbuf.position(), bbuf.limit());
String temp=HexUtil.bytes2HexString(byten);
temp = temp.trim();
logger.info("[收到消息]" + temp);
}
@Override
public void sessionClosed(IoSession session) throws Exception { //用户从服务器断开
logger.info("[服务断开]" + session.getId());
}
@Override
public void messageSent(IoSession session, Object message){ //发送消息结束
//logger.info("[发送消息结束]" + session.getId() + "message" + message);
}
@Override
public void sessionIdle(IoSession session, IdleStatus status)throws Exception {//重连
logger.info("[服务重连]" + session.getId() + "status" + status.toString());
}
@Override
public void exceptionCaught(IoSession session, Throwable cause)throws Exception {//连接发生异常
cause.printStackTrace();
logger.info("[服务异常]" + session.getId());
}
}
然后直接启动项目,客户端通过IP:端口即可连接服务端
以上项目均为本人为写项目整合的网上已有资源,希望可以帮助到大家,同时感谢开源作者
完整项目下载地址:https://download.csdn.net/download/qq_33768099/10992288