首页 > 代码库 > Mina小例子

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

服务端运行截图

 

客服端运行截图

Mina小例子