Netty channel.write не пишет сообщение

Я пытаюсь сделать свои первые шаги с Netty, для этого я написал простой сервер на Netty и простой клиент на oio plain 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");

Может быть, это не отличное решение, но это работает как пример.

Ответы на вопрос(1)

Ваш ответ на вопрос