2016-02-16 9 views
0

Я пытаюсь использовать Apache Mina для связи с TCP/IP. В моем случае, я должен отправить длинный текст сообщения, как:Apache Mina TCPServer не может читать длинный текст строки

0400F23A40010881800200000040000000001623334444555566665000990000005670000725090909999999090909072507306011040001ab9999999999ab9999999999999028000008389999999900000056700036003110000002001000010725090909000000000000000000 

Но когда я пытаюсь отправить мой TCP сервер не может показать сообщение в консоли. Вот мой код сервера:

public class TCPServer { 
    private static final int PORT = 3092; 

    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")))); 
//  

     // Set handler 
     acceptor.setHandler(new TimeServerHandler()); 

     // Set config 
     acceptor.getSessionConfig().setMaxReadBufferSize(1048576); 
     acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); 

     // Bind port 
     acceptor.bind(new InetSocketAddress(PORT)); 
    } 
} 

И это мой обработчик

public class TimeServerHandler extends IoHandlerAdapter { 
    private static final CharsetEncoder ENCODER = Charset.forName("UTF-8").newEncoder(); 

    public void exceptionCaught(IoSession session, Throwable cause) throws Exception { 
     cause.printStackTrace(); 
    } 

    public void messageReceived(IoSession session, Object message) throws Exception { 
     String msg = message.toString(); 

     if (message instanceof IoBuffer) { 
      IoBuffer ioBuffer = IoBuffer.allocate(msg.length(), false).setAutoExpand(true); 

      System.out.println(ioBuffer.capacity()); 
     } 

     if (msg.trim().equalsIgnoreCase("quit")) { 
      session.close(true); 
      return; 
     } 
    } 

    public void sessionIdle(IoSession session, IdleStatus status) throws Exception { 

    } 
} 

Я просто распечатать емкость, но сервер не может прочитать сообщение.

Как это исправить? Спасибо

ответ

0

Вы должны преобразовать его в строку

if(ioBuffer.isDirect()) 
    { 
     byte[] dst = new byte[ioBuffer.capacity()] 
     ioBuffer.get(dst); 
     System.out.println(new String(dst, "UTF-8")) 
    } 
    else 
    { 
     System.out.println(new String(ioBuffer.array(), "UTF-8")) 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^