2016-11-22 3 views
2

でそれを送信した後に、私のオブジェクトをキャストすることはできません。私は、サーバーでの応答を読んだとき、私は右のオブジェクトを取得しますが、私はパケットにキャストしようとしたとき、私はこの例外を得たネッティー

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()); 
     } 
} 
を印刷されることはありません「失敗SEND」

これは私が私のサーバーでそれを読む方法です:

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

は私が間違って何をしたのですか?

EDIT:

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

パイプラインはどのように見えますか?どのハンドラが追加されているのかを知る必要があります –

+0

@ ChrisO'Toole投稿を編集しました –

+1

パケットの代わりに文字列を送ることは可能でしょうか? –

答えて

1

あなたのクライアントは、文字列を送信する必要があります。

また、クライアントとサーバーがクラスPacketを共有し、このクラスが同じパケットに存在することを確認してください。

たとえばcommon.Packet

関連する問題