Netty实例-简单的服务端-客户端实现,注释详细

Netty实例-简单的服务端-客户端实现,注释详细

 原文  http://blog.csdn.net/jiangtao_st/article/details/38116593

1.Netty Server端实现

/**
 * 
 * <p>
 * 	Netty Server Simple
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月7日
 * @version: V1.0
 */

public class NettyServer {
  
  private final int port = 8989;
  
  @Test
  public 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 block
      e.printStackTrace();
    }finally{
      //退出,释放线程等相关资源
      bossGroup.shutdownGracefully();
      workerGroup.shutdownGracefully();
    }

    
  }

  private class ChildChannelHandler extends ChannelInitializer<SocketChannel>{
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {

      ch.pipeline().addLast(new SimpleServerHandler());
    }
  }
  
}

 

2.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>() {

        @Override
        protected 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 block
      e.printStackTrace();
    }finally{
      //关闭,释放线程资源
      group.shutdownGracefully();
    }
  }
  
  @Test
  public void nettyClient(){
    
    new NettyClient().connect(8989, "localhost");
  }
  
}

 

3.ServerHander 处理程序

/**
 * 
 * <p>
 * 	Server接收消息处理Handler
 * </p>
 * 
 * @author 卓轩
 * @创建时间:2014年7月7日
 * @version: V1.0
 */
public class SimpleServerHandler extends ChannelInboundHandlerAdapter {

  @Override
  public 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);
  
  }
}

 

4.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);
  }

  @Override
  public void channelActive(ChannelHandlerContext ctx) throws Exception {
    
    ctx.writeAndFlush(clientMessage);
    
  }

  @Override
  public 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);
  }

  @Override
  public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {

    ctx.close();
  }
}

 

猜你喜欢

转载自stephen830.iteye.com/blog/2118259
今日推荐