mina的服务器与客户端的例子

来源:互联网 发布:tensorflow 1.4 编辑:程序博客网 时间:2024/05/01 17:36

1、服务器端

public class MinaServer {
    public static final int PORT=1234;
    private static Logger log = Logger.getLogger(MinaServer.class);
    
    public static void main(String[] args) {
        try{
        //创建一个非阻塞的server    
        IoAcceptor acceptor = new NioSocketAcceptor();
        
        //log过滤器
        acceptor.getFilterChain().addLast("logger", new LoggingFilter());
        
        //编码解码过滤器
        acceptor.getFilterChain().addLast( "codec",
                        new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

        //设置通道占用时间
        acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
        
        //业务逻辑对象
        acceptor.setHandler(new MinaServerHandler());
        
        //端口邦定
        acceptor.bind(new InetSocketAddress(PORT));
        
        log.info("MESSAGE:SERVER MESSAGE:FRONT END SERVER IS LAUNCH,LISTENER PORT:" + PORT);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


2、服务器的业务逻辑处理

public class MinaServerHandler extends IoHandlerAdapter {
    
    private final Logger logger =Logger.getLogger(MinaServerHandler.class);
    boolean sendFlag=false;
    private static String sendMsg="Hello Client,server receive message...";
   
   
    @Override
    public void sessionOpened(IoSession session) {
            logger.info("==================================MESSAGE:SERVICE START=============================");
            session.setAttribute("Values: ");
    }

    @Override
    public void messageReceived(IoSession session, Object message) {
            sendFlag=true;
            logger.info("Message received in the server..");
            logger.info("Message is: " + message.toString());
            if(sendFlag){
                try {
//                    messageSent(session,MinaClient02.getMsgLength(sendMsg).getBytes());
                    messageSent(session,sendMsg);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    }

    @Override
    public void sessionIdle(IoSession session, IdleStatus status) {
            logger.info("Disconnecting the idle.");
            session.close(true);
    }

    
    @Override
    public void messageSent(IoSession session, Object message) throws Exception {
        logger.info("Message Sent....");
        session.write(message);
        session.close(true);
    }

    @Override
    public void exceptionCaught(IoSession session, Throwable cause) {
            session.close(true);
    }

    @Override
    public void sessionClosed(IoSession session) throws Exception {
        logger.info("==================================MESSAGE:SERVICE END=============================");
    }

}


3、客户端


public class MinaClient {

     private static String sendMsg="respMsg=中华人民共和国&respTime=20121105093922&merId=123456789012345&merAbbr=CUPDATA IC TEST3&orderNumber=IC13520795375152872&qid=013746&orderAmount=000000000001&orderCurrency=156&settleAmount";
     private static final int PORT = 1234;
    public static void main(String[] args) {
        
        //客户端对象
        IoConnector connector = new NioSocketConnector();
        
        //可读缓存的大小
        connector.getSessionConfig().setReadBufferSize(2048);
        
        //log过滤器
        connector.getFilterChain().addLast("logger", new LoggingFilter());
        
        //编码解码过滤器
        connector.getFilterChain().addLast("codec",
                        new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));
        
        //业务逻辑处理对象
        connector.setHandler(new MinaClientHandler());

        //建立连接
        ConnectFuture future = connector.connect(new InetSocketAddress("localhost", PORT));
        
        future.awaitUninterruptibly();

        if (!future.isConnected()) {
                return;
        }
        
        //允许读操作
        future.getSession().getConfig().setUseReadOperation(true);
        
        //写消息
        future.getSession().write(getSendMsgLen(sendMsg));
        
        //等待操作的完成
        future.getSession().getCloseFuture().awaitUninterruptibly();
        
        System.out.println("After Writing");
        
        //连接关闭
        connector.dispose();

    }
}


4、客户端的业务逻辑处理


public class MinaClientHandler extends IoHandlerAdapter {
     private final Logger logger = Logger.getLogger(getClass());
 
     private boolean finished;
     private  String values;
     
     public MinaClientHandler() {
     }


    public MinaClientHandler(String values) {
             this.values = values;
     }

     
    public boolean isFinished() {
             return finished;
     }
    

     @Override
     public void messageReceived(IoSession session, Object message) {
             
             logger.info("Message received in the client..");
             logger.info("Message is: " + message.toString());
     }

     @Override
     public void exceptionCaught(IoSession session, Throwable cause) {
             session.close(true);
     }

}


希望对像我一样的出学有所帮助