rendered paste bodyBufferCodec.javaimport org.apache.mina.core.buffer.IoBuffer;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.CumulativeProtocolDecoder;import org.apache.mina.filter.codec.ProtocolCodecFactory;import org.apache.mina.filter.codec.ProtocolDecoder;import org.apache.mina.filter.codec.ProtocolDecoderOutput;import org.apache.mina.filter.codec.ProtocolEncoder;import org.apache.mina.filter.codec.ProtocolEncoderAdapter;import org.apache.mina.filter.codec.ProtocolEncoderOutput;/** * @author omry * @date Jan 21, 2010 */public class BufferCodec implements ProtocolCodecFactory{ BufferDecoder m_decoder; BufferEncoder m_encoder; public BufferCodec() { m_decoder = new BufferDecoder(); m_encoder = new BufferEncoder(); } @Override public ProtocolDecoder getDecoder(IoSession session) throws Exception { return m_decoder; } @Override public ProtocolEncoder getEncoder(IoSession session) throws Exception { return m_encoder; } private static class BufferEncoder extends ProtocolEncoderAdapter { @Override public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception { byte[] buf = (byte[]) message; IoBuffer buffer = IoBuffer.allocate(buf.length + 4, false); buffer.putInt(buf.length); buffer.put(buf); buffer.flip(); out.write(buffer); } } private static class BufferDecoder extends CumulativeProtocolDecoder { @Override protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception { if (in.prefixedDataAvailable(4)) { int length = in.getInt(); byte[] bytes = new byte[length]; in.get(bytes); out.write(bytes); return true; } else { return false; } } }}Client.javaimport java.io.IOException;import java.net.InetSocketAddress;import java.net.UnknownHostException;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.core.service.IoHandlerAdapter;import org.apache.mina.core.session.IoSession;import org.apache.mina.filter.codec.ProtocolCodecFilter;import org.apache.mina.transport.socket.SocketConnector;import org.apache.mina.transport.socket.nio.NioSocketConnector;/** * @author omry * @date Jan 21, 2010 */public class Client{ public static void main(String[] args) throws UnknownHostException, IOException { SocketConnector connector = new NioSocketConnector(); connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new BufferCodec())); connector.setHandler(new IoHandlerAdapter() { @Override public void messageReceived(IoSession session, Object message) throws Exception { byte[] res = (byte[]) message; System.out.println("message received : " + new String(res)); } }); ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 8010)); // Wait for the connection attempt to be finished. cf.awaitUninterruptibly(); cf.getSession().write("hello".getBytes());; cf.getSession().getCloseFuture().awaitUninterruptibly(); connector.dispose(); }}Server.javaimport java.net.InetSocketAddress;import org.apache.mina.core.service.IoAcceptor;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.codec.ProtocolCodecFilter;import org.apache.mina.filter.logging.LoggingFilter;import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/** * @author omry * @date Jan 21, 2010 */public class Server{ public static void main(String[] args) throws Exception { IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast("logger", new LoggingFilter()); acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new BufferCodec())); acceptor.getSessionConfig().setReadBufferSize(32000); acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); acceptor.setHandler(new MyIOHandler()); acceptor.bind(new InetSocketAddress(8010)); } static final class MyIOHandler extends IoHandlerAdapter { @Override public void messageReceived(IoSession session, Object message) throws Exception { byte[] buf = (byte[]) message; System.out.println("messageReceived : " + new String(buf)); session.write(new String(buf).toUpperCase().getBytes()); session.close(false); } }}