Netty入门之 TimeServer && TimeClient
来源:互联网 发布:ubuntu 12.04 输入法 编辑:程序博客网 时间:2024/06/05 18:16
1.TimeServer
/** * Created by ju on 2017-06-09. */public class TimeServer { public void bind(int port) { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024) .childHandler(new ChildChannelHandler()); //绑定端口,同步等待成功 ChannelFuture f = b.bind(port).sync(); //等待服务器端链路关闭之后main函数退出 f.channel().closeFuture().sync(); } catch (Exception e) { e.printStackTrace(); }finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } private class ChildChannelHandler extends ChannelInitializer<SocketChannel> { protected void initChannel(SocketChannel socketChannel) throws Exception { socketChannel.pipeline().addLast(new TimeServerHandler()); } } public static void main(String[] args) { int port = 8080; if(args!=null && args.length > 0){ port = Integer.valueOf(args[0]); } new TimeServer().bind(port); }}
2.TimeServerHandler
/** * Created by ju on 2017-06-09. */public class TimeServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf buf = (ByteBuf)msg; byte [] req = new byte[buf.readableBytes()]; buf.readBytes(req); String body = new String(req,"UTF-8"); System.out.println("The time server receive order : "+ body); String currentTime = "QUERY TIME ORDER".equalsIgnoreCase(body)? new Date(System.currentTimeMillis()).toString() : "BAD ORDER"; ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes()); ctx.write(resp); } @Override public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { ctx.flush(); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { ctx.close(); }}
3.TimeClient
/** * Created by ju on 2017-06-09. */public class TimeClient { public void connect(int port, String host) { EventLoopGroup group = new NioEventLoopGroup(); Bootstrap b = new Bootstrap(); b.group(group).channel(NioSocketChannel.class).option(ChannelOption.TCP_NODELAY, true) .handler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { socketChannel.pipeline().addLast(new TimeClientHandler()); } }); try { ChannelFuture f = b.connect(host, port).sync(); //等待客户端链路关闭 f.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { int port = 8080; if(args !=null && args.length > 0 ){ port = Integer.valueOf(args[0]); } new TimeClient().connect(port,"127.0.0.1"); }}
4.TimeClientHandler
/** * Created by ju on 2017-06-09. */public class TimeClientHandler extends ChannelInboundHandlerAdapter{ private static final Logger logger = Logger.getLogger(TimeClientHandler.class.getName()); private final ByteBuf firstMessage; public TimeClientHandler(ByteBuf firstMessage) { this.firstMessage = firstMessage; } public TimeClientHandler() { byte [] req = "QUERY TIME ORDER".getBytes(); firstMessage = Unpooled.buffer(req.length); firstMessage.writeBytes(req); } @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { ctx.writeAndFlush(firstMessage); } @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ByteBuf byteBuf = (ByteBuf) msg; byte [] req = new byte[byteBuf.readableBytes()]; byteBuf.readBytes(req); String body = new String(req,"UTF-8"); System.out.println("Now is : "+ body); } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { logger.warning("Unexpected expection from downstream"+cause.getMessage()); ctx.close(); }}
这些代码来源于《Netty权威指南》 上的Netty入门代码,对Netty底层细节还不了解,只是接触Netty开发框架。
阅读全文
0 0
- Netty入门之 TimeServer && TimeClient
- NIO编程 TimeServer && TimeClient
- Linux 环境下 socket通信 TimeServer TimeClient
- netty实现TimeServer服务
- Netty权威指南-NIO实现TimeClient客户端源代码
- Netty权威指南-NIO实现TimeServer服务器端源代码
- Netty权威指南之Netty入门应用
- Netty入门之-http文件服务器
- Netty入门应用之第一个netty项目
- 【Netty入门】Netty概述
- Netty权威指南之NIO入门
- netty探索之入门前言篇
- Netty入门二 之解编码
- Netty入门三之最佳实践
- Netty 入门
- Netty入门
- Netty入门
- netty入门
- POJ1611:The Suspects
- 欢迎使用CSDN-markdown编辑器
- php_常用方法
- USACO-Section1.4 Arithmetic Progressions
- Morris二叉树遍历算法
- Netty入门之 TimeServer && TimeClient
- java-SE-8
- samba
- CC2541 之CCDEBUG软件终究修复教程
- Kaggle 神器 xgboost
- 网站静态化处理--总述(1)
- VS2015数据断点设置方法
- HeaderGridView——可以添加HeaderView的GridView,已修复HeaderView偏移的BUG
- 自定义java中BeanUtils的赋值和获取方法实现.