我正在编写一个Netty
的服务器。很遗憾,write()
或writeAndFlush()
方法对我不起作用。
我有一个扩展ChannelDuplexHandler
的处理程序。它从C# client
接收消息,打印它们并发回消息。客户端从未收到消息,因此我不知道他们是否真的被发送了。
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg)
{
String input = msg.toString();
System.out.println("Input = " + input); // This works fine
ctx.writeAndFlush("Test");
ctx.write("Test 1 2 3"); // This doesn't work.
}
这是我的管道:
public void initChannel(SocketChannel ch) throws Exception
{
ch.pipeline().addLast("idleStateHandler", ish);
ch.pipeline().addLast("frameDecoder", new LineBasedFrameDecoder(maxIncMessageLength));
ch.pipeline().addLast("stringDecoder", new StringDecoder(CharsetUtil.UTF_8));
ch.pipeline().addLast("stringEncoder", new StringEncoder(CharsetUtil.UTF_8));
ch.pipeline().addLast("myChannelDuplexHandler", gsh);
}
所以我的问题是,为什么write()
不工作?感谢。
编辑:出于测试目的,我刚刚添加了
final ChannelFuture f = ctx.writeAndFlush("Test");
if(f.isDone())
System.out.println("done!");
if(f.isSuccess())
System.out.println("real success!");
f.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) {
System.out.println("complete!");
}
});
输出结果为: 完成了! 真正的成功! 完成!
问题可能在客户端吗?