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; }
服务端运行截图
客服端运行截图