首页>代码>Netty框架整合五种编解码示例>/netty-endecode/src/main/java/com/example/demo/client2/DelimiterbaseClient.java
package com.example.demo.client2;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.codec.string.StringDecoder;

/**
 * DelimiterBasedFrameDecoder半包处理
 * @author 程就人生
 * @date 2019年10月26日
 */
public class DelimiterbaseClient {

    public void connect(int port, String host){
        //客户端Nio线程组
        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 { 
                	//以特殊符号作为一个包的结束符
                    ByteBuf delimiter = Unpooled.copiedBuffer("$_".getBytes());
                    ch.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, delimiter));
                    //字符串转对象
                    ch.pipeline().addLast(new StringDecoder());               
                    ch.pipeline().addLast(new DelimiterbaseClientHandler());
             
                }
            });
            
            //建立连接
            ChannelFuture channelFuture = bootstrap.connect(host, port);
            //等待服务端监听端口关闭
            channelFuture.channel().closeFuture().sync();
            
        }catch(Exception e){
            e.printStackTrace();
        }finally{
                        //优雅退出
            group.shutdownGracefully();
        }
    }
    
    public static void main(String[] argo){
        new DelimiterbaseClient().connect(8080, "localhost");
    }
}
最近下载更多
jaonsang  LV25 2022年4月8日
skipple3  LV39 2021年5月9日
wxm4252  LV12 2020年12月18日
zhengfei0421  LV6 2020年6月2日
mrj1314  LV7 2019年11月24日
Rommel  LV27 2019年10月28日
最代码官方  LV168 2019年10月26日
最近浏览更多
1909741473  LV8 2月19日
sunlzh888888  LV29 2023年9月12日
暂无贡献等级
yinyun1985  LV14 2022年10月31日
youwuzuichen  LV10 2022年10月28日
1358849392  LV21 2022年10月21日
Killah  LV9 2022年9月5日
no1xijin 2022年8月1日
暂无贡献等级
林间听风  LV10 2022年4月11日
xp95323  LV14 2022年1月25日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友