Salve, secondo voi cosa è che non va in questo codice? Il server si pone in stato di accept, ma non accetta la connessione di un client:
codice:
public class Server {

	private ArrayList <Socket> clients;
	private ServerSocket server;
	
	private ArrayList <ObjectInputStream> inputs;
	private ArrayList <ObjectOutputStream> outputs;
	
	private Executor esecutoreThreads; 
	
	public Server(int porta,int coda) {
		esecutoreThreads = Executors.newCachedThreadPool();
		creaSocket(porta,10);
		
		esecutoreThreads.execute(new AcceptTask());
	}
	
	
	private class AcceptTask implements Runnable {

		public void run() {
			System.out.println("Sono in attesa di un client...");
			accettaClient();
			System.out.println(numeroPeerConnessi());
			esecutoreThreads.execute(new AcceptTask());
		}
		
	}
	
	public int numeroPeerConnessi() {
		return clients.size();
	}
	
	public void terminaServer() {
		
			try {
				for (int i = 0; i < inputs.size() || i < outputs.size() || i< clients.size(); i++) {
					inputs.get(i).close();
					outputs.get(i).close();
					clients.get(i).close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		
	}
	
	private void creaSocket(int porta,int coda) {
		try {
			server = new ServerSocket(porta,coda);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private void accettaClient() {
		try {
			Socket temp = server.accept();
			ObjectInputStream input = new ObjectInputStream(temp.getInputStream());
			ObjectOutputStream output = new ObjectOutputStream(temp.getOutputStream());
			output.flush();
			clients.add(temp);
			inputs.add(input);
			outputs.add(output);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


}
Il client è invece:
codice:
public class Client {
	
	private Socket server;
	
	private ObjectInputStream input;
	private ObjectOutputStream output;
	
	public Client(String indirizzo, int porta) {
		connect(indirizzo,porta);
	}
	
	public void terminaClient() {
		try {
			input.close();
			output.close();
			server.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	private void connect(String indirizzo, int porta) {
		try {
			
			server = new Socket(indirizzo,porta);
			input = new ObjectInputStream(server.getInputStream());
			output = new ObjectOutputStream(server.getOutputStream());
			System.out.println("Sono connesso a" + server.getLocalPort());
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
}
Uso un main in cui faccio partire il server:
codice:
public class MainServer {

	public static void main(String[] args) {
		Server server = new Server(4000,10);
		
	}
}
E un main per far partire i client:
codice:
public class MainClient {
	public static void main(String[] args) {
		Client client = new Client("127.0.0.1",4000);
	}

}