Java Netty Handler 程序

服务端定义了2个Handler,第一个Handler处理从客户端接收的数据并传递到第二个Handler。第二个Handler输出并返回给客户端。


1.服务端

package com.learn.netty.handler;



import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;



import java.net.InetSocketAddress;



public class Server {

    public static void main(String[] args) throws Exception {

        ServerBootstrap bootstrap = new ServerBootstrap();

        EventLoopGroup group = new NioEventLoopGroup();

        try {

            bootstrap.group(group);

            bootstrap.channel(NioServerSocketChannel.class)

                    .localAddress(new InetSocketAddress(8888))

                    .childHandler(new ChannelInitializer<SocketChannel>() {

                        @Override

                        protected void initChannel(SocketChannel socketChannel) throws Exception {

                            socketChannel.pipeline().addLast(new Handler1()).addLast(new Handler2());

                        }

                    });

            ChannelFuture future = bootstrap.bind().sync();

            future.channel().closeFuture().sync();

        } finally {

            group.shutdownGracefully().sync();

        }

    }

}


2.服务端Handler1

package com.learn.netty.handler;



import io.netty.buffer.ByteBuf;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelInboundHandlerAdapter;



import java.nio.charset.Charset;



public class Handler1 extends ChannelInboundHandlerAdapter {

    @Override

    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

        ByteBuf buf = (ByteBuf) msg;

        System.out.println("Handler1: " + buf.toString(Charset.defaultCharset()));

        buf.setByte(0, 'J');

        ctx.fireChannelRead(buf); // 下一个Handler

    }

}


3.服务端Handler2

package com.learn.netty.handler;



import io.netty.buffer.ByteBuf;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelInboundHandlerAdapter;



import java.nio.charset.Charset;



public class Handler2 extends ChannelInboundHandlerAdapter {

    @Override

    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

        ByteBuf buf = (ByteBuf) msg;

        System.out.println("Handler2: " + buf.toString(Charset.defaultCharset()));

        ctx.writeAndFlush(buf);

    }

}


4.客户端

package com.learn.netty.handler;





import io.netty.bootstrap.Bootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioSocketChannel;



import java.net.InetSocketAddress;



public class Client {

    public static void main(String[] args) throws Exception {

        Bootstrap bootstrap = new Bootstrap();

        EventLoopGroup group = new NioEventLoopGroup();

        try {

            bootstrap.group(group);

            bootstrap.channel(NioSocketChannel.class)

                    .remoteAddress(new InetSocketAddress("127.0.0.1", 8888))

                    .handler(new ChannelInitializer<SocketChannel>() {

                        @Override

                        protected void initChannel(SocketChannel socketChannel) throws Exception {

                            socketChannel.pipeline().addLast(new ClientHandler());

                        }

                    });

            ChannelFuture future = bootstrap.connect().sync();

            future.channel().closeFuture().sync();

        } finally {

            group.shutdownGracefully().sync();

        }

    }

}


5.客户端Handler

package com.learn.netty.handler;



import io.netty.buffer.ByteBuf;

import io.netty.buffer.Unpooled;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelInboundHandlerAdapter;



import java.nio.charset.Charset;



public class ClientHandler extends ChannelInboundHandlerAdapter {

    @Override

    public void channelActive(ChannelHandlerContext ctx) throws Exception {

        System.out.println("Client: Netty!");

        ctx.writeAndFlush(Unpooled.copiedBuffer("Netty!", Charset.defaultCharset()));

    }



    @Override

    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

        ByteBuf buf = (ByteBuf) msg;

        System.out.println("Client Received: " + buf.toString(Charset.defaultCharset()));

        ctx.close().sync();

    }

}


 

 

展开阅读全文