Netty5.0用法
Maven坐标
<dependencies> <!-- https://mvnrepository.com/artifact/io.netty/netty-all --> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>5.0.0.Alpha2</version> </dependency>
<!-- https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling --> <dependency> <groupId>org.jboss.marshalling</groupId> <artifactId>jboss-marshalling</artifactId> <version>1.3.19.GA</version> </dependency> <!-- https://mvnrepository.com/artifact/org.jboss.marshalling/jboss-marshalling-serial --> <dependency> <groupId>org.jboss.marshalling</groupId> <artifactId>jboss-marshalling-serial</artifactId> <version>1.3.18.GA</version> <scope>test</scope> </dependency>
</dependencies> |
创建服务器端
class ServerHandler extends ChannelHandlerAdapter { /** * 当通道被调用,执行该方法 */ @Override publicvoid channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { // 接收数据 String value = (String) msg; System.out.println("Server msg:" + value); // 回复给客户端 “您好!” String res = "好的..."; ctx.writeAndFlush(Unpooled.copiedBuffer(res.getBytes())); }
}
publicclass NettyServer {
publicstaticvoid main(String[] args) throws InterruptedException { System.out.println("服务器端已经启动...."); // 1.创建2个线程,一个负责接收客户端连接, 一个负责进行 传输数据 NioEventLoopGroup pGroup = new NioEventLoopGroup(); NioEventLoopGroup cGroup = new NioEventLoopGroup(); // 2. 创建服务器辅助类 ServerBootstrap b = new ServerBootstrap(); b.group(pGroup, cGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024) // 3.设置缓冲区与发送区大小 .option(ChannelOption.SO_SNDBUF, 32 * 1024).option(ChannelOption.SO_RCVBUF, 32 * 1024) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protectedvoid initChannel(SocketChannel sc) throws Exception { sc.pipeline().addLast(new StringDecoder()); sc.pipeline().addLast(new ServerHandler()); } }); ChannelFuture cf = b.bind(8080).sync(); cf.channel().closeFuture().sync(); pGroup.shutdownGracefully(); cGroup.shutdownGracefully();
}
}
|
创建客户端
class ClientHandler extends ChannelHandlerAdapter {
/** * 当通道被调用,执行该方法 */ @Override publicvoid channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { // 接收数据 String value = (String) msg; System.out.println("client msg:" + value); }
}
publicclass NettyClient {
publicstaticvoid main(String[] args) throws InterruptedException { System.out.println("客户端已经启动...."); // 创建负责接收客户端连接 NioEventLoopGroup pGroup = new NioEventLoopGroup(); Bootstrap b = new Bootstrap(); b.group(pGroup).channel(NioSocketChannel.class).handler(new ChannelInitializer<SocketChannel>() { @Override protectedvoid initChannel(SocketChannel sc) throws Exception { sc.pipeline().addLast(new StringDecoder()); sc.pipeline().addLast(new ClientHandler()); } }); ChannelFuture cf = b.connect("127.0.0.1", 8080).sync(); cf.channel().writeAndFlush(Unpooled.wrappedBuffer("itmayiedu".getBytes())); cf.channel().writeAndFlush(Unpooled.wrappedBuffer("itmayiedu".getBytes())); // 等待客户端端口号关闭 cf.channel().closeFuture().sync(); pGroup.shutdownGracefully();
}
} |