c# - .NETTY : Second batch of data sent includes the first?

标签 c# .net azure netty

我注意到,当我运行 dotnetty 的解码器时,它包含以前的数据。我不知道为什么,但第一个数据包(数据)通过得很好,客户端由于某种原因发送的第二个数据位包括数据的两部分,即先前处理的数据。

我检查了客户端,客户端没有发送它们,服务器只是接收它们,我觉得这是DotNetty正在做的事情?

internal class JsonToPacketDecoder : ByteToMessageDecoder
{
    protected override void Decode(IChannelHandlerContext context, IByteBuffer input, List<object> output)
    {
        Console.WriteLine("Decoding: " + input.ToString(Encoding.UTF8) + " \n");
        output.Add(new IncomingPacket(JObject.Parse(input.ToString(Encoding.UTF8)).ToFlatDictionary()));
    }
}

似乎 input.ToString(Encoding.UTF8) 两者都包含?

最佳答案

发生此问题的原因是 ToString(Encoding) 在显示内容时不消耗任何输入字节。

这是为什么呢?这是因为“to string”函数的通常用例并不在实际读取字节重要的空间中,因为它基本上每次都会读取所有字节,即使已收到 2 个“数据包”。

toString 的实际用例将在处理程序内部,其中已经将数据包分组成适当的 block 。

您可能想要的是 DelimiterBasedFrameDecoder将传入流拆分为由换行符或空字节分隔的数据包,然后使用 ChannelHandlerAdapter ,您可以在其中将数据包解码为 JSON。

关于c# - .NETTY : Second batch of data sent includes the first?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785863/

相关文章:

c# - 将示例项目导入 xamarin studio

c# - ActionResult 扩展不适用于 Page() ActionResult 方法

c# - WPF Datagrid 新行验证

C#比较两个未知类型的对象(包括引用和值类型)

c# - 为什么我的 azure webapp 请求有时很慢

windows - 如何启动 Azure VM 中添加的应用程序

c# - 什么约定将 poco 属性自动映射到列?我怎样才能禁用该自动映射?

c# - FromBluetoothAddressAsync 永远不会在 WPF 应用程序中的 Windows 10 Creators Update 上返回

c# - .Net PropertyGrid DropDownList - 返回值不同于显示值

deployment - Azure 部署循环很长一段时间