用 netty 发送后我无法投射我的对象
I can't cast my object after sending it with netty
当我读取服务器中的响应时,我得到了正确的对象,但是当我尝试将它转换为 Packet 时,我得到了这个异常:
java.lang.ClassCastException: java.lang.String cannot be cast to server.Packet
at server.JCoincheServerHandler.channelRead(JCoincheServerHandler.java:21)
这是我的包裹class :
public class Packet implements Serializable
{
public int code;
int intData;
String data;
String user;
}
这是我在客户端中发送的方式:
发送成功,从不打印"send failed"
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);
您的客户端必须发送字符串。
还要验证您的客户端和服务器是否共享 class 数据包,并且此 class 应该在同一个数据包中。
例如common.Packet
当我读取服务器中的响应时,我得到了正确的对象,但是当我尝试将它转换为 Packet 时,我得到了这个异常:
java.lang.ClassCastException: java.lang.String cannot be cast to server.Packet
at server.JCoincheServerHandler.channelRead(JCoincheServerHandler.java:21)
这是我的包裹class :
public class Packet implements Serializable
{
public int code;
int intData;
String data;
String user;
}
这是我在客户端中发送的方式: 发送成功,从不打印"send failed"
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);
您的客户端必须发送字符串。
还要验证您的客户端和服务器是否共享 class 数据包,并且此 class 应该在同一个数据包中。
例如common.Packet