SpringBoot集成Socket通讯之Mina框架

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33768099/article/details/88106014

环境: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

猜你喜欢

转载自blog.csdn.net/qq_33768099/article/details/88106014