我已经使用保存/加载游戏的工作代码通过套接字发送玩家状态。我遇到了一个问题,即保存游戏是正确的,但服务器没有收到客户端的玩家状态。未通过套接字发送XStream
下面是测试的基础代码和工作:
int retval = fc.showSaveDialog(givenComponent);
if (retval == JFileChooser.APPROVE_OPTION) {
File file = fc.getSelectedFile();
try {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "UTF-8"));
XStream xs = new XStream();
GameSave gs = new GameSave();
ArrayList<PlayerSerialize> listps = new ArrayList<PlayerSerialize>();
for (Player tempplayer : Players.players) {
PlayerSerialize ps = new PlayerSerialize();
ps.getPlayerData(tempplayer);
listps.add(ps);
}
gs.playersSerialize = listps;
gs.gamedate = Dateutils.gamedate;
String s = xs.toXML(gs);
bw.write(s);
bw.close();
} catch (IOException ex) {
Logger.getLogger(DialogMainField.class.getName()).log(Level.SEVERE, null, ex);
}
}
这里是没有发送任何服务器的客户端代码:
XStream xs = new XStream();
GameSave gs = new GameSave();
ArrayList<PlayerSerialize> listps = new ArrayList<PlayerSerialize>();
PlayerSerialize ps = new PlayerSerialize();
ps.getPlayerData(Players.players.get(1));
listps.add(ps);
gs.playersSerialize = listps;
gs.gamedate = Dateutils.gamedate;
String s = xs.toXML(gs);
out.println("clientplayertoserver");
out.println(s);
这里是服务器端刚刚在案例:
if (strIn.contains("clientplayertoserver")) {
strIn = in.readLine();
XStream xs = new XStream();
GameSave gs = (GameSave) xs.fromXML(strIn);
Players.players.get(1).getPlayerSerializeData(gs.playersSerialize.get(0));
}
我需要某种线索,因为我卡住调查问题。是否有任何XStream限制?或者错误是在与套接字一起工作?相同的代码在一个地方工作,而不是在另一个地方工作 - 我非常感谢在这种奇怪的情况下提供任何帮助。
是的,奇怪的是,XStream的或插槽分别工作: 1.我可以通过套接字换边并发送命令来启动游戏像 '}否则,如果(strIn.contains(“startgame”)){ DialogMultiplayerStart.callDispose(); DialogMainField.startNewGame(true,false,DialogMultiplayerStart.isFirstPlayerUSSR);' – lozga
2.我可以保存游戏。Savig代码写在上面,游戏加载代码也很简单 'File file = fc.getSelectedFile(); XStream xs = new XStream(); GameSave gs =(GameSave)xs.fromXML(file); (int i = 0; i
lozga
如果可能会有帮助 - 这里是切换游戏端的工作代码,这是由相同的想法和工作: 服务器 '公共静态void sendSide(字符串端){ out.println(“side”) ; out.println(side); } Client: 'if(strIn.contains(“side”)){ strIn = in.readLine(); System.out.println(strIn); DialogMultiplayerStart.setSide(strIn); }' – lozga