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