Netty channel.write不写消息

问题描述 投票:7回答:1

我正在尝试与Netty一起迈出第一步,为此目的,我在Netty上编写了简单的服务器,在oio普通TCP上编写了简单的客户端。

客户端发送随机文本数据包,并且必须接收“ Ack”消息。请参阅处理程序方法:

  @Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

    ctx.write("Ack"); 
    ctx.flush();

    ByteBuf in = (ByteBuf) msg;
    StringBuilder sb = new StringBuilder();
    try {
        while (in.isReadable()) {
            sb.append((char) in.readByte());

        }
    } finally {
        ReferenceCountUtil.release(msg);
    }
    LOG.debug("Incoming message. ACK was send");

    String myaddr = ctx.channel().remoteAddress().toString();
    String message = "Message from " + myaddr + " :" + sb.toString();
    LOG.debug(message);
    sendToOther(myaddr, message);

}

问题是-当我尝试发送回“ Ack”字符串时-客户端什么也没收到。但是,当我尝试发送回来的消息时,它工作正常,并且我在客户端看到回显。

 @Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

    ctx.write(msg); 
    ctx.flush();

write()方法需要Object,但我尝试发送(Object) String-但没有任何反应。我也尝试发送ByteBuf(我在一篇文章中看到了),但仍然无法正常工作。

[当我将回传的邮件作为回音发送时-它起作用。当我发送其他内容时-不会。请帮助我,我只是不知道我的错误在哪里。


我解决了这个问题。问题是,您只需要发送ByteBuff。因此,我们需要创建它,并向其中写入一些内容,然后才能将其写入香奈儿管道。就我而言:

String ack = "ACK";
    ByteBuf out = ctx.alloc().buffer(ack.length()*2);
    out.writeBytes(ack.getBytes());
    ctx.write(out); 
    ctx.flush();
    LOG.debug("Incoming message. ACK was send");

可能不是很好的解决方案,但它仅作为示例。

我正在尝试与Netty迈出第一步,为此,我在Netty上编写了简单服务器,并在oio纯TCP上编写了简单客户端。客户端发送随机文本数据包,并且必须接收“ Ack”消息。参见...

java sockets jboss network-programming netty
1个回答
21
投票

您将看到替换后失败的原因

© www.soinside.com 2019 - 2024. All rights reserved.