import static org.jboss.netty.buffer.ChannelBuffers.*; import java.util.Date; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ExceptionEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelHandler; public class TimeClientHandler extends SimpleChannelHandler { //这个动态的缓存是能够根据需要增加容量的 ChannelBuffer 。 //这在我们不知道消息的大小的时候,非常有用。 private final ChannelBuffer buf = dynamicBuffer(); @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) { ChannelBuffer m = (ChannelBuffer)e.getMessage(); //首先,所有收到的数据都必须汇聚到 buf中。 buf.writeBytes(m); //然后,这个handler必须检查buf中是否有足够的数据--在这里是4个字 //节。接下来按业务逻辑处理。否则,Netty继续在后续数据到达时调用messageReceived方法,直至最终收集到4个字节。 if(buf.readableBytes()>=4) { long currentTimeMillis=buf.readInt()*1000L; System.out.println(new Date(currentTimeMillis)); e.getChannel().close(); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) { e.getCause().printStackTrace(); e.getChannel().close(); } }