Пытаюсь подключить флеш as3 к java через сокет. Связь есть, но в момент отключения игрока он не всегда удаляется из массива игроков.
Вкратце: в java для каждого нового игрока создаю новый поток и добавляю его в ArrayList. Удаление из массива происходит в момент срабатывания исключения (когда игрок закрывает флешку и связь пропадает). Но через какое то время элементов в ArrayList становится явно больше, чем должно быть. Хотя когда тестирую сам, все работает правильно.
Вот такой вот скрипт (в яве совсем новичок). Скрипт в ответ на любой запрос клиента отвечает размером ArrayList.
JAVA

Код AS3:
public class Server {
private static final int PORT_SERVER = 2000;
static List<Player> mas_player = new ArrayList<Player>();
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(PORT_SERVER);
while(true) {
Socket clientSocket = server.accept();
Player client = new Player(clientSocket, mas_player);
mas_player.add(client);
client.start();
}
} catch(Exception e) {System.out.println("Error init "+e);}
}
}
class Player extends Thread {
public Socket s;
DataInputStream in;
DataOutputStream out;
List<Player> mas_player;
public Player(Socket p1, List<Player> mas_player) {
s = p1;
this.mas_player = mas_player;
}
public void run() {
String line = null;
try {
InputStream sin = s.getInputStream();
OutputStream sout = s.getOutputStream();
in = new DataInputStream(sin);
out = new DataOutputStream(sout);
while(true) {
line = in.readUTF();
line = String.valueOf(mas_player.size());
out.writeUTF(line);
out.flush();
}
} catch(Exception e) {
try {
mas_player.remove(this);
out.close();
s.close();
} catch(Exception ee) {
System.out.println("Error thread "+ee);
}
}
}
}