Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用MessageToByteEncoder作为最后一个出站处理程序不会';我什么也不退_Java_Netty - Fatal编程技术网

Java 使用MessageToByteEncoder作为最后一个出站处理程序不会';我什么也不退

Java 使用MessageToByteEncoder作为最后一个出站处理程序不会';我什么也不退,java,netty,Java,Netty,我的管道如下: Preprocessor -> Decoder -> Encoder -> Processor @Override protected void encode(ChannelHandlerContext ctx, CommandResponse msg, ByteBuf out) throws Exception { //Encode the response String responseString; ..... //Co

我的管道如下:

Preprocessor -> Decoder -> Encoder -> Processor
@Override
protected void encode(ChannelHandlerContext ctx, CommandResponse msg, ByteBuf out) throws Exception {
    //Encode the response
    String responseString;
    .....

    //Convert resulting string to bytes using specified charset
    byte[] bytes = responseString.getBytes(charset);

    //Send bytes
    out.writeBytes(bytes);
}
预处理器
解码器
处理器
都是
ChannelInboundHandlerAdapter
Encoder
是一个
messagetobytecoder

当管道接收到我的请求(作为UDP数据报发送)时,
预处理器将其解析为
字符串
,并将
字符串
传递给
解码器
解码器
解析
字符串
以创建
命令
对象,并将结果对象传递给
处理器
处理器
处理
命令
并生成
CommandResponse
对象,该对象通过调用
ctx.writeAndFlush(CommandResponse)传递给
编码器
Encoder
将命令编码为字节数组,然后编码为
ByteBuf
,如下所示:

Preprocessor -> Decoder -> Encoder -> Processor
@Override
protected void encode(ChannelHandlerContext ctx, CommandResponse msg, ByteBuf out) throws Exception {
    //Encode the response
    String responseString;
    .....

    //Convert resulting string to bytes using specified charset
    byte[] bytes = responseString.getBytes(charset);

    //Send bytes
    out.writeBytes(bytes);
}
但是,在发送端没有收到任何信息

我使用
NioDatagramChannel
作为通道和Netty版本4.0.x

谢谢,
Mickeel

我猜写调用返回的ChannelFuture失败了。看看这个。此外,在使用NioDatagramChannel时,您很可能希望将CommandResponse转换为DatagramPack。为此,请使用信息编码。

感谢您的帮助,诺曼!我已经在另一个处理程序(不是编码器)中解决了这个问题,并通过编写DatagramPacket解决了这个问题。但是,我能够获取数据包的发件人并将其设置为收件人地址,但我不知道如何在encode方法中获取它。预处理器可以转发包含字符串和发件人地址的对象而不是转发字符串吗?在命令对象中包含发件人的地址,您将在需要时获得该信息。@johnstlr这真的是Netty应该使用的方式吗?Norman可能会纠正我,但使用UDP,我看您没有太多选择。AIUINetty不会为每个UDP端点创建新管道,因为只有一个套接字接收所有传入的数据包。UDP数据包包含有关远程对等方的所有信息。如果您丢弃数据报数据包,则会丢失该信息。也许直接解码到一个命令对象并在其中包含发送者的地址会更好——也就是说,将预处理器和解码器结合起来。