当前位置: 首页 > 知识库问答 >
问题:

Netty UDP兼容解码器

凌博实
2023-03-14

在使用非阻塞数据报信道时,哪些解码器可以安全地扩展?本质上,我需要从*ByteBuff到String,然后我有代码将该字符串转换为对象。此外,这将需要完成与解码器。从对象到字符串,最后返回到*ByteBuff。

我尝试过扩展ByteToMessageDecoder,但是Netty似乎从来没有调用decode方法。所以我不确定这主要是数据报信道的问题还是我对解码器的原理理解的问题...

public class Initializer extends ChannelInitializer<NioDatagramChannel> {

    private SimpleChannelInboundHandler<Packet> sipHandler;

    public Initializer(SimpleChannelInboundHandler<Packet> handler) {
        sipHandler = handler;
    }

    @Override
    protected void initChannel(NioDatagramChannel chan) throws Exception {    
        ChannelPipeline pipe = chan.pipeline();    
        pipe.addLast("decoder", new SipDecoder());    
        pipe.addLast("handler", sipHandler);    
        pipe.addLast("encoder", new SipEncoder());
    }

}

我的解码器的开头:

public class SipDecoder extends ByteToMessageDecoder {

    private Packet sip;    

    @Override
    protected void decode(ChannelHandlerContext context, ByteBuf byteBuf, List<Object> objects) throws Exception {   
        System.out.println("got hit...");    
        String data = new String(byteBuf.array());    
        sip = new Packet();    
        // [...]
    }

}

共有1个答案

谢嘉
2023-03-14

为了处理DatagramPacket,您需要使用MessageToMessageDecoder,因为ByteToMessageDecoder只适用于ByteBuf。

 类似资料:
  • 问题内容: 我的页面宽50/50。左半部分具有六个div的行。条件: 6个正方形必须始终保持正方形。 前5个正方形应在右边留有边距/填充以进行分隔。 所有六个正方形必须保持同一行。如果我可以使它正常工作,那么我可以对较小的视口中的响应度进行必要的调整。 跨浏览器兼容最新版本的chrome和firefox。 L1 L2 L3 L4 L5 L6 问题答案: The main trick here is

  • 本章提供了有关 版本控制 章节中提供的破坏性和非破坏性修改列表的详细说明。 什么算是一个破坏性(不兼容)的变化并没有明确的定义。本指南应该被视为指示性的,而不是每一种可能变化的全面清单。 这里列出的规则只涉及客户端兼容性。预期API生产者明白在部署方面的要求,包括实现细节的变化。 一般目的是,服务端更新到一个新的minor版本或patch版本不该破坏客户端。可预期的破坏类型有: 源代码兼容性:针对

  • 语言补丁 Array.isArray Object.assign JSON.stringify console-polyfill Object.keys Object.is Array.prototype.forEach Function.prototype.bind 或者直接使用https://polyfill.io/ 提供的动态补丁方案 <script src="https://cdn.pol

  • Markdown 语法的目标是:成为一种适用于网络的书写语言。 Markdown 不是想要取代 HTML,甚至也没有要和它相近,它的语法种类很少,只对应 HTML 标记的一小部分。Markdown 的构想不是要使得 HTML 文档更容易书写。在我看来, HTML 已经很容易写了。Markdown 的理念是,能让文档更容易读、写和随意改。HTML 是一种发布的格式,Markdown 是一种书写的格式

  • 你可以直接在 Markdown 文件里写 Vue 代码,它将被执行。我们可以用它写一些 Vue 的 Demo 或者示例代码。 基础用法 在 index.html 里引入 Vue。 <script src="//cdn.jsdelivr.net/npm/vue"></script> <script src="//cdn.jsdelivr.net/npm/docsify"></script> <!-

  • 本文向大家介绍asp实现的sha1加密解密代码(和C#兼容),包括了asp实现的sha1加密解密代码(和C#兼容)的使用技巧和注意事项,需要的朋友参考一下 在百度找的几个asp sha1(vbs写的)加密结果和asp.net的sha1加密结果不一样,asp.net sha1加密完后是40位,网上找的asp sha1加密是64位,还以为asp.net做了截取(如网上的asp的md5机密和asp.ne