MINA的一般用法是:
1.获取IoAcceptor;
2.设置过滤器;
3.设置回调的控制器(继承IoHandlerAdapter的类);
4.绑定端口;
IoFilter 中与过滤器的生命周期相关的方法
一类是与过滤器的生命周期相关的
init();
onPreAdd(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) ;//当过滤器即将被添加到过滤器链中的时候,此方法被调用。
onPostAdd(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter);//当过滤器已经被添加到过滤器链中之后,此方法被调用。
onPreRemove(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) ;//当过滤器即将被从过滤器链中删除的时候,此方法被调用。
onPostRemove(IoFilterChain parent, String name, IoFilter.NextFilter nextFilter) ;//当过滤器已经被从过滤器链中删除的时候,此方法被调用。
destroy() ;// 当过滤器不再需要的时候,它将 被销毁,此方法被调用。
/* 另外一类是用来过滤 I/O 事件的。*/
IoFilter 中过滤 I/O 事件的方法 方法
filterClose(IoFilter.NextFilter nextFilter, IoSession session) ;//过滤对 IoSession的 close方法的调用。
filterWrite(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest);//过滤对 IoSession的 write方法的调用。
exceptionCaught(IoFilter.NextFilter nextFilter, IoSession session, Throwable cause) ;//过滤对 IoHandlerexceptionCaught方法的 调用。
messageReceived(IoFilter.NextFilter nextFilter, IoSession session, Object message) ;//过滤对 IoHandler的messageReceived方法的 调用。
messageSent(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest);//过滤对 IoHandler的 messageSent方法的调 用。
sessionClosed(IoFilter.NextFilter nextFilter, IoSession session) ;// 过滤对 IoHandler的 sessionClosed方法的调 用。
sessionCreated(IoFilter.NextFilter nextFilter, IoSession session) ;//过滤对 IoHandler的 sessionCreated方法的 调用。
sessionIdle(IoFilter.NextFilter nextFilter, IoSession session, IdleStatus status);//过滤对 IoHandler的 sessionIdle方法的调 用。
sessionOpened(IoFilter.NextFilter nextFilter, IoSession session) ;// 过滤对 IoHandler的 sessionOpened方法的调 用。
IoFilterChain 接口的方法
addFirst(String name, IoFilter filter) ;//将指定名称的过滤器添加到过滤器链的开头。
addLast(String name, IoFilter filter);//将指定名称的过滤器添加到过滤器链的末尾。
contains(String name);//判断过滤器链中是否包含指定名称的过滤 器。
get(String name);//从过滤器链中获取指定名称的过滤器。
remove(String name);//从过滤器链中删除指定名称的过滤器。
replace(String name, IoFilter newFilter);//用过滤器 newFilter替换掉过滤器链中名为 name的过滤器。
getSession() 获取与过滤器链一一对应的 I/O 会话。
IoHandler 接口的方法 方法
sessionCreated(IoSession session);//当有新的连接建立的时候,该方法被调 用。
sessionOpened(IoSession session);//当有新的连接打开的时候,该方法被调 用。该方法在 sessionCreated之后被调 用。
sessionClosed(IoSession session);//当连接被关闭的时候,此方法被调用。
sessionIdle(IoSession session, IdleStatus status);//当连接变成闲置状态的时候,此方法被调用。
exceptionCaught(IoSession session, Throwable cause);//当 I/O 处理器的实现或是 Apache MINA 中有异常抛出的时候,此方法被调用。
messageReceived(IoSession session, Object message);//当接收到新的消息的时候,此方法被调用。
messageSent(IoSession session, Object message);//当消息被成功发送出去的时候,此方法被调用。
Demo
public class MinaTimeClient {
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);
WriteFuture future = session.write(str); // 发送数据
future.awaitUninterruptibly(); // 等待发送数据操作完成
if (future.isWritten()) {
// 数据已经被成功发送
System.out.println("数据已经被成功发送");
} else {
// 数据发送失败
System.out.println("数据发送失败");
}
}
// 关闭
if (session != null) {
if (session.isConnected()) {
session.getCloseFuture().awaitUninterruptibly();
}
connector.dispose(true);
}
}
}
参考:http://blog.csdn.net/hujunil/article/details/9923381
参考:http://wenku.baidu.com/link?url=m46kmmkYQqGaLAQFKEKbrGucC-cF-i6ZqczM0NWAxCsb6IPBLd3QXQGMlmxvDqqtXh7MG8xjvdoBgbI5B4HI9R80RmYzw0jDOjUBA6RfZF7