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;
        
    }

    服务端运行截图

    客服端运行截图

  • 相关阅读:
    NET打包時加入卸载功能
    c#水晶报表注册码
    sqlserver:某年份某月份 是否在某时间段内的函数
    修改KindEditor编辑器 版本3.5.1
    Flash大文件上传(带进度条)
    让.Net程序脱离.net framework框架运行的方法(转载)
    夏天到了,什么时候园子的T恤可以出来?
    VS2005项目的安装与布署
    解决Select覆盖Div的简单直接的方法
    .Net向Page和UpdatePanel输出JS
  • 原文地址:https://www.cnblogs.com/gisblogs/p/3951244.html
Copyright © 2011-2022 走看看