2012-03-28 2 views
1

nettyを使用して、サーバーからデバイスに確認応答を送信する方法を説明できます。サポートされていないメッセージの種類:クラス[Bnettyを使用してサーバーからクライアントに確認応答を送信するにはどうすればよいですか?

してください、助け

java.lang.IllegalArgumentExceptionがエラー

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(); 

となっています:

私は、次のコードを使用しています私。

+0

「ChannelPipelineFactory」の設定方法を教えてください。エラーメッセージは、 'byte []'を 'Channel'に書き込む方法を知らないことを示します。これは、あなたが適切に設定されたデコーダを持っていないことを意味します。 – stevevls

答えて

3

バイト配列をChannelBufferにラップするか、これを行うエンコーダを追加する必要があります。したがって、最も単純な修正は次のとおりです。

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

+0

e.getChannel()。write(ChannelBuffers.wrappedBuffer(request)); これは問題なく動作します。 – user2888996

関連する問題