【发布时间】:2015-05-22 02:23:41
【问题描述】:
我最近开始使用 Netty,我下载了 Netty 的最终版本 (3.10),我正在按照基本教程开始并从客户端写入服务器,但是遇到了问题。
我正在使用对服务器的通道引用来编写:
channel.write(obj);
channel 的类型是 Channel,但它永远不会在另一端的处理程序中接收到(是的,我的处理程序工作正常并接收连接和断开连接)。
我做了一些研究并看到使用 channel.writeAndFlush(obj) 但这不是一个实际的方法。我查看了以前的 beta 和 alpha 版本,方法是存在的,但也有许多其他变化。那么channel.write(obj)不起作用还是在调用write(obj)之后我错过了另一个步骤?我希望能够随时写入通道,所以我不会有 ChannelHandlerContext,只有当它传递给处理程序时。
任何帮助将不胜感激。
编辑:
在我的管道中,我放入了一个分隔符、字符串编码器、字符串解码器和我的事件处理程序ServerListener:
new DelimiterBasedFrameDecoder(server.getConfig().PACKET_BUFFER_SIZE, Delimiters.lineDelimiter()), new StringEncoder(), new StringDecoder(), new ServerListener()
在客户端我有相同的处理程序以相同的顺序,不包括 ServerListener。
然而,当通过通道发送字符串时(是的,它确实会打印出 Connected To Server:
@Override
public void channelConnected(ChannelHandlerContext ctx, Connection con, ChannelStateEvent e) {
System.out.println("Connected To Server");
Channel c = ctx.getChannel();
c.write("Test");
}
即使我继承了 messageReceived 方法并且即使我继承了 channelConnected 的其他方法,服务器端也不会打印任何内容。
这是我的 messageReceived 方法:
@Override
public void messageReceived( ChannelHandlerContext ctx, MessageEvent e) throws Exception {
System.out.println("Received");
super.messageReceived(ctx, e);
}
【问题讨论】:
标签: networking netty