`

netty自定义解码器

阅读更多
ByteToMessageDecoder

public class CustomDecoder extends ByteToMessageDecoder {

protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List<Object> list) throws Exception {
        try {
            ByteBuffer buffer = buf.nioBuffer();
            int length = buffer.limit();
            byte[] data = new byte[length];
            buffer.get(data);
           
            String json = new String(data, "utf-8");
            System.out.println("json:"+json);
            if(!json.startsWith("{")) {
            return ;
            }
            User user = JSON.parseObject(json, User.class);
            list.add(user); //解码成User对象,从ByteBuf里读取字节流
        } catch (Exception e) {
        e.printStackTrace();
        }
}
}

public class NettyServer {
private int port=8088;

public static void main(String[] args) {
NettyServer server = new NettyServer();
server.run();
}

void run() {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
public void initChannel(SocketChannel ch) {
ChannelPipeline p =ch.pipeline();
p.addLast(new CustomDecoder()); //handler里的Object msg可以转换成解码后的对象
p.addLast(new SeverHandler());
}}
).option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
ChannelFuture f = b.bind(port).sync();
f.channel().closeFuture().sync();
}catch(Exception e) {
e.printStackTrace();
}finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}

public class SeverHandler extends ChannelInboundHandlerAdapter {
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.writeAndFlush("this is a test!");
User user = (User)msg;
System.out.println("user: "+JSON.toJSONString(user));
}
}
0
0
分享到:
评论

相关推荐

    Netty4编写服务器客户端,自定义编解码,发送自定义消息

    这个项目不仅展示了如何使用 Netty 实现网络通信,还演示了自定义编解码器的重要性,这对于处理各种不同协议和数据格式的网络应用来说是非常关键的。通过这种方式,我们能够灵活地适应不同的消息结构,从而实现高度...

    netty自定义数据包协议

    Netty 是一个高性能、异步...总结来说,通过在Netty中自定义解码器和编码器,我们可以有效地处理网络通信中的拆包和粘包问题,确保数据的正确传输和解析。同时,理解并掌握这个过程对于开发高性能的网络应用至关重要。

    Netty+自定义Protobuf编解码器

    综上所述,"Netty+自定义Protobuf编解码器"的主题涉及到如何在Netty框架下创建一个能够处理多种protobuf消息类型的编解码器,这将极大地增强网络通信的灵活性。通过自定义编解码器,我们可以根据实际需求发送和接收...

    netty服务器解析16进制数据

    分析这个代码,我们可以看到Netty如何创建服务器、设置管道、以及如何定义和使用自定义的解码器和编码器来处理16进制数据。 通过上述步骤,Netty服务器可以轻松地解析16进制数据,从而支持各种网络协议,无论它们是...

    Netty中Marshalling编解码自定义栈应用

    本文将深入探讨 Marshalling 编解码器在 Netty 中的应用及其自定义实现。 Marshalling 是一种序列化技术,它能够将 Java 对象转换为字节流,便于在网络中传输,同时也可以将字节流恢复为原来的对象。在 Netty 中,...

    netty解析报文,解决粘包拆包

    注:下载前请查看本人博客文章,看是否...里面包含模拟TCP客户端发送报文工具,硬件厂商提供的协议,服务端(springboot+netty)解析报文源码,源码里整合了redis,不需要可自行删除,如有需要客户端代码,可联系我。

    netty-frameDecoder:换行符,自定义分隔符,定长度解码器

    netty-frameDecoder换行符,自定义分隔符,定长度解码器说明使用tcp传送数据,由于缓存区大小的设置,MSS的tcp分段等因素,数据传输时会出现TCP粘包/拆包的问题。但是底层的tcp无法理解上层的业务数据,所以在底层也...

    Netty之自定义编解码器.zip

    本压缩包文件"Netty之自定义编解码器.zip"着重讨论的是如何在Netty中自定义编解码器,这是Netty框架中的一个重要组成部分,用于将应用程序数据转换为网络传输的数据格式,以及将接收到的网络数据转换回应用程序可以...

    Netty学习笔记_Springboot实现自定义协议.docx

    Netty学习笔记_Springboot实现自定义协议 ...我们首先定义了一个自定义协议的类,然后实现了一个编码器和解码器来处理网络通信。最后,我们使用这些编码器和解码器在服务端启动类中来处理网络通信。

    基于Protostuff实现的Netty编解码器.docx

    然而,为了在Netty中使用这些序列化和反序列化功能,我们需要创建自定义的编解码器。Netty提供了一些基础类来帮助我们实现这一目标。 对于编码器,我们继承`MessageToByteEncoder`。这个类期望我们实现`encode`方法...

    netty编码器,解码器实例

    // 自定义解码器 public class CustomMessageDecoder extends ByteToMessageDecoder { @Override protected void decode(ChannelHandlerContext ctx, ByteBuf in, List&lt;Object&gt; out) throws Exception { if (in....

    Netty4.0学习笔记系列之五:自定义通讯协议

    Netty提供了许多预定义的编码器和解码器,如ByteBufDecoder和ByteBufEncoder,它们能够方便地与ByteBuf(Netty的缓冲区)进行交互。对于自定义协议,你可能需要继承这些基础类,或者使用composite编码器/解码器,...

    93个netty高并发教学视频下载.txt

    86_Netty自定义编解码器与TCP粘包拆包问题;87_Netty编解码器执行流程深入分析;88_ReplayingDecoder源码分析与特性解读;89_Netty常见且重要编解码器详解;90_TCP粘包与拆包实例演示及分析;91_Netty自定义协议与...

    Netty 框架学习 —— 编解码器框架(csdn)————程序.pdf

    在实际应用中,Netty的编解码器可以灵活组合,以支持各种网络协议,如HTTP、FTP、TCP/UDP协议的实现,甚至是自定义的通信协议。解码器的选择和设计取决于具体的应用需求,例如数据的大小、格式以及协议的复杂性。 ...

    基于netty5的自定义协议Demo

    在Netty中,自定义协议的实现主要涉及到两个关键组件:编码器(Encoder)和解码器(Decoder)。编码器负责将应用层的数据转换为网络传输的数据格式,解码器则负责将接收到的网络数据还原为应用层能理解的格式。在这...

    基于java序列化的Netty编解码技术

    4. **Netty的自定义编解码器**:除了使用内置的`SerializationCodec`,Netty还支持自定义编解码器,可以根据业务需求实现`MessageToByteEncoder`和`ByteToMessageDecoder`接口,以更灵活的方式处理数据编码和解码。...

    Netty精粹之TCP粘包拆包问题

    1. **ByteToMessageDecoder**:该类是Netty提供的一个编解码器,用于从字节数组中解码出消息对象。它可以配合自定义的逻辑来处理粘包和拆包问题。 - **示例**:可以通过重写`decode()`方法来自定义解码逻辑,例如...

    03-04-10-Netty编解码的艺术1

    无论是内置的编解码器,如ByteToMessageDecoder和MessageToByteEncoder,还是用户自定义的编码器,都是Netty高效通信的关键组成部分。 通过本章的学习,读者将深入理解Netty如何处理网络通信中的数据问题,并掌握...

    netty案例,netty4.1基础入门篇九《自定义编码解码器,处理半包、粘包数据》源码

    netty案例,netty4.1基础入门篇九《自定义编码解码器,处理半包、粘包数据》源码 ...

Global site tag (gtag.js) - Google Analytics