1、服务端 -- 添加 Handler
pipeline.addLast(new LineBasedFrameDecoder(1024));
pipeline.addLast(new StringEncoder());
pipeline.addLast("handler", new NettyClientHandler());
2、服务端 -- NettyServerHandler
package com.sample.modules.netty;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
public class NettyServerHandler extends ChannelInboundHandlerAdapter{
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
String body = (String)msg;
System.out.println(body);
System.out.println("==========");
}
}
3、客户端 -- 添加 Handler
pipeline.addLast(new LineBasedFrameDecoder(1024));
pipeline.addLast(new StringEncoder());
pipeline.addLast("handler", new NettyClientHandler());
4、客户端 -- NettyClientHandler
package com.sample.modules.netty;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
public class NettyClientHandler extends ChannelInboundHandlerAdapter{
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
for (int i = 0; i < 100; i++) {
String str = "QUERY TIME ORDER" + i + "\r\n";
ByteBuf message = Unpooled.buffer(str.getBytes().length);
message.writeBytes(str.getBytes());
ctx.writeAndFlush(message);
}
}
}
5、源码分析
继承 ByteToMessageDecoder 类,实现 decode 方法,根据换行符,来返回完整的包