当前位置: 代码迷 >> Java相关 >> java mina 满载IoHandlerAdapter:messageReceived()函数没有被调用
  详细解决方案

java mina 满载IoHandlerAdapter:messageReceived()函数没有被调用

热度:1300   发布时间:2016-04-22 20:58:35.0
java mina 重载IoHandlerAdapter::messageReceived()函数没有被调用。
public class TimeServerHandler extends IoHandlerAdapter
{
    @Override
    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
    {
        cause.printStackTrace();
    }

    @Override
    public void messageReceived( IoSession session, Object message ) throws Exception
    {
        String str = message.toString();
        if( str.trim().equalsIgnoreCase("quit") ) {
            session.close();
            return;
        }

        Date date = new Date();
        session.write( date.toString() );
        System.out.println("Message written...");
    }

    @Override
    public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
    {
        System.out.println( "IDLE " + session.getIdleCount( status ));
    }
}
;
public class MinaTimeServer
{
    private static final int PORT = 441;

    public static void main( String[] args ) throws IOException
    {
        IoAcceptor acceptor = new NioSocketAcceptor();

        acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
        acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));

        acceptor.setHandler( new TimeServerHandler() );
    acceptor.getSessionConfig().setReadBufferSize( 2048 );
        acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
        acceptor.bind( new InetSocketAddress(PORT) );
    }
}以上代码在执行时候,为什么messageReceived()没有被执行呢?很郁闷,这是http://mina.apache.org/官网里子啊。
------解决思路----------------------
原来是没有换行符啊,肏了,研究一下午!说明一下吧!
错误发送   发送字符串:123(十六进制为31 32 33)这种发送无法触发messageReceived
正确发送   在原有十六进制末尾上加0D 0A(换行符) ,变为31 32 33 0D 0A 即可触发messageReceived!
  相关解决方案