2012-04-24 5 views
1

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

クライアントコード

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

Serverコード

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

ゲーム

public class Game implements Serializable {...} 

あなたはより多くのコードが必要なら、私に教えてください。ありがとう。

+1

もっとコードが必要です。 :) – Tudor

答えて

2

リセットすることなく同じオブジェクトをObjectOutputStreamに書き込むと、同じオブジェクトが取得されます。これは、Java Serializationが任意のオブジェクトグラフを処理する方法です。

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

+0

またはwriteUnshared()。 – EJP

+0

@EJBちょっと意味が分かりません。含まれているオブジェクトはすべて共有されます。 –

+0

これは無意味でも紛らわしいものでもなく、完全性のために言及する必要があります。 OPが含まれているオブジェクトを気にしない、または何もない場合は、あなたが言及した他のオブジェクトと同じくらい良い解決策です。 – EJP

関連する問題