1

サーバーを使ったシンプルなマルチプレイヤーゲームを開発しています。コンセプトは、プレーヤーのターンごとにオブジェクト「ゲーム」をすべてのクライアントに送信することです。クライアントが必要とするすべての情報が含まれています。初めてうまくいきます。2回目以降、クライアントのオブジェクトの値は変更されません。サーバー上で値が変更されていることを確認し、クライアント側でもオブジェクトをnullに設定してから読み取ります。私はJavaの経験がありません。「Java」が同じインスタンスであるために、新しい値を読み取らず、古い値を(おそらくキャッシュから)再アクティブ化すると考える可能性はありますか?

クライアントコード

this.game = null;
this.game = (Game) ois.readObject();

サーバーコード

aCPS.get(i).oos.writeObject(game);

ゲーム

public class Game implements Serializable {...}

さらにコードが必要な場合は教えてください。ありがとう。

4

1 に答える 1

3

ObjectOutputStreamリセットせずに同じオブジェクトを an に書き込むと、同じオブジェクトが得られます。これは、Java シリアライゼーションが任意のオブジェクト グラフを処理する方法です。

修正するには、新しい を使用することをお勧めしObjectOutputStreamます。あなたはそれを呼び出すことができますreset。または、不変オブジェクトを使用するか、シリアル化に別のものを使用します。

于 2012-04-24T22:42:25.650 に答える