2014-09-28 5 views
1

Я изучаю некоторые сетевые материалы с KryoNet, и у меня есть эта проблема: когда я отправляю объект с сервера на клиент, он отправляет его просто отлично, и я могу его прочитать, но когда я отправляю я снова получаю эту ошибку.Kryonet отключается после отправки пользовательского объекта более одного раза

Сервер:

server = new Server(); 
    Kryo kryo = server.getKryo(); 
    kryo.register(Command.class, new JavaSerializer()); 
    server.start(); 
    try { 
     server.bind(54555, 54777); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Клиент:

client = new Client(); 
    Kryo kryo = client.getKryo(); 
    kryo.register(Command.class, new JavaSerializer()); 
    client.setKeepAliveTCP(2000); 
    client.start(); 
    try { 
     client.connect(5000, "192.168.1.5", 54555, 54777); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    client.addListener(new Listener() { 
     public void connected(Connection connection){ 

     } 
     public void received (Connection connection, Object object) { 
      if(object instanceof Command){ 
       Command c = (Command) object; 
       textField.setText(Integer.toString(c.getTime())); 
      } 
     } 
    }); 

MyClass:

public class Command implements Serializable{ 

private static final long serialVersionUID = 1L; 
private int time; 

public Command(int time) { 
    setTime(time); 
} 

public int getTime() { 
    return time; 
} 

public void setTime(int time) { 
    this.time = time; 
} 

}

StackTrace:

Exception in thread "Client" com.esotericsoftware.kryo.KryoException: Error during Java deserialization. 
at com.esotericsoftware.kryo.serializers.JavaSerializer.create(JavaSerializer.java:42) 
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:758) 
at com.esotericsoftware.kryonet.KryoSerialization.read(KryoSerialization.java:57) 
at com.esotericsoftware.kryonet.TcpConnection.readObject(TcpConnection.java:137) 
at com.esotericsoftware.kryonet.Client.update(Client.java:239) 
at com.esotericsoftware.kryonet.Client.run(Client.java:317) 
at java.lang.Thread.run(Unknown Source) 




Caused by: java.io.StreamCorruptedException: invalid stream header: 79737200 
at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
at java.io.ObjectInputStream.<init>(Unknown Source) 
at com.esotericsoftware.kryo.serializers.JavaSerializer.create(JavaSerializer.java:40) 
... 6 more 

ответ

1

Вы пытались проверить, какие значения вы получаете с сервера в полученном методе?

Я думаю, что это может быть так, что, поскольку вы реализуете интерфейс Serializable и, следовательно, данные становятся сериализованными и когда вы пытаетесь преобразовать его в String из целого, это вызывает проблемы.

Попробуйте десериализовать полученные данные и посмотреть, что произойдет.

Смежные вопросы