初识mina框架

step1:创建java工程,导入jar包

  

step2:在src下配置log4j.properties文件

 1 log4j.rootLogger=DEBUG,MINA,file
 2 log4j.appender.MINA=org.apache.log4j.ConsoleAppender
 3 log4j.appender.MINA.layout=org.apache.log4j.PatternLayout
 4 log4j.appender.MINA.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS}%-5p%c{1}%x-%m%n
 5 log4j.appender.file=org.apache.log4j.RollingFileAppender
 6 log4j.appender.file.File=./log/minademos.log
 7 log4j.appender.file.MaxFileSize=5120KB
 8 log4j.appender.file.MaxBackupIndex=10
 9 log4j.appender.file.layout=org.apache.log4j.PatternLayout
10 log4j.appender.file.layout.ConversionPattern=[VAMS][%d]%p|%m|[%t]%C.%M(%L)%n

step3:服务器端代码

 1 package com.per.mina.server;
 2 
 3 import java.net.InetSocketAddress;
 4 import java.nio.charset.Charset;
 5 
 6 import org.apache.log4j.Logger;
 7 import org.apache.mina.core.service.IoAcceptor;
 8 import org.apache.mina.core.session.IdleStatus;
 9 import org.apache.mina.filter.codec.ProtocolCodecFilter;
10 import org.apache.mina.filter.codec.textline.LineDelimiter;
11 import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
12 import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
13 
14 import com.per.mina.server.handler.Demo1ServerHandler;
15 
16 public class Demo1Server {
17     private static Logger logger=Logger.getLogger(Demo1Server.class);
18     private static int port=3005;
19     public static void main(String[] args) {
20         IoAcceptor acceptor=null;//创建连接
21         try {
22             acceptor=new NioSocketAcceptor();//创建一个非阻塞的serverdaunt的Socket
23             //添加消息过滤器
24             acceptor.getFilterChain().addLast("codec", 
25                     new ProtocolCodecFilter(
26                             new TextLineCodecFactory(Charset.forName("utf-8"),
27                                         LineDelimiter.WINDOWS.getValue(), 
28                                         LineDelimiter.WINDOWS.getValue())));
29             //设置读取数据的缓冲区大小
30             acceptor.getSessionConfig().setReadBufferSize(2048);
31             //读写通道10 秒内无操作进入空闲状态
32             acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
33             //绑定逻辑处理器
34             acceptor.setHandler(new Demo1ServerHandler());//添加业务处理
35             
36             //绑定端口
37             acceptor.bind(new InetSocketAddress(port));
38             logger.info("服务器端启动成功...  端口号为:"+port);
39         } catch (Exception e) {
40             logger.error("服务器端启动异常...", e);
41             e.printStackTrace();
42         }
43         
44     }
45 }
 1 package com.per.mina.server.handler;
 2 
 3 import java.util.Date;
 4 
 5 import org.apache.log4j.Logger;
 6 import org.apache.mina.core.service.IoHandlerAdapter;
 7 import org.apache.mina.core.session.IdleStatus;
 8 import org.apache.mina.core.session.IoSession;
 9 
10 public class Demo1ServerHandler extends IoHandlerAdapter {
11     private static Logger logger=Logger.getLogger(Demo1ServerHandler.class);
12     
13     @Override
14     public void sessionCreated(IoSession session) throws Exception {
15         logger.info("服务器端与客户端创建连接");
16     }
17     @Override
18     public void sessionOpened(IoSession session) throws Exception {
19         logger.info("服务端与客户端连接打开");
20     }
21     @Override
22     public void messageReceived(IoSession session, Object message)
23             throws Exception {
24         String msg=message.toString();
25         logger.info("服务端接收到的数据为:"+msg);
26         if("bye".equals(msg)){
27             session.close();
28         }
29         Date date=new Date();
30         session.write(date);
31     }
32     @Override
33     public void messageSent(IoSession session, Object message) throws Exception {
34         //session.closeNow();//控制长连接与短连接
35         logger.info("服务端发送信息成功...");
36     }
37     @Override
38     public void sessionClosed(IoSession session) throws Exception {
39         super.sessionClosed(session);
40     }
41     @Override
42     public void sessionIdle(IoSession session, IdleStatus status)
43             throws Exception {
44         logger.info("服务端进入空闲状态...");
45     }
46     @Override
47     public void exceptionCaught(IoSession session, Throwable cause)
48             throws Exception {
49         logger.error("服务端发送异常", cause);
50     }
51     
52 }

step4:客户端代码

 1 package com.per.mina.client;
 2 
 3 import java.net.InetSocketAddress;
 4 import java.nio.charset.Charset;
 5 
 6 
 7 
 8 import org.apache.mina.core.future.ConnectFuture;
 9 import org.apache.mina.core.service.IoConnector;
10 import org.apache.mina.core.session.IoSession;
11 import org.apache.mina.filter.codec.ProtocolCodecFilter;
12 import org.apache.mina.filter.codec.textline.LineDelimiter;
13 import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
14 import org.apache.mina.transport.socket.nio.NioSocketConnector;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17 
18 import com.per.mina.client.handler.MinaClientDemo1Handler;
19 
20 public class MinaClientDemo1 {
21     //private static Logger logger=Logger.getLogger(MinaClientDemo1.class);
22     private static Logger logger=LoggerFactory.getLogger(MinaClientDemo1.class);
23     private static String HOST="127.0.0.1";
24     private static int PORT=3005;
25     public static void main(String[] args) {
26         //创建一个非阻塞的客户端程序
27         IoConnector connector=new NioSocketConnector();//创建连接
28         
29         //设置连接超时时间
30         connector.setConnectTimeoutMillis(30000);
31         //添加过滤器
32         connector.getFilterChain().addLast("codec", 
33                 new ProtocolCodecFilter(new TextLineCodecFactory(
34                         Charset.forName("utf-8"), 
35                         LineDelimiter.WINDOWS.getValue(),
36                         LineDelimiter.WINDOWS.getValue())));
37         //添加业务逻辑处理器类
38         connector.setHandler(new MinaClientDemo1Handler());//添加业务处理
39         IoSession session=null;
40         try {
41             ConnectFuture future=connector.connect(new InetSocketAddress(HOST, PORT));//创建连接
42             future.awaitUninterruptibly();//等待连接完成
43             session=future.getSession();//获得session
44             session.write("test mina");//发送消息
45             
46             
47         } catch (Exception e) {
48             logger.error("客户端连接异常...", e);
49         }
50         session.getCloseFuture().awaitUninterruptibly();//等待连接断开
51         connector.dispose();
52     }
53 }
package com.per.mina.client.handler;

import org.apache.log4j.Logger;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

public class MinaClientDemo1Handler extends IoHandlerAdapter{
    private static Logger logger=Logger.getLogger(MinaClientDemo1Handler.class);
    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        String msg=message.toString();
        logger.info("客户端接收到的信息为:"+msg);
    }
    
    @Override
    public void exceptionCaught(IoSession session, Throwable cause)
            throws Exception {
        logger.error("客户端发生异常",cause);
    }
}

 step5:进行测试,先运行服务端,再运行客户端

posted @ 2018-03-28 14:59  根须  阅读(250)  评论(0编辑  收藏  举报