Networking Netty 3.10决赛没有Channel.WriteAndFlush?

Networking Netty 3.10决赛没有Channel.WriteAndFlush?,networking,netty,Networking,Netty,我最近开始使用Netty,并下载了Netty的最终版本(3.10),我正在按照基本教程开始从客户端到服务器的编写,但我遇到了一些问题 我正在使用对服务器的通道引用进行写入,方法如下: channel.write(obj); 其中通道为通道类型,但在另一端的处理程序中从未接收到它(是的,我的处理程序工作正常,并接收连接和断开连接) 我做了一些研究,并看到使用channel.writeAndFlush(obj),但这不是一个实际的方法。我查看了以前的beta版和alpha版,方法是有的,但也有一些

我最近开始使用Netty,并下载了Netty的最终版本(3.10),我正在按照基本教程开始从客户端到服务器的编写,但我遇到了一些问题

我正在使用对服务器的通道引用进行写入,方法如下:

channel.write(obj);
其中通道为通道类型,但在另一端的处理程序中从未接收到它(是的,我的处理程序工作正常,并接收连接和断开连接)

我做了一些研究,并看到使用channel.writeAndFlush(obj),但这不是一个实际的方法。我查看了以前的beta版和alpha版,方法是有的,但也有一些其他的变化。那么channel.write(obj)是否不起作用,或者调用write(obj)后是否遗漏了另一个步骤?我希望能够随时写入通道,这样我就不会有ChannelHandlerContext,只有当它被传递给处理程序时

任何帮助都将不胜感激

编辑:

在我的管道中,我加入了Delimeter、字符串编码器、字符串解码器和事件处理程序ServerListener:

在客户端,除了ServerListener之外,我有相同顺序的相同处理程序

然而,当向通道发送字符串时(是的,它会打印出连接到服务器的内容:

即使我继承了messageReceived方法,即使我继承的其他方法(channelConnected)工作正常,服务器端也不会打印任何内容

以下是我的messageReceived方法:

在Netty 3.10(4.0之前的任何版本)中,没有刷新,因为它是隐式的

因此,当您执行
ctx.getChannel().write(buf)
channel.write(bug)
时,它将直接写入带外

如果不是,则可能意味着处理程序有问题


您可以查看中的示例:

所以我发现了我的问题。我将StringEncoder/StringDecoder与ObjectEncoder/ObjectDecoder结合使用,它们将彼此的字节弄乱了。出于某种原因,这种情况在早些时候没有发生,但现在对于可能遇到同样问题的人来说确实如此,请确保他们都没有被设置为处理者。

很好,很高兴知道这一点!是的,我遵循了echo教程,但仍然遇到了一些问题。在主要帖子中,我发布了更多关于管道和处理程序的信息。实际上,我只是尝试了echo服务器示例,但它也不起作用。它根本没有接收到任何东西。我尝试添加一个自定义解码器并将其连接到服务器,但当我调试它时,我在解码器中放置了一个断点并将一个对象从客户端发送到服务器,它从未调用断点,这意味着它从未被接收到。很好,您找到了问题的根本原因!;-)
new DelimiterBasedFrameDecoder(server.getConfig().PACKET_BUFFER_SIZE, Delimiters.lineDelimiter()), new StringEncoder(), new StringDecoder(), new ServerListener()
@Override
public void channelConnected(ChannelHandlerContext ctx, Connection con, ChannelStateEvent e) {
    System.out.println("Connected To Server");
    Channel c = ctx.getChannel();
    c.write("Test");
}
@Override
public void messageReceived( ChannelHandlerContext ctx, MessageEvent e) throws Exception {
    System.out.println("Received");
    super.messageReceived(ctx, e);
}