网络编程复习(七):Netty解决拆包粘包问题--分隔符方式
来源:互联网 发布:java荣誉勋章神兵天降 编辑:程序博客网 时间:2024/05/17 22:24
在Netty中实现了2种拆包方式:分隔符方式,定长方式,这里介绍分隔符方式。实现起来很简单:
server:
package 网络编程_netty2;import io.netty.bootstrap.ServerBootstrap;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;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.DelimiterBasedFrameDecoder;import io.netty.handler.codec.string.StringDecoder;public class Server {private int port;public Server(int port){this.port = port;}public void run()throws Exception{EventLoopGroup boss = new NioEventLoopGroup();EventLoopGroup workers = new NioEventLoopGroup();ServerBootstrap bootstrap = new ServerBootstrap();bootstrap.group(boss, workers) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() {@Overridepublic void initChannel(SocketChannel ch) throws Exception {ByteBuf buf = Unpooled.copiedBuffer("$_".getBytes());ch.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, buf));ch.pipeline().addLast(new StringDecoder());ch.pipeline().addLast(new ServerHandler());}});ChannelFuture f = bootstrap.bind(port).sync();f.channel().closeFuture().sync();workers.shutdownGracefully();boss.shutdownGracefully();}public static void main(String[] args) throws Exception {new Server(8888).run();}}serverHandler:
package 网络编程_netty2;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelHandlerAdapter;import io.netty.channel.ChannelHandlerContext;public class ServerHandler extends ChannelHandlerAdapter{@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {cause.printStackTrace();ctx.close();}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {String request = (String) msg;System.out.println(request);ctx.writeAndFlush(Unpooled.copiedBuffer("你好,服务端已经接收到你的请求$_".getBytes()));}}
client
package 网络编程_netty2;import io.netty.bootstrap.Bootstrap;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.SocketChannel;import io.netty.channel.socket.nio.NioSocketChannel;import io.netty.handler.codec.DelimiterBasedFrameDecoder;import io.netty.handler.codec.string.StringDecoder;public class client {public static void main(String[] args) throws InterruptedException {EventLoopGroup worker = new NioEventLoopGroup();Bootstrap bootstrap = new Bootstrap();bootstrap.group(worker) .channel(NioSocketChannel.class) .handler(new ChannelInitializer<SocketChannel>() {@Overridepublic void initChannel(SocketChannel ch) throws Exception {ByteBuf buf = Unpooled.copiedBuffer("$_".getBytes());ch.pipeline().addLast(new DelimiterBasedFrameDecoder(1024, buf));ch.pipeline().addLast(new StringDecoder());ch.pipeline().addLast(new ClientHandler());}});ChannelFuture f = bootstrap.connect("127.0.0.1", 8888).sync();f.channel().writeAndFlush(Unpooled.wrappedBuffer("aaa$_".getBytes()));f.channel().writeAndFlush(Unpooled.wrappedBuffer("bbbb$_".getBytes()));f.channel().writeAndFlush(Unpooled.wrappedBuffer("ccccccc$_".getBytes()));f.channel().closeFuture().sync();worker.shutdownGracefully();}}clientHandler:
package 网络编程_netty2;import io.netty.channel.ChannelHandlerAdapter;import io.netty.channel.ChannelHandlerContext;public class ClientHandler extends ChannelHandlerAdapter{@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {cause.printStackTrace();ctx.close();}@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {String response = (String) msg;System.out.println(response);}}这里使用"$_"为分隔符。
阅读全文
0 0
- 网络编程复习(七):Netty解决拆包粘包问题--分隔符方式
- 网络编程复习(八):Netty解决拆包粘包问题--定长方式
- Netty解决粘包问题(1) 自定义分隔符
- 网络编程复习(六):Netty入门Demo
- 网络编程复习(九):Netty的编解码技术
- Netty学习之分隔符解决TCP粘包
- java网络编程之Netty实战数据通信(七)
- netty网络编程
- Netty网络编程详解
- Netty解决粘包拆包问题
- Netty 解决粘包拆包问题
- Netty的分隔符解码器的使用
- <netty权威指南>笔记-分隔符解码器处理半包问题
- awk编程——调用方式和分隔符
- Netty学习-Java网络编程
- Netty-1、网络编程基本概念
- 网络编程复习
- C++网络编程复习
- elasticsearch 核心概念
- js json回车 处理特殊字符,textArea 换行处理
- Java 接口 详解
- python代码:图片鉴黄
- 23种设计模式
- 网络编程复习(七):Netty解决拆包粘包问题--分隔符方式
- erlang lists 系列函数功能与用法详解
- 如何实现WordPress自动检查文章是否被百度收录
- echarts图例分页显示
- 财务报表模块概述
- VMware Workstation虚拟机平台安装Linux-Ubuntu16.04图文教程
- pl- 配置远程打印机,用linux命令行打印
- 从相册读取大文件dataWithContentsOfURL?
- SpringMVC的Java配置替换spring-mvc.xml文件