codice:import java.io.BufferedReader;import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Server { public static void main(String args[]) { boolean chiave = false; Set<Utente> listaUtenti = new HashSet<Utente>(); Set<String> listaRelazioni = new HashSet<String>(); ArrayList<Messaggio> listaMessaggi = new ArrayList<Messaggio>(); Set<Spam> listSpam = new HashSet<Spam>(); Socket canale = null; ServerSocket server = null; ExecutorService executor = Executors.newFixedThreadPool(50); String c, risposta = null; try { server = new ServerSocket(49007); PrintWriter out; BufferedReader br; System.out.println("Server caricato"); while (true) { StringBuffer requestLine = new StringBuffer(); canale = server.accept(); do { chiave = false; do { br = new BufferedReader(new InputStreamReader( canale.getInputStream())); out = new PrintWriter(canale.getOutputStream()); c = br.readLine(); if (c.equals("")) { chiave = true; } else { requestLine.append((String) c); requestLine.append("\n"); } } while (chiave == false); //continua a chiedere fin quando non riceve una stringa vuota if (chiave == true) { //Se l'ultimo elemento inserito è uguale a una riga vuota il thrad esegue le istruzioni sulla richiesta inviata EchoThread echT = new EchoThread(); echT.setSocket(canale); echT.setListaUtenti(listaUtenti); echT.setRichiesta(requestLine); echT.setListaRelazioni(listaRelazioni); echT.setListaUtenti(listaUtenti); echT.setListaMessaggi(listaMessaggi); echT.setListSpam(listSpam); executor.execute(echT); Thread.sleep(1500); //il Thread aspetta la risposta di EchoThread out.print("Inserire altri comandi? (S=si)"); out.flush(); risposta = br.readLine(); risposta = risposta.toUpperCase(); } requestLine.delete(0, requestLine.length()); } while (risposta.equals("S")); //controlla se si vuole aggiungere altre istruzioni } } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
ho risolto in questo modo, secondo voi va bene? come potrei evitare di aggiungere l'istruzione Thread.sleep(1500); che mi sembra poco adeguata?