书籍推荐: 实例代码 : http://download.csdn.net/detail/jiangtao_st/7677503
- Netty Server端实现
/*** * <p>* Netty Server Simple* </p>* * @author 卓轩* @创建时间:2014年7月7日* @version: V1.0*/public class NettyServer {private final int port = 8989;@Testpublic void nettyServer(){EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();try {ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024).childHandler(new ChildChannelHandler());//绑定端口、同步等待ChannelFuture futrue = serverBootstrap.bind(port).sync();//等待服务监听端口关闭futrue.channel().closeFuture().sync();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//退出,释放线程等相关资源bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}}private class ChildChannelHandler extends ChannelInitializer<SocketChannel>{@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new SimpleServerHandler());}}}
- Netty Client 实现
/*** * <p>* NettyClient 实现* </p>* * @author 卓轩* @创建时间:2014年7月7日* @version: V1.0*/ public class NettyClient {public void connect(int port,String host){EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap bootstrap = new Bootstrap();bootstrap.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true).handler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new SimpleClientHandler());}});//发起异步链接操作ChannelFuture channelFuture = bootstrap.connect(host, port).sync();channelFuture.channel().closeFuture().sync();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//关闭,释放线程资源group.shutdownGracefully();}}@Testpublic void nettyClient(){new NettyClient().connect(8989, "localhost");}}
- ServerHander 处理程序
/*** * <p>* Server接收消息处理Handler* </p>* * @author 卓轩* @创建时间:2014年7月7日* @version: V1.0*/ public class SimpleServerHandler extends ChannelInboundHandlerAdapter {@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf buf = (ByteBuf)msg;byte [] req = new byte[buf.readableBytes()];buf.readBytes(req);String message = new String(req,"UTF-8");System.out.println("Netty-Server:Receive Message,"+ message);} }
- ClientHander 处理程序
/*** * <p>* Client Handler* </p>* * @author 卓轩* @创建时间:2014年7月7日* @version: V1.0*/ public class SimpleClientHandler extends ChannelInboundHandlerAdapter {private ByteBuf clientMessage;public SimpleClientHandler() {byte [] req = "Call-User-Service".getBytes();clientMessage = Unpooled.buffer(req.length);clientMessage.writeBytes(req);}@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {ctx.writeAndFlush(clientMessage);}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf buf = (ByteBuf)msg;byte [] req = new byte[buf.readableBytes()];buf.readBytes(req);String message = new String(req,"UTF-8");System.out.println("Netty-Client:Receive Message,"+ message);}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {ctx.close();} }