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