我正在尝试与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”消息。参见...
您将看到替换后失败的原因