1

Я пытаюсь отправить объект через сокеты, но когда я хочу прочитать объект на клиенте, я получил java.lang.ClassCastException.ClassCastException с использованием ObjectInputStream в сервер-клиентском приложении

Моя цель следующая, и у меня она есть в обоих проектах (сервер и клиент).

class Data implements Serializable{ 

    int height; 
    int width; 
    int max; 
    int zoom; 
    int start; 
    int end; 
    int xMove; 
    int yMove; 

    public Data(int height, int width, int max, int zoom, int start, int end, int xMove, int yMove){ 
     this.height = height; 
     this.width = width; 
     this.max = max; 
     this.zoom = zoom; 
     this.start = start; 
     this.end = end; 
     this.xMove = xMove; 
     this.yMove = yMove; 
    } 
} 

Передающая часть:

try{ 
    Data dataToSend = new Data(height, width, max, zoom, start, end, xMove, yMove); 
    out.writeObject(dataToSend); 
} 

Ресивер часть:

try{ 
    InputStream is = socket.getInputStream(); 
    Data dataToRead = (Data)ois.readObject(); 
} 

И сообщение об ошибке:

java.lang.ClassCastException: lab05_server.Data cannot be cast to lab05_kliens.Data 

Я попробовал все с тем же результатом. Я не могу найти свою ошибку.

Благодарим за помощь.

ответ

0

Вы должны иметь тот же SerializableID добавлен к обоим классам данных, обратите внимание на: this

+0

Я объявленную это в обоих файлах: частный статический окончательный долго serialVersionUID = 1L; и теперь я получил следующую ошибку: Error0: java.io.InvalidClassException: lab05_server.Data; локальный класс несовместим: stream classdesc serialVersionUID = 1, локальный класс serialVersionUID = -5600343588571323555 –

+0

Один класс верен, так как он показывает идентификатор как то, что вы его объявили: «1», другой все еще набирает идентификатор по умолчанию: «-5600343588571323555 " – crumbug

+0

Yepp, я нашел ошибку, в клиенте в (Datas) ois.readObject(); часть конструктора Data не выполняется (я установил там тестовый вывод). Как заставить кастинг работать? Спасибо. –