packagecom.mypractice.netty.server;importio.netty.buffer.ByteBuf;importio.netty.buffer.Unpooled;importio.netty.channel.ChannelFutureListener;importio.netty.channel.ChannelHandlerContext;importio.netty.channel.ChannelInboundHandlerAdapter;importio.netty.channel.ChannelOption;importio.netty.util.CharsetUtil;public class EchoServerHandler extendsChannelInboundHandlerAdapter {
@Overridepublic void channelActive(ChannelHandlerContext ctx) throwsException {
System.out.println("Server 受到client连接:"+ctx.toString());
System.out.println(ctx.channel().config().getWriteBufferHighWaterMark());
System.out.println(ctx.channel().config().getWriteBufferLowWaterMark());int size =ctx.channel().unsafe().outboundBuffer().size();
System.out.println("size1:" +size);super.channelActive(ctx);
}
@Overridepublic voidchannelRead(ChannelHandlerContext ctx, Object msg) {
ByteBuf in=(ByteBuf) msg;
in.writeBytes("hello iam client".getBytes());
System.out.println("Server received: " +in.toString(CharsetUtil.UTF_8));
ctx.write(in);
}
@Overridepublic voidchannelReadComplete(ChannelHandlerContext ctx) {
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER)
.addListener(ChannelFutureListener.CLOSE);//将未决消息冲刷到远程节点,并且关闭该Channel
}
@Overridepublic void channelWritabilityChanged(ChannelHandlerContext ctx) throwsException {//TODO Auto-generated method stub
System.out.println("channge:" +ctx.channel().isWritable());int size =ctx.channel().unsafe().outboundBuffer().size();
System.out.println("size:" +size);super.channelWritabilityChanged(ctx);
}
@Overridepublic voidexceptionCaught(ChannelHandlerContext ctx,
Throwable cause) {
cause.printStackTrace();
ctx.close();
}
}