MINA框架的搭建主要的类与发法

来源:互联网 发布:对网络攻防技术的认识 编辑:程序博客网 时间:2024/06/11 02:48

最近在学习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("\n新客服端连接了");}//当一个客户端连接时public void sessionOpened(IoSession ioSession) throws Exception{count ++;System.out.println("\n第"+ count +"个客户端登录!address:"+ ioSession.getRemoteAddress());}//当客户端发送的消息到达时public void meassageReceived(IoSession session, Object message){User user = (User)message;System.out.println("\n"+user.getName());user.setName("张无忌");session.write(user);}//当信息传达到客户端时触发该方法public void messageSent(IoSession session,Object message){System.out.println("\n信息已传送到客户端。");}//当客户端关闭时public void sessionClosed(IoSession session){System.out.println("\n客户端已关闭。");} // 当连接空闲时触发此方法public void sessionIdle(IoSession session,IdleStatus status){System.out.println("连接空闲。");}// 当接口中其他方法抛出异常未被捕获时触发此方法@Overridepublic 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),用NIOSocketAcceptor 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);}}


0 0
原创粉丝点击