我有一个Netty客户端和一个Netty服务器,在完成主要教程之后,为了拥有一个EchoClient / Server,我想让它成为我的客户端在第一次连接它时向我的服务器发送一条消息。 / p>
以下是我应该注意的ClientClassHandler
方法:
private final ByteBuf firstMessage;
public ClientClassHandler() {
firstMessage = Unpooled.buffer(ClientClass.SIZE);
for (int i = 0; i < firstMessage.capacity(); i++) {
firstMessage.writeByte((byte) i);
}
}
@Override
public void channelActive(ChannelHandlerContext ctx) {
System.out.println("Channel is active.");
ctx.writeAndFlush(firstMessage);
}
但正如您可以看到本教程使用的是ByteBuf
而使用String
似乎不起作用!
以下是我在ServerClassHandler
方法中显示收到的消息的方式:
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
System.out.println(msg);
}
但是当String
用于firstMessage
并在构造函数中初始化并发送它时,我的服务器不会显示任何内容!
我不明白什么?
答案 0 :(得分:0)
如果要发送字符串,请先使用Unpooled.copiedBuffer(string, charset)
将其转换为ByteBuf
Netty有CharsetUtil来帮助解决此问题
答案 1 :(得分:0)
只想在netty中添加有关String的更多信息,
您可以将Object转换为Bytebuff
ByteBuf in = (ByteBuf) msg;
String data = in.toString(CharsetUtil.UTF_8);
但是如果你有长String对象,我建议使用StringEncoder和decode for netty和LineBasedFrameDecoder,并将处理程序扩展到
SimpleChannelInboundHandler<String>