Java 通过提供错误大小的套接字读取ArrayList
我目前正在开发一个客户机-服务器游戏,当我通过套接字发送ArrayList时遇到了一些问题。 以下是我的应用程序当前的工作方式: 服务器启动 播放器连接到服务器 服务器将玩家添加到玩家列表,并开始渲染地图和更新地图,并将更新发送给连接的玩家 另一个玩家连接 服务器添加此播放器并继续执行相同的操作 当服务器向玩家发送数据时,我所做的只是敌人的数组列表和玩家的数组列表,其他事情并不重要。 所以在我的玩家课上,我有两个阅读对象,玩家和敌人。在我的服务器上,我有两个写,玩家和敌人。 我的主要问题是,当服务器将播放器的ArrayList发送给2个连接的播放器时,它会显示ArrayList的大小为2(这是正常的,下面是日志:) 我们还可以看到,它将它发送给2个不同的id(连接的玩家)。 这就是我做这件事时得到的结果:Java 通过提供错误大小的套接字读取ArrayList,java,sockets,arraylist,Java,Sockets,Arraylist,我目前正在开发一个客户机-服务器游戏,当我通过套接字发送ArrayList时遇到了一些问题。 以下是我的应用程序当前的工作方式: 服务器启动 播放器连接到服务器 服务器将玩家添加到玩家列表,并开始渲染地图和更新地图,并将更新发送给连接的玩家 另一个玩家连接 服务器添加此播放器并继续执行相同的操作 当服务器向玩家发送数据时,我所做的只是敌人的数组列表和玩家的数组列表,其他事情并不重要。 所以在我的玩家课上,我有两个阅读对象,玩家和敌人。在我的服务器上,我有两个写,玩家和敌人。 我的主要问题是,当服
ArrayList<Player> p = (ArrayList<Player>) this.objIn.readObject();
System.out.println(p.size());
和sendPlayer方法:
public void sendPlayer(ArrayList<Player> players) {
try {
this.objectOut.writeObject(players);
} catch (IOException e) {
e.printStackTrace();
}
}
public void sendPlayer(ArrayList播放器){
试一试{
this.objectOut.writeObject(播放器);
}捕获(IOE异常){
e、 printStackTrace();
}
}
你们知道我做错什么了吗
谢谢
PS:我知道用套接字发送对象并不是很好(最好发送原始数据),但我不想在这里争论。您需要调查
ObjectOutputStream.reset()
。
否则,您将使用相同的值反复读取相同的对象
if(this.players.size() > 0) {
for(GestionPlayer gp : this.players) {
gp.sendPlayer(this.level.players);
}
}
public void sendPlayer(ArrayList<Player> players) {
try {
this.objectOut.writeObject(players);
} catch (IOException e) {
e.printStackTrace();
}
}