public class ProtoBufClient {
public void connect(int port, String host) throws Exception {
// 配置客户端NIO线程组
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group)
.channel(NioSocketChannel.class)
.option(ChannelOption.TCP_NODELAY, true)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch)
throws Exception {
/*加一个消息长度,由netty自动计算 粘包半包问题*/
ch.pipeline().addLast(new ProtobufVarint32LengthFieldPrepender());
/*负责编码,序列化*/
ch.pipeline().addLast(new ProtobufEncoder());
ch.pipeline().addLast(new ProtoBufClientHandler());
}
});
ChannelFuture f = b.connect(host, port).sync();
f.channel().closeFuture().sync();
} finally {
// 优雅退出,释放NIO线程组
group.shutdownGracefully();
}
}
public static void main(String[] args) throws Exception {
int port = 8080;
new ProtoBufClient().connect(port, "127.0.0.1");
}
}