我在过去的几个小时里一直在调试,但我没有得到它......
我正在从Java Socket Server向客户端(游戏服务器和游戏客户端)发送一个对象,而且在传递对象时似乎存在问题....
服务器端:
//this is the controller function
public static void sendToAllPlayers(Object o){
for (Connection c : NetworkService.getActiveConnections()){
//i will explain this function below
NetworkService.send(c, o);
}
}
//this is the call to the controller
NetworkController.sendToAllPlayers(new SynchronizeMatch(MatchService.getMatchStore(), RoundService.getRoundStore()));
在MatchStore(=> MatchService.getMatchStore()
)内部,列出了所有玩家。玩家看起来像:
class Player implements Serializable {
private String username;
private Integer points;
......
}
问题是,该领域"点"没有正确地从服务器传递到客户端。客户方:
Object object = in.readObject();
if (object instanceof SynchronizeMatch){
SynchronizeMatch syncMatch = (SynchronizeMatch) object;
MatchController.setMatchStore(syncMatch.getMatchStore);
......
}
到目前为止一切正常 - 比赛商店(以及圆形商店)保留了所有"实时数据"游戏的点数水平除外。它没有正确更新。现在send()函数:
public static void send(Connection c, Object o){
try {
c.getObjectOutputStream().writeObject(o);
} catch (IOException e) {
e.printStackTrace();
}
}
我发布以下答案
答案 0 :(得分:0)
public static void send(Connection c, Object o){
try {
c.getObjectOutputStream().writeObject(o);
// !!!!!! THIS SOLVED MY PROBLEM !!!!!!
c.getObjectOutputStream().reset();
} catch (IOException e) {
e.printStackTrace();
}
}
你需要重置OutPutStream,否则它会缓存一些东西而你不知道你的所有数据集是否都是实际的。如果您想了解有关重置套接字连接的更多信息:
Is it ok to be calling reset() on an ObjectOutputStream very frequently?
我希望这会对这一方有所帮助;)
度过美好的一天,最好的问候,
Messerbill