【问题标题】:Send a String message from my Netty client to my server从我的 Netty 客户端向我的服务器发送一条字符串消息
【发布时间】:2016-11-09 12:56:46
【问题描述】:

我有一个 Netty 客户端和一个 Netty 服务器,在遵循主要教程之后,为了拥有一个 EchoClient / 服务器,我想制作它,以便我的客户端在他第一次连接到我的服务器时向它发送一条消息。

这里是我的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); 
}

但是当为firstMessage 使用String 并在构造函数中初始化并发送它时,我的服务器不显示任何内容!

我不明白什么?

【问题讨论】:

    标签: java netty


    【解决方案1】:

    如果你想发送一个字符串,那么首先使用Unpooled.copiedBuffer(string, charset)将它转换成一个ByteBuf

    Netty 有一个 CharsetUtil 可以帮助解决这个问题

    【讨论】:

      【解决方案2】:

      只想在 netty 中添加更多关于 String 的信息,

      您可以将 Object 转换为 Bytebuff

       ByteBuf in = (ByteBuf) msg;
       String data = in.toString(CharsetUtil.UTF_8);
      

      但如果你有长字符串对象,我建议使用 StringEncoder 和解码器用于 netty 和 LineBasedFrameDecoder 并将你的处理程序扩展到

      SimpleChannelInboundHandler<String>
      

      【讨论】:

        猜你喜欢
        • 2017-03-08
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多