Netty(7-2)传List
ObjectEchoServer
protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new ObjectEncoder()); p.addLast(new ObjectDecoder(ClassResolvers.cacheDisabled(null))); p.addLast(new ObjectEchoServerHandler()); }
ObjectEchoServerHandler
public class ObjectEchoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ctx.write(msg); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); } }
ObjectEchoClient
protected void initChannel(SocketChannel ch) throws Exception { ChannelPipeline p = ch.pipeline(); p.addLast(new ObjectEncoder()); p.addLast(new ObjectDecoder(ClassResolvers.cacheDisabled(null))); p.addLast(new ObjectEchoClientHandler()); }
ObjectEchoClientHandler
public class ObjectEchoClientHandler extends ChannelInboundHandlerAdapter { private final List<Integer> firstMessage; public ObjectEchoClientHandler() {//每个channel(connection)都会new该handler firstMessage = new ArrayList<Integer>(ObjectEchoClient.SIZE); for (int i = 0; i < ObjectEchoClient.SIZE; i++) { firstMessage.add(Integer.valueOf(i)); } } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { ctx.writeAndFlush(firstMessage); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { //Echo back the received object to the server. ctx.write(msg); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { cause.printStackTrace(); ctx.close(); } }