Java SocketServer ObjectInputStream问题(收到错误的值)

时间:2015-10-30 12:49:42

标签: java sockets object

我在过去的几个小时里一直在调试,但我没有得到它......

我正在从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();
    }
}

我发布以下答案

1 个答案:

答案 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