`

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 timeout
		connector.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
{

	@Override
	public void exceptionCaught(IoSession session, Throwable cause)
			throws Exception
	{
		// TODO Auto-generated method stub
		super.exceptionCaught(session, cause);
	}

	@Override
	public void messageReceived(IoSession session, Object message)
			throws Exception
	{
		String msg = (String)message;
		System.out.println("Server sent message :"+msg);
		session.write(msg);
	}

	@Override
	public void sessionClosed(IoSession session) throws Exception
	{
		session.close(true);
	}

	@Override
	public void sessionCreated(IoSession session) throws Exception
	{
		// TODO Auto-generated method stub
		super.sessionCreated(session);
	}

	@Override
	public void sessionOpened(IoSession session) throws Exception
	{
		session.write("我是好人");
	}
	
}


然后:先启动服务器端Main,然后启动MyClient,跑起来吧。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics