博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
netty5.0 固定长度解决码 FixedLengthFrameDecoder
阅读量:6331 次
发布时间:2019-06-22

本文共 2757 字,大约阅读时间需要 9 分钟。

  hot3.png

import io.netty.bootstrap.ServerBootstrap;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.NioServerSocketChannel;import io.netty.handler.codec.FixedLengthFrameDecoder;import io.netty.handler.codec.string.StringDecoder;import io.netty.handler.logging.LogLevel;import io.netty.handler.logging.LoggingHandler;/** * 固定长度解决码 FixedLengthFrameDecoder * @author  * */public class EchoServer {		public void bind(int port) {		 // 服务器线程组 用于网络事件的处理 一个用于服务器接收客户端的连接       // 另一个线程组用于处理SocketChannel的网络读写		EventLoopGroup bossGroup = new NioEventLoopGroup();		EventLoopGroup workerGroup = new NioEventLoopGroup();				try {			 //NIO服务器端的辅助启动类 降低服务器开发难度			ServerBootstrap b = new ServerBootstrap();			b.group(bossGroup, workerGroup)			 .channel(NioServerSocketChannel.class)    // 类似NIO中serverSocketChannel			 .option(ChannelOption.SO_BACKLOG, 100)   // 配置TCP参数			 .handler(new LoggingHandler(LogLevel.INFO))			 .childHandler(new ChannelInitializer
() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new FixedLengthFrameDecoder(20)); //固定长度解决码 ch.pipeline().addLast(new StringDecoder());  //设置字符串解码器 自动将报文转为字符串 ch.pipeline().addLast(new EchoServerHandler()); }  } ); // 最后绑定I/O事件的处理类 // 服务器启动后 绑定监听端口 同步等待成功 主要用于异步操作的通知回调 回调处理用的ChildChannelHandler ChannelFuture f = b.bind(port).sync(); System.out.println("The time Server is start : "+port);           // 等待服务端监听端口关闭 f.channel().closeFuture().sync(); } catch (InterruptedException e) { e.printStackTrace(); } finally{ // 优雅退出 释放线程池资源 workerGroup.shutdownGracefully();           bossGroup.shutdownGracefully();           System.out.println("服务器优雅的释放了线程资源..."); } } public static void main(String[] args) { int port = 8080; if(null != args && args.length > 0) { try { port = Integer.parseInt(args[0]); } catch (NumberFormatException e) { e.printStackTrace(); } } new EchoServer().bind(port); }}
import io.netty.channel.ChannelHandlerAdapter;import io.netty.channel.ChannelHandlerContext;public class EchoServerHandler extends ChannelHandlerAdapter {	@Override	public void channelRead(ChannelHandlerContext ctx, Object msg)			throws Exception {		System.out.println("receive client : ["+ msg + "]");	}	@Override	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause)			throws Exception {		cause.printStackTrace();		ctx.close();	}	}

在windows中打开cmd窗口,输入telnet localhost 8080连接服务器,然后输入"this is kobe"服务端显示结果

转载于:https://my.oschina.net/chaun/blog/391988

你可能感兴趣的文章
[Unity Editor] 清理Prefab使用的特定组件
查看>>
阿里云API、SDK和CLI应用实践方案
查看>>
你的数据安全吗? 点击“同意”,你的隐私已经泄漏...
查看>>
GO从入门到进阶教程系列 - 研发高性能ORM框架操作mysql篇
查看>>
看一名 KDE 开发者如何使用 C++17 为项目提升巨大速度
查看>>
【对讲机的那点事】一图带你看透公网集群的五大突破
查看>>
WPF中的动画——(六)演示图板
查看>>
【WPF】ListBox嵌套与事件冒泡
查看>>
神仙打架?苹果短暂撤销 Facebook 和 Google 的企业证书
查看>>
dotnet检测类型是否为泛型
查看>>
【对讲机的那点事】公网对讲机的物联卡你了解吗?
查看>>
ASP.NET Core MVC 设计模式 - ASP.NET Core 基础教程 - 简单教程,简单编程
查看>>
IPTables五----ebtables
查看>>
C# 实现寻峰算法的简单优化(包含边峰,最小峰值,峰距)
查看>>
从PRISM开始学WPF(二)Prism?
查看>>
java源码-WeakHashMap
查看>>
java ThreadLocal的理解
查看>>
Django 的HttpRequest对象与HttpResponse对象
查看>>
LVS 机制与调度算法(详细)
查看>>
库曼机器人完成数百万天使轮融资,投资方为安乾投资
查看>>