NETTY 4.1.4:TCP套接字服务器在处理请求后回复客户端

时间:2016-11-04 04:00:39

标签: sockets tcp server netty

我是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的错误,但我如何实现它?此外,此方法是否能够向客户发送确认

1 个答案:

答案 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将从管道中的处理程序点发送写出,而不是从管道的末尾发送,这通常是您想要的。