java通信框架mina的使用

什么事mina?

mina是基于nio开发出来的一个无阻塞高性能通信框架,能够处理socket无法解决的高并发问题。

mina的下载

http://mina.apache.org/

.将下载好的压缩包进行解压,将dist文件夹下的mina-core-2.0.14.jar文件和lib文件下slf4j-api-1.7.21.jar文件导入到你的web项目中

package com.example.server;

import java.io.IOException;
import java.net.InetSocketAddress;

import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaServer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			 //第一步 创建一个NioSocketAcceptor 对象
			NioSocketAcceptor acceptor=new NioSocketAcceptor();
			//第二步设置handler
			acceptor.setHandler(new MyServerHandler());
			//第三步,获取拦截器,发来的消息都需要通过拦截器拦截之后才能接收到
			//添加一个拦截器对数据进行加解码TextLineCodecFactory()
			acceptor.getFilterChain().addLast("codeFilter"
					,new ProtocolCodecFilter(new TextLineCodecFactory()));;
			//第四步,绑定端口号
			acceptor.bind(new InetSocketAddress(9898));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

handler对象

package com.example.server;

import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;

public class MyServerHandler extends IoHandlerAdapter {
 
	//异常的处理
	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception {
		// TODO Auto-generated method stub
		super.exceptionCaught(session, cause);
		System.out.println("exceptionCaught");
	}

	@Override
	public void inputClosed(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.inputClosed(session);
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception {
		// TODO Auto-generated method stub
		super.messageReceived(session, message);
	}

	@Override
	public void messageSent(IoSession session, Object message) throws Exception {
		// TODO Auto-generated method stub
		super.messageSent(session, message);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionClosed(session);
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionCreated(session);
	}
// 这个方法是在服务器空闲状态的时候调用的
	@Override
	public void sessionIdle(IoSession session, IdleStatus status)
			throws Exception {
		// TODO Auto-generated method stub
		super.sessionIdle(session, status);
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception {
		// TODO Auto-generated method stub
		super.sessionOpened(session);
	}
   
}

以上的代码基本上就可以代替原生的socket服务器端的写法了,至于接收端的用法可以用socket实现也可以用其他的方式实现
发布了38 篇原创文章 · 获赞 6 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/coderlady/article/details/52557487