ServerSocket/Socket 経由で Java SE 7 を使用して簡単なチャット プログラムを作成しています。クライアントからサーバーへ、またはその逆に送信されたモデル/エンティティ内のデータの不一致が発生する可能性があるかどうか疑問に思っていましたか? その結果、含まれるデータが異なる同じクラスタイプを送信すると、クライアントの送信モデルからサーバーへのデータの不一致が発生します。
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
}
これを解決する方法はありますか?ありがとう。
更新 1:
socket.getInputStream()
ビアの読み取りjava.io.ObjectInputStream
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();
}
}
}
}