vorrei tenere traccia dei socket aperti tramite una lista ed inviare a tutti i client , per ogni nuovo client che si connette , un messaggio che avvisa del nuovo utente in linea (messaggio di broadcast) .
Il codice per fare questo "esperimento" è il seguente.
codice:
import java.net.*;
import java.io.*;
import java.util.*;
public class Server {	
 private ServerSocket servSocket;
 private int porta ;//num di porta su cui accetto connessioni
 private boolean running; // mi dice finché devo servire il client 
 private ArrayList<Socket> clients;
  
  Server(int port){//costruttore
	  this.porta=port;
	  this.running=false;
	  this.servSocket=null;
  }
  Server(){
	  
  }
  //METODI
  public void start(){//mette in ascolto il server
	  try {
		servSocket=new ServerSocket(porta);//setto il socket
		running=true;
		System.out.println("In ascolto sulla porta "+porta);
	  } catch (IOException e) {
	    System.out.println("Impossibile connettersi alla porta "+porta);
	    }
	 while(running){
		 serve();
	 }
  }
  
  public void stop(){//fermo il servizio
	  running=false;
  }
  
  public void aggiorna(Socket link){
	  clients = new ArrayList<Socket>();
	  clients.add(link);// aggiungo il socket alla lista
	  int tot = clients.size();
	  PrintWriter OUT;
		//invio broadcast
	  Socket cl;
	  Iterator<Socket> it = clients.listIterator();
	  while(it.hasNext()){
		cl = it.next();
		try {
			OUT= new PrintWriter(cl.getOutputStream(),true);
			OUT.println("Un nuovo client è connesso");
			OUT.println(tot +"connessi");
		    } catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		    }

	  }
  }
  
  public void serve(){
  try {
	Socket canale=servSocket.accept();//accetto 
	Thread app = new Application(canale);
	app.run();
  } catch (IOException e) {
	System.out.println("Impossibile connettersi al client");
	stop();
    }  
  }
  public static void main(String[] args){
	  Server serv = new Server(7777);
	  serv.start();
  }
 
}

public class Application extends Thread {
  private Socket connessione;
  private PrintWriter OUT ;
  Application(Socket link){
	 this.connessione=link; 
  }
  public void run(){
   try {
	 Server serv = new Server();
	 serv.aggiorna(connessione);
	 System.out.println("connesso con il client");  
	 OUT=new PrintWriter(connessione.getOutputStream(),true);
	 OUT.println("benvenuto");
   }  catch (IOException e) {
	  e.printStackTrace();
      }
  }
}
qualcuno paziente ed esperto potrebbe dirmi cosa c'è che non va ? La lista risulta sempre di dimensione 1

Ovviamente per la classe Application ho usato un altro file (Application.java)