我是Netty的新手并且打算创建一个tcp套接字服务器,它读取每个客户端的信息并在处理请求之前回复客户端,即。当消息进入覆盖ChannelInboundHandlerAdapter类的channelRead方法时,对客户端的确认。
请指导我以上指定的目标。 我目前正在尝试基本的netty 4.1.4 echo服务器示例,但我希望服务器向客户端发回确认,所以我更新了channelread方法,如下所示:
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
ctx.write(msg);
ChannelFuture cf = ctx.channel().write("FROM SERVER");
System.out.println("Channelfuture is "+cf);
}
,得到的结果如下:
Channelfuture is DefaultChannelPromise@3f4ee9dd(failure: java.lang.UnsupportedOperationException: unsupported message type: String (expected: ByteBuf, FileRegion))
我理解它期望bytebuf的错误,但我如何实现它?此外,此方法是否能够向客户发送确认
答案 0 :(得分:1)
您可以使用String.getBytes(Charset)和Unpooled.wrappedBuffer(byte[])转换为ByteBuf。
ChannelFuture cf = ctx.channel()
.write(Unpooled.wrappedBuffer("FROM SERVER".getBytes(CharsetUtil.UTF_8)));
另请注意ctx.channel().write(...);
可能不是您想要的。请考虑使用ctx.write(...);
。不同之处在于,如果您的处理程序是ChannelDuplexHandler,那么当您执行channel().write()
时,它将收到写入事件。使用ctx
而不是channel
将从管道中的处理程序点发送写出,而不是从管道的末尾发送,这通常是您想要的。