Java SE 7을 사용하여 ServerSocket/Socket을 통해 간단한 채팅 프로그램을 만들고 있습니다. 보낸 모델/엔티티 내부의 데이터가 클라이언트에서 서버로 또는 바이스 사이에서 일치하지 않는 것이 가능한지 궁금합니다. 결과적으로 다른 데이터를 포함하는 동일한 클래스 유형을 보낼 때 내 클라이언트의 보낸 모델에서 서버로 데이터가 일치하지 않게됩니다.Java 직렬화 데이터 불일치
Example
Client: Sending... ID: 3
Server: Received... ID: 3
Client: Sending... ID: 4
Server: Recieved... ID: 3
다음 내 모델/단체의 내 일반적인 패러다임 :
abstract class Record<T> extends Observable implements Serializable {
// with generated "serialVersionUID" by the EclipseIDE[Juno]
protected int id;
// Constructor, Getters/Setters, Abstract methods
// hashCode(): Generated by Eclipse
// equals(): Generated by Eclipse, replacing Record with Record<T>
}
abstract class RecordVersion<T> extends Record<T> implements Serializable {
// with generated "serialVersionUID" by the EclipseIDE[Juno]
protected int version;
// Constructor, Getters/Setters, Abstract methods
// hashCode(): Generated by Eclipse
// equals(): Generated by Eclipse, replacing RecordVersion with RecordVersion<T>
}
class SampleRecord extends RecordVersion<SampleRecord> {
// with generated "serialVersionUID" by the EclipseIDE[Juno]
private String data;
// Constructor, Getters/Setters, Abstracted methods
// hashCode(): Generated by Eclipse
// equals(): Generated by Eclipse
}
가 뭘까요 방법이 문제를 해결하려면? 감사.
UPDATE 1 :
읽는 socket.getInputStream()
같은 ObjectOutputStream에 걸쳐 여러 번 같은 개체 인스턴스를 보낼 시도하는 경우, 당신은 문제에 실행하려고
class ReadRunnable implements Runnable {
private Object lastObjectReceived = new Object();
@Override
public void run() {
while(true) {
try {
// inStream: java.io.ObjectInputStream
Object objectReceived = inStream.readObject();
if(objectReceived .equals(lastObjectReceived))
objectReceived = inStream.readObject();
else
lastObjectReceived = objectReceived;
} catch(Exception e) {
ex.printStackTrace();
}
}
}
}
정확히 디버거가 좋은 점입니다. 당신은 당신이 보낸다고 생각하는 것을 보내지 않을 것이거나 당신이받는 것으로 생각하는 것을받지 못하기 때문에 불일치가 생깁니다. – Isaac
나는 볼 수있다. 그러나 나는'lastObjectReceived'를 다루고 그것을 실제의'objectReceived'와 비교하려고하고 그것들이 같은지 비교한다. 불행히도, 여전히 같은 문제. –
음 ... 몇 가지 코드를 게시하십시오. – Isaac