首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

mina-example中的小事例(字符串反转)

2012-09-19 
mina-example中的小例子(字符串反转)1.首先请看服务端代码:package org.apache.mina.example.reverserimp

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

2.在看服务器端消息处理器
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());    }}

3.接着是自己模仿写的客户端代码:
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();}}

4.客户端的消息处理器
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("我是好人");}}

然后:先启动服务器端Main,然后启动MyClient,跑起来吧。

热点排行