我正在用Java编写我的游戏。这是一款多人游戏,整个通信正在通过服务器。每个客户端< - >服务器套接字链接在单独的威胁中工作。我在java套接字中反序列化我的arraylist对象失败
服务器类持有的客户在这个数组中:
public ClientServerThread clients[];
我还储藏室保存玩家和游戏对象
public ArrayList<GameRoom> channels;
我在服务器上创建一个游戏,并发送整场比赛物CO 2客户端(主机和客人)是这样的:
Message carry on info about players and their choices about army.
*/
msgOut = new Message(Message.START_GAME, "SERVER", Message.OK, "ROOM: " + gameRoom.getName());
/*
Creating a game
*/
ArrayList<Player> players = gameRoom.getPlayers();
//Assiging players
//Creating game - generate map, deal cards - setup army etc.
Game game = new Game(players);
//setting game in gameRoom on server.
gameRoom.setGame(game);
//Setting msg to carry whole game
msgOut.setGame(game);
//Sending response to both clients in room;
server.announceInRoom(gameRoom, msgOut);
我仔细检查调试 - 游戏对象厕所很好。 主持人和嘉宾都应该获得带有整个数组列表的游戏对象,在这种情况下,它将是单位军队。
控制台调试(看军队尺寸):
server.send() {type='START_GAME', sender='SERVER', content='OK', recipient='ROOM: dddGame:Host Player:adads,Nation:1,**Army size:8** Guest Player:dcfvv,Nation:7,**Army size:8** Map: [email protected]'} PortID: 53780
server.send() {type='START_GAME', sender='SERVER', content='OK', recipient='ROOM: dddGame:Host Player:adads,Nation:1,Army size:8 Guest Player:dcfvv,Nation:7,Army size:8 Map: [email protected]'} PortID: 53781
在客户端,我有消息处理
case Message.START_GAME:
if(msg.getContentP() == Message.OK)
{
Game game = msg.getGame();
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
try {
if(currentPlayer.isHost())
{
clientGame = new GameWindow(game , SocketClient.this, CreateRoomWindow.AS_HOST);
}
else
{
clientGame = new GameWindow(game, SocketClient.this, CreateRoomWindow.AS_GUEST);
}
clientGame.setVisible(true);
roomWindow.setVisible(false);
} catch (Exception ex) {
Logger.getLogger(GameWindow.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
break;
问题是,在反序列化后,我不明白整场比赛的对象, 主机客户端缺少ArrayList hostarmy和ArrayList guestArmy
控制台调试:(查看军队规模)
Outgoing : {type='START_GAME', sender='adads', content='Start Game', recipient='SERVER'}
Incoming : {type='START_GAME', sender='SERVER', content='OK', recipient='ROOM: dddGame:Host Player:adads,Nation:1,**Army size:0** Guest Player:dcfvv,Nation:7,**Army size:0** Map: [email protected]'}
奇怪的来宾客户端获得的ArrayList guestArmy但没有主机军:/
Incoming : {type='START_GAME', sender='SERVER', content='OK', recipient='ROOM: dddGame:Host Player:adads,Nation:1,**Army size:0** Guest Player:dcfvv,Nation:7,**Army size:8** Map: [email protected]'}
我设置每个参与类的serialVersionUID。即将用完的想法
我错过了什么?
您可以发布您的类'Message',也表明你是怎么通过插座给他们? – haifzhan
你可以发布你的游戏类吗? – MGorgon
让我们不要经历大量代码,其中大部分代码与您的问题无关,而是最好简化问题并创建并发布有效的[mcve]。 –