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

Posted Brenda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
    	}
    }


以上是关于Netty实例-简单的服务端-client实现,凝视具体的主要内容,如果未能解决你的问题,请参考以下文章

基于netty的文件上传下载组件

Netty实战:设计一个IM框架就这么简单!

Spring Cloud Eureka 源码分析 —— Client端

Netty学习之Demo搭建

即时通讯:服务端SpringBoot+Netty-Socket.io,客户端Socket.io.js+Java版Socket.io-client

RPC---- 基于Netty实现的RPC