gpt4 book ai didi

java - Kryonet 在多次发送自定义对象后断开连接

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:14 25 4
gpt4 key购买 nike

我正在使用 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()));
}
}
});

我的类(class):

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;
}

}

堆栈跟踪:

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

最佳答案

您是否尝试过检查在接收方法中从服务器获取的值?

我认为可能的情况是,由于您正在实现可序列化接口(interface),因此数据正在被序列化,当您尝试将其从整数转换为字符串时,它会导致问题。

尝试反序列化您收到的数据,看看会发生什么。

关于java - Kryonet 在多次发送自定义对象后断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26086188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com