【问题标题】:I can't cast my object after sending it with netty使用 netty 发送对象后,我无法投射我的对象
【发布时间】:2016-11-22 10:08:11
【问题描述】:

当我在服务器中读取响应时,我得到了正确的对象,但是当我尝试将它转换为 Packet 时,我得到了这个异常:

java.lang.ClassCastException: java.lang.String cannot be cast to server.Packet
    at server.JCoincheServerHandler.channelRead(JCoincheServerHandler.java:21)

这是我的数据包类:

public class Packet implements Serializable
{
    public int code;
    int intData;
    String data;
    String user;
}

这就是我在客户端中发送它的方式: 发送成功,从不打印“发送失败”

    public void sendMessage(Object object)
    {
        ChannelFuture cf = _chan.write(object);
        _chan.flush();
        if (!cf.isSuccess()) {
            System.out.println("Send failed: " + cf.cause());
        }
}

这是我在服务器中读取它的方式:

@Override
   public void channelRead(ChannelHandlerContext ctx, Object msg) {
       Packet packet = (Packet) msg;
       System.out.println(packet.data);
       System.out.println("Message received");
   }

我做错了什么?

编辑:

p.addLast(
          new ObjectEncoder(),
          new ObjectDecoder(ClassResolvers.cacheDisabled(null)),
          handler);

【问题讨论】:

  • 您的管道是什么样的?需要知道正在添加哪些处理程序以及添加的顺序
  • @ChrisO'Toole 我编辑了我的帖子
  • 是否有可能您发送的是字符串而不是数据包?
  • @ChrisO'Toole 不,我发送一个数据包

标签: java networking netty


【解决方案1】:

您的客户必须发送一个字符串。

还要验证您的客户端和服务器共享类 Packet 并且该类应该在同一个数据包中。

例如common.Packet

【讨论】:

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