mina-example中的小例子(字符串反转)
1.首先请看服务端代码:
package org.apache.mina.example.reverser;import java.net.InetSocketAddress;import java.nio.charset.Charset;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/** * (<b>Entry point</b>) Reverser server which reverses all text lines from * clients. * * @author <a href="http://mina.apache.org">Apache MINA Project</a> */public class Main { private static final int PORT = 8080; public static void main(String[] args) throws Exception { NioSocketAcceptor acceptor = new NioSocketAcceptor(); // Prepare the configuration acceptor.getFilterChain().addLast("logger", new LoggingFilter()); acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset .forName("UTF-8")))); // Bind acceptor.setHandler(new ReverseProtocolHandler()); acceptor.bind(new InetSocketAddress(PORT)); System.out.println("Listening on port " + PORT); }}package org.apache.mina.example.reverser;import org.apache.mina.core.service.IoHandler;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;/** * {@link IoHandler} implementation of reverser server protocol. * * @author <a href="http://mina.apache.org">Apache MINA Project</a> */public class ReverseProtocolHandler extends IoHandlerAdapter { @Override public void exceptionCaught(IoSession session, Throwable cause) { // Close connection when unexpected exception is caught. session.close(true); } @Override public void messageReceived(IoSession session, Object message) { // Reverse reveiced string String str = message.toString(); System.err.println("收到客户端发来的消息::"+str); StringBuilder buf = new StringBuilder(str.length()); for (int i = str.length() - 1; i >= 0; i--) { buf.append(str.charAt(i)); } // and write it back. session.write(buf.toString()); }}package org.apache.mina.example.reverser;import java.net.InetSocketAddress;import org.apache.mina.core.RuntimeIoException;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.filter.codec.textline.TextLineCodecFactory;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketConnector;public class MyClient{ private static final String HOSTNAME = "localhost"; private static final int PORT = 8080; private static final long CONNECT_TIMEOUT = 30*1000L; // 30 seconds public static void main(String[] args) throws Exception{// 创建 TCP/IP connector.NioSocketConnector connector = new NioSocketConnector();//设置日志过滤器 connector.getFilterChain().addLast("logger", new LoggingFilter());//获得过滤器,设置读取数据的方式一行一行的读.connector.getFilterChain().addLast("codec",new ProtocolCodecFilter(new TextLineCodecFactory()));connector.setHandler(new ReverseClientHandler());//set connect timeoutconnector.setConnectTimeoutMillis(CONNECT_TIMEOUT); IoSession session; for (;;) { try { //连接到服务器 ConnectFuture future = connector.connect(new InetSocketAddress( HOSTNAME, PORT)); future.awaitUninterruptibly(); session = future.getSession(); break; } catch (RuntimeIoException e) { System.err.println("Failed to connect."); e.printStackTrace();Thread.sleep(5000); } } // wait until the summation is done session.getCloseFuture().awaitUninterruptibly(); connector.dispose();}}package org.apache.mina.example.reverser;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;public class ReverseClientHandler extends IoHandlerAdapter{@Overridepublic void exceptionCaught(IoSession session, Throwable cause)throws Exception{// TODO Auto-generated method stubsuper.exceptionCaught(session, cause);}@Overridepublic void messageReceived(IoSession session, Object message)throws Exception{String msg = (String)message;System.out.println("Server sent message :"+msg);session.write(msg);}@Overridepublic void sessionClosed(IoSession session) throws Exception{session.close(true);}@Overridepublic void sessionCreated(IoSession session) throws Exception{// TODO Auto-generated method stubsuper.sessionCreated(session);}@Overridepublic void sessionOpened(IoSession session) throws Exception{session.write("我是好人");}}