MINA框架的搭建主要的类与发法
最近在学习MINA框架,所以整理了下


注:MINA框架中的主要类
NioSocketAcceptor用于创建服务端监听;NioSocketConnector用于创建客户端连接;
IoSession用来保存会话属性和发送消息;
IoHandlerAdapter用于定义业务逻辑,常用的方法有:
sessionCreated() 当会话创建时被触发;
sessionOpened() 当会话开始时被触发;
sessionClosed() 当会话关闭时被触发;
sessionIdle() 当会话空闲时被触发;
exceptionCaught() 当接口中其他方法抛出异常未被捕获时触发此方法;
messageReceived() 当接收到消息后被触发;
messageSent() 当发送消息后被触发;
使用的架包分别是:mina-core-2.0.9.jar 、 slf4j-simple-1.7.12.jar、slf4j-api-1.7.12.jar
创一个连接服务器的类 CreateMinaServer
package mina.demo; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession; //传输数据类 public class CreateMinaServer extends IoHandlerAdapter { private int count = 0; //记录客户端的连接次数 //当一个新客户端连接时触发该方法 public void sessionCreated(IoSession ioSession){ System.out.println(" 新客服端连接了"); } //当一个客户端连接时 public void sessionOpened(IoSession ioSession) throws Exception{ count ++; System.out.println(" 第"+ count +"个客户端登录!address:"+ ioSession.getRemoteAddress()); } //当客户端发送的消息到达时 public void meassageReceived(IoSession session, Object message){ User user = (User)message; System.out.println(" "+user.getName()); user.setName("张无忌"); session.write(user); } //当信息传达到客户端时触发该方法 public void messageSent(IoSession session,Object message){ System.out.println(" 信息已传送到客户端。"); } //当客户端关闭时 public void sessionClosed(IoSession session){ System.out.println(" 客户端已关闭。"); } // 当连接空闲时触发此方法 public void sessionIdle(IoSession session,IdleStatus status){ System.out.println("连接空闲。"); } // 当接口中其他方法抛出异常未被捕获时触发此方法 @Override public void exceptionCaught(IoSession session, Throwable cause) throws Exception { System.out.println("其他方法抛出异常。"); } }测试类 TestMina
package mina.demo.test; import java.io.IOException; import java.net.InetSocketAddress; import mina.demo.CreateMinaServer; import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.SocketAcceptor; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; public class TestMina { /** * @param args */ public static void main(String[] args) { //创建一个非阻塞的服务器端(Server)的槽(Socket),用NIO SocketAcceptor acceptor = new NioSocketAcceptor(); //创建接受数据的过滤器 DefaultIoFilterChainBuilder chain = acceptor.getFilterChain(); //设定过滤器一行行(/r/n)的读取数据 chain.addLast("mychin", new ProtocolCodecFilter(new TextLineCodecFactory() )); //假设这个过滤器将以对象的单位读取数据 ProtocolCodecFilter filter = new ProtocolCodecFilter (new ObjectSerializationCodecFactory()); chain.addLast("objectFilter", filter); //设定服务器消息处理器 acceptor.setHandler(new CreateMinaServer()); //绑定服务器的端口 int port = 1010; /* //绑定端口号,启动服务器 try { acceptor.bind(new InetSocketAddress(port)); } catch (IOException e) { System.out.println("启动服务器错误:" + port); e.printStackTrace(); } */ //关闭服务器 acceptor.dispose(true); if(acceptor.isDisposed()){ System.out.println("关闭服务器成功!"); } //System.out.println("启动服务器成功:" + port); } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。