1.IOFilter:
对应用程序和网络这块的传输,就是二进制数据和对象之间的相互转化,有相应的解码和编码器。这也是我们过滤器一种,我们队过滤器还可以做日志。消息确认等功能。
2.IOFilter类图:
是在应用层和我们业务层之家过滤层
3.完成自定义过滤器:
就是在往handler处理之前 需要调用相应的过滤器进行过滤.
Client:业务handler之前会调用我们的过滤器
对应用程序和网络这块的传输,就是二进制数据和对象之间的相互转化,有相应的解码和编码器。这也是我们过滤器一种,我们队过滤器还可以做日志。消息确认等功能。
2.IOFilter类图:
是在应用层和我们业务层之家过滤层
3.完成自定义过滤器:
就是在往handler处理之前 需要调用相应的过滤器进行过滤.
Client:业务handler之前会调用我们的过滤器
Server:同样在我们直接到数据的时候,和发送数据的时候也调用了我们的过滤器,然后才交给我们的handler。
我们来实现一个自定义的过滤器
package com.ccop;
import org.apache.mina.core.filterchain.IoFilterAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.core.write.WriteRequest;
/**
* 自定义过滤器
* @author lm
*
*/
public class MyServerfilter extends IoFilterAdapter{
@Override
public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
super.messageReceived(nextFilter, session, message);
System.out.println("MyfilterServer->messageReceived");
nextFilter.messageReceived(session, message);
}
@Override
public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
// TODO Auto-generated method stub
super.messageSent(nextFilter, session, writeRequest);
System.out.println("MyfilterServer->messageSent");
nextFilter.messageReceived(session, writeRequest);
}
}
package com.ccop;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class Server {
private static int port=7080;
static IoAcceptor accpet = null;
public static void main(String[] args) throws IOException{
accpet = new NioSocketAcceptor();
//设置编码过滤器
accpet.getFilterChain().addLast("codec",new ProtocolCodecFilter(
new TextLineCodecFactory(
Charset.forName("UTF-8"), //编码集
LineDelimiter.WINDOWS.getValue(), //编码器
LineDelimiter.WINDOWS.getValue())));
accpet.getSessionConfig().setReadBufferSize(1024);//缓存区
accpet.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);//10毫秒进入空闲状态
accpet.getFilterChain().addFirst("filter", new MyServerfilter());
accpet.setHandler(new ServerHandler()); //具体业务层
accpet.bind(new InetSocketAddress(port));
System.out.println("Server-->"+port);
}
}
package com.ccop;
import org.apache.mina.core.filterchain.IoFilterAdapter;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.core.write.WriteRequest;
public class MyClientFilter extends IoFilterAdapter{
@Override
public void messageReceived(NextFilter nextFilter, IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
super.messageReceived(nextFilter, session, message);
System.out.println("MyClientFilter->messageReceived");
nextFilter.messageReceived(session, message);
}
@Override
public void messageSent(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception {
// TODO Auto-generated method stub
super.messageSent(nextFilter, session, writeRequest);
System.out.println("MyClientFilter->messageSent");
nextFilter.messageReceived(session, writeRequest);
}
}
package com.ccop;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.service.IoConnector;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.LineDelimiter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
public class client {
private static String host = "127.0.0.1";
private static int port=7080;
public static void main(String[] args){
IoSession ioSession=null;
IoConnector connector = new NioSocketConnector();
connector.setConnectTimeout(3000);
connector.getFilterChain().addLast(
"coderc",
new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"),
LineDelimiter.WINDOWS.getValue(),
LineDelimiter.WINDOWS.getValue())));
connector.getFilterChain().addFirst("filter", new MyClientFilter());
connector.setHandler(new clientHandler());
ConnectFuture futrue= connector.connect(new InetSocketAddress(host,port));
futrue.awaitUninterruptibly(); //等待我的连接
ioSession=futrue.getSession();
ioSession.write("你好 !");
ioSession.getCloseFuture().awaitUninterruptibly();//等待关闭连接
connector.dispose();
}
}