• Netty实例-简单的服务端-client实现,凝视具体


           书籍推荐:                                       实例代码 : http://download.csdn.net/detail/jiangtao_st/7677503

    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();
      	}
      }


  • 相关阅读:
    压力测试工具
    查找数据库阻塞和死锁
    10个jquery动画菜单:插件和教程
    整理出来的一些Android基础知识
    架构设计
    jQuery页面图片伴随滚动条逐渐显示
    网架构学习笔记
    win7任务栏QQ影音的最近播放记录清理
    修复CPU断针
    让thinkpad更安静——控制风扇转速,解决tpfancontrol导致的关机、重启、黑屏
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5238006.html
Copyright © 2020-2023  润新知