2 q502691450 q502691450 于 2014.05.26 13:29 提问

netty长连接服务器断开后,客户端如何重新连接

private final static Logger logger = LoggerFactory.getLogger(ResourceStatusReceiver.class);

private static Bootstrap b = new Bootstrap(); 


public static void start() throws Exception { 


    EventLoopGroup workerGroup = new NioEventLoopGroup(); 


    try { 

// b = new Bootstrap(); // (1)
b.group(workerGroup); // (2)
b.channel(NioSocketChannel.class); // (3)
b.option(ChannelOption.SO_KEEPALIVE, true); // (4)
b.option(ChannelOption.ALLOW_HALF_CLOSURE,true);

        b.handler(new ChannelInitializer<SocketChannel>() { 


            @Override 
            protected void initChannel(SocketChannel ch) throws Exception { 


                ChannelPipeline pipeline = ch.pipeline(); 


                // 以("\n")为结尾分割的 解码器 
                pipeline.addLast("framer", new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, Delimiters.lineDelimiter())); 


                // 字符串解码 和 编码 
                pipeline.addLast("decoder", new StringDecoder()); 
                pipeline.addLast("encoder", new StringEncoder()); 


                // 自己的逻辑Handler 
                pipeline.addLast("handler", new SimpleChannelInboundHandler() { 


                    @Override 
                    protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception { 


                        logger.debug("接收到的状态内容:" + o.toString()); 



                    } 

                    @Override 
                    public void channelRegistered(ChannelHandlerContext ctx) throws Exception { 


                        logger.debug("连接成功"); 
                    } 


                    @Override 
                    public void channelUnregistered(ChannelHandlerContext ctx) throws Exception { 



                    } 


                    @Override 
                    public void channelActive(ChannelHandlerContext ctx) throws Exception { 


                        logger.debug("======channelActive========"); 
                    } 


                    @Override 
                    public void channelInactive(ChannelHandlerContext ctx) throws Exception { 


                        logger.debug("======channelInactive========"); 
                    } 


                    @Override 
                    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { 
                        logger.debug("======exceptionCaught========"+cause.getMessage());                         

                    } 
                }); 

            } 
        }); 
        // Start the client. 
        ChannelFuture f = b.connect("127.0.0.1",8060).sync(); // (5) 
        // Wait until the connection is closed. 
        f.channel().closeFuture().sync(); 
    }finally{ 
            workerGroup.shutdownGracefully(); 
    } 
} 
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!