2012-03-28 447 views
1

任何人都可以解释如何发送确认从服务器到设备使用netty如何使用netty将确认从服务器发送到客户端?

我使用下面的代码:

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) 
      throws Exception { 

    String msg = null; 
    String IMIE = null; 
    String[] str = null; 
    String ack = null; 
    StringBuffer sbs = new StringBuffer(); 
    ChannelBuffer buf = (ChannelBuffer) e.getMessage(); 

    while(buf.readable()) { 
     sbs.append((char) buf.readByte());   
    } 

    msg = sbs.toString(); 
    System.out.println(msg); 


    byte[] request = new byte[] { 0x01 }; 
    e.getChannel().write(request,e.getChannel().getRemoteAddress()); 
    System.out.flush(); 

和我得到错误

java.lang.IllegalArgumentException异常:不支持的消息类型:类[B

请帮助我。

+0

你能告诉我们你是如何设置你的'ChannelPipelineFactory'吗?错误信息表明它不知道如何将'byte []'写入'Channel',这意味着你没有一个正确配置的解码器。 – stevevls 2012-03-28 11:17:07

回答

3

你需要将你的字节数组包装到ChannelBuffer中,或者添加一个Encoder来为你做这件事。所以最简单的解决方法是:

public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) 
     throws Exception { 

    String msg = null; 
    String IMIE = null; 
    String[] str = null; 
    String ack = null; 
    ChannelBuffer buf = null; 
    StringBuffer sbs = new StringBuffer(); 
    buf = (ChannelBuffer) e.getMessage(); 
    while(buf.readable()) { 
     sbs.append((char) buf.readByte()); 
    } 

    msg = sbs.toString(); 
    System.out.println(msg); 


    byte[] request = new byte[] { 0x01 }; 
    e.getChannel().write(ChannelBuffers.wrappedBuffer(request)); 
    System.out.flush(); 
} 
+0

非常感谢Mr.Norman – Raghava 2012-03-28 12:17:41

+0

e.getChannel()。write(ChannelBuffers.wrappedBuffer(request)); 这工作正常。 – user2888996 2015-12-30 09:02:28

相关问题