zoukankan      html  css  js  c++  java
  • Mina小例子

      此例子解决了中文乱码问题。

    客服端:

    MimaTimeClient.java

    package minaExamle.client;
    
    import java.net.InetSocketAddress;
    import java.nio.charset.Charset;
    import java.util.Scanner;
    
    import minaExamle.common.BaseConfig;
    
    import org.apache.mina.core.future.ConnectFuture;
    import org.apache.mina.core.service.IoConnector;
    import org.apache.mina.core.session.IoSession;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.prefixedstring.PrefixedStringCodecFactory;
    import org.apache.mina.filter.logging.LoggingFilter;
    import org.apache.mina.transport.socket.nio.NioSocketConnector;
    
    public class MimaTimeClient {
    
        public static void main(String[] args) {
            IoConnector connector = new NioSocketConnector();
            connector.getFilterChain().addLast( "logger", new LoggingFilter() );
            connector.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new PrefixedStringCodecFactory(Charset.forName("UTF-8"))));
            connector.setHandler(new TimeClientHander());
            ConnectFuture connectFuture = connector.connect(new InetSocketAddress("127.0.0.1",BaseConfig.PORT));
            //等待建立连接
            connectFuture.awaitUninterruptibly();
            System.out.println("连接成功");
            
            IoSession session = connectFuture.getSession();
            
            Scanner sc = new Scanner(System.in);
            
            boolean quit = false;
            
            while(!quit){
                
                String str = sc.next();
                if(str.equalsIgnoreCase("quit")){
                    quit = true;
                }
                session.write(str);
            }
            
            //关闭
            if(session!=null){
                if(session.isConnected()){
                    session.getCloseFuture().awaitUninterruptibly();
                }
                connector.dispose(true);
            }
            
            
        }
    
    }

    TimeClientHander.java

    package minaExamle.client;
    
    import org.apache.mina.core.service.IoHandler;
    import org.apache.mina.core.session.IdleStatus;
    import org.apache.mina.core.session.IoSession;
    
    public class TimeClientHander implements IoHandler {
    
        @Override
        public void exceptionCaught(IoSession arg0, Throwable arg1)
                throws Exception {
            // TODO Auto-generated method stub
            arg1.printStackTrace();
        }
    
        @Override
        public void messageReceived(IoSession arg0, Object message) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("client接受信息:"+message.toString());
        }
    
        @Override
        public void messageSent(IoSession arg0, Object message) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("client发送信息"+message.toString());
        }
    
        @Override
        public void sessionClosed(IoSession session) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("client与:"+session.getRemoteAddress().toString()+"断开连接");
        }
    
        @Override
        public void sessionCreated(IoSession session) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("client与:"+session.getRemoteAddress().toString()+"建立连接");
        }
    
        @Override
        public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
            // TODO Auto-generated method stub
            System.out.println( "IDLE " + session.getIdleCount( status ));
        }
    
        @Override
        public void sessionOpened(IoSession arg0) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("打开连接");
        }
    
    }

    服务端:

    MinaTimeServer.java

    package minaExamle.server;
    
    import java.io.IOException;
    import java.net.InetSocketAddress;
    import java.nio.charset.Charset;
    
    import minaExamle.common.BaseConfig;
    
    import org.apache.mina.core.service.IoAcceptor;
    import org.apache.mina.core.session.IdleStatus;
    import org.apache.mina.filter.codec.ProtocolCodecFilter;
    import org.apache.mina.filter.codec.prefixedstring.PrefixedStringCodecFactory;
    import org.apache.mina.filter.logging.LoggingFilter;
    import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
    
    public class MinaTimeServer {
        
        private static final int PORT= BaseConfig.PORT;
        
        public static void main(String[] args) throws IOException {
    
            IoAcceptor acceptor = new NioSocketAcceptor();
            acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
            acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new PrefixedStringCodecFactory(Charset.forName("UTF-8"))));
            acceptor.setHandler(  new TimeServerHandler() );
            
            acceptor.getSessionConfig().setReadBufferSize( 2048 );
                    acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
            
            acceptor.bind(new InetSocketAddress(PORT));
            
        }
    
    }

    TimeServerHandler.java

    package minaExamle.server;
    
    import java.util.Date;
    
    import org.apache.mina.core.service.IoHandler;
    import org.apache.mina.core.session.IdleStatus;
    import org.apache.mina.core.session.IoSession;
    
    public class TimeServerHandler implements IoHandler {
    
        @Override
        public void exceptionCaught(IoSession arg0, Throwable arg1)
                throws Exception {
            arg1.printStackTrace();
    
        }
    
        @Override
        public void messageReceived(IoSession session, Object message) throws Exception {
            
            String str = message.toString();
            
            System.out.println("接受到的消息:"+str);
            
            if( str.trim().equalsIgnoreCase("quit") ) {
                session.close(true);
                return;
            }
            Date date = new Date();
            session.write( date.toString() );
            System.out.println("Message written...");
        }
    
        @Override
        public void messageSent(IoSession arg0, Object arg1) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("发送信息:"+arg1.toString());
        }
    
        @Override
        public void sessionClosed(IoSession session) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("IP:"+session.getRemoteAddress().toString()+"断开连接");
        }
    
        @Override
        public void sessionCreated(IoSession session) throws Exception {
            // TODO Auto-generated method stub
            System.out.println("IP:"+session.getRemoteAddress().toString());
        }
    
        @Override
        public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
            // TODO Auto-generated method stub
            System.out.println( "IDLE " + session.getIdleCount( status ));
    
        }
    
        @Override
        public void sessionOpened(IoSession arg0) throws Exception {
            // TODO Auto-generated method stub
    
        }
    
    }

    BaseConfig.java

    package minaExamle.common;
    
    public class BaseConfig {
        //服务器端口
        public static final int PORT = 9123;
        
    }

    服务端运行截图

    客服端运行截图

  • 相关阅读:
    直接插入排序
    安卓突击:隐式、显式Intent
    安卓突击:Android 动画有哪几种?
    安卓突击:ANR
    安卓突击:系统上安装了多种浏览器,能否指定某浏览器访问指定页面
    安卓突击:系统上安装了多种浏览器,能否指定某浏览器访问指定页面
    Android:BroadcastReceiver的基础知识
    安卓突击:service的基础知识
    安卓突击:数据存储方式
    Android突击:常用的五种布局
  • 原文地址:https://www.cnblogs.com/gisblogs/p/3951244.html
Copyright © 2011-2022 走看看