从一个简单的EchoProtocolHandler入手
/**
* @className EchoProtocolHandler.java
* @author gaoling
* @createtime 2009-下午05:03:04
* @version TODO
* @purpose TODO
*
* @Notes TODO
* @Example: TODO
*/
package com.gaoling.minatest3;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.ssl.SslFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EchoProtocolHandler extends IoHandlerAdapter {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void sessionCreated(IoSession session) {
session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
// We're going to use SSL negotiation notification.
session.setAttribute(SslFilter.USE_NOTIFICATION);
}
@Override
public void sessionClosed(IoSession session) throws Exception {
logger.info("CLOSED");
}
@Override
public void sessionOpened(IoSession session) throws Exception {
logger.info("OPENED");
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) {
logger.info("*** IDLE #" + session.getIdleCount(IdleStatus.BOTH_IDLE) + " ***");
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) {
session.close(true);
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// Write the received data back to remote peer
//这个message 是org.apache.mina.core.buffer.SimpleBufferAllocator$SimpleBuffer的实例
System.out.println("打印消息:"+message);
session.write(((IoBuffer) message).duplicate());
}
}
/**
* @className Main.java
* @author gaoling
* @createtime 2009-下午05:05:12
* @version TODO
* @purpose TODO
*
* @Notes TODO
* @Example: TODO
*/
package com.gaoling.minatest3;
import java.net.InetSocketAddress;
import java.nio.channels.Selector;
import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.service.AbstractIoService;
import org.apache.mina.core.service.IoService;
import org.apache.mina.core.service.IoServiceListener;
import org.apache.mina.core.service.IoServiceStatistics;
import org.apache.mina.core.service.SimpleIoProcessorPool;
import org.apache.mina.core.session.IoSessionConfig;
import org.apache.mina.filter.ssl.SslFilter;
import org.apache.mina.transport.socket.DefaultSocketSessionConfig;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioProcessor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;;
public class Main {
/** 监听端口号*/
private static final int PORT = 5678;
public static void main(String[] args) throws Exception {
//启动一个service
SocketAcceptor acceptor = new NioSocketAcceptor();
//绑定一个处理handle
acceptor.setHandler(new EchoProtocolHandler());
//绑定一个端口
acceptor.bind(new InetSocketAddress(PORT));
}
}
自启一个客户端,执行结果