Я пытаюсь разработать игру с использованием сокетов. В одной части этого мне нужно перенести плату одного игрока на другую, поэтому я беру объект, в котором он хранится, и отправляет его через сокет. Когда я получаю плату игроков в гнездо другого игрока, я получаю сообщение об ошибке. Это сообщение об ошибке не всегда одно и то же, иногда это исключение StreamCorruptedException, а в других случаях это исключение ClassCastException. Эта ошибка не всегда бывает в одно и то же время, например, иногда я отправляю плату от одного игрока другому до 15 раз, прежде чем возникает ошибка, а в других случаях я отправляю ее всего три раза и возникает ошибка. Трассировка стека для повреждения потока следующая:Поток поврежден и не может присваивать экземпляр ... ошибок при чтении из сокета
java.io.StreamCorruptedException: invalid type code: 00
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1381)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1714)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1714)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1714)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1714)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1714)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2018)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1942)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1808)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)
at guerradelosmundos.threadCliente.run(threadCliente.java:144)
Трассировка стека для другой ошибки аналогична. Интересно то, что оба происходят на той же строке кода, который является следующим
Tablero tablero=(Tablero)entrada.readObject();
линия, где я пишу информацию сокета следующие
synchronized(this){
foo.salida.writeObject(too);
foo.salida.flush();
}
Что вы подразумеваете под обновлением клиента? – 6a75616e
Я имею в виду изменение кода для класса, в котором вы его отправляете, но забыв внести изменения в часть прочитанного кода. Это предполагает, что у вас есть два независимых процесса написания и чтения. Например, вы, возможно, изменили класс Tablero, но клиент (одно чтение) все еще использует старую версию Tablero. – Ekeko