Тема: Java socket
Показать сообщение отдельно
Старый 16.08.2016, 20:44
AlexSave вне форума Посмотреть профиль Отправить личное сообщение для AlexSave Найти все сообщения от AlexSave
  № 1  
Ответить с цитированием
AlexSave

Регистрация: Dec 2006
Сообщений: 24
По умолчанию Java socket

Пытаюсь подключить флеш 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);
			}
		}
	}
}