如何在Netty channelRead()上读写

时间:2014-02-19 16:53:54

标签: java sockets netty

我正在运行Netty,我需要从客户端读取一些消息。 然后我需要在服务器中执行一些操作,然后向客户端发送响应。 也许客户需要再次回答服务器。 我认为这一切都必须在同一个线程中发生。 我怎么能在Netty服务器上这样做? 我使用Telnet测试下面的代码,但我无法从服务器获得响应。 如果我注释第一个块,(读取消息块),那么我开始在Telnet控制台中收到响应。

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) { // (2)

    // Read the message sent from client.
    try{
        ByteBuf in = (ByteBuf) msg;
        try {
            while (in.isReadable()) { // (1)
                System.out.print((char) in.readByte());
                System.out.flush();
            }
        }
        catch(Exception e){
            System.out.println("---------------- Reading Exception ----------------");
            e.printStackTrace();
        }finally{
            //ReferenceCountUtil.release(msg);
        }

        // treat the received message
        if(msg.equals("teste")){
            // do Something...
        }           

        //Answer to the client
        try {
            ctx.write(msg); // (1)
            ctx.flush(); // (2) 
        }
        catch(Exception e){
            System.out.println("---------------- Writing Exception ----------------");
            e.printStackTrace();
        }
    }
    finally {
        //ReferenceCountUtil.release(msg); // (2)
    }       

}

1 个答案:

答案 0 :(得分:0)

在while循环之后:while (in.isReadable()) {...},msg ByteBuf不再可读,因此不会通过ctx.write(msg)将任何内容写入客户端