Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [JAVA] Socket Server

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37

    [JAVA] Socket Server

    Ciao ho un problema con il seguente codice:


    Codice del Server
    codice:
         Socket canale = null;        ServerSocket server = null;
            ExecutorService executor = Executors.newFixedThreadPool(50);
            
            try {
                server = new ServerSocket(40000);
                      while (true) {
                canale=server.accept();
                            executor.execute(new EchoThread(canale));
            
                
                    }            
            } catch (IOException e) {
                System.err.println("");
            }finally{
                try {
                    canale.close();
                } catch (IOException e) {
                    System.err.println("Impossibile chiudere la socket");
                }
            }
    Codice di EchoThread:
    codice:
    public class EchoThread implements Runnable {
    
    Socket socket;
    
    public EchoThread(Socket s) {
            
               socket=s;
        } 
    
    public void run(){
    
           InputStream is;
    
            try {
    
    
                 is = socket.getInputStream();    
                Richiesta richiesta = new Richiesta(is);
                       //ALTRE OPERAZIONI
    }
    
    }
    Codice di Richiesta:

    codice:
    public class Richiesta {
    
    public Richiesta(InputStream is){
    // OPERAZIONI SULL' InputStram 
    }
    
    }
    Utilizzo il programma putty per simulare il client e dovrei inserire più richieste del tipo:

    GET /aggiungiUtente?idUtente=mario HTTP/1.0
    user-agent: Mozilla 5.0
    host: localhost:6000
    content-type: text/html
    <rigaVuota>

    La prima richiesta inserita con il GET, tutto funziona. Se subito dopo inserisco un'altra richiesta non esegue più il codice EchoThread e Richieste. Come se si bloccasse. come devo fare?
    grazie tante

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    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?

  3. #3
    Ciao, sono nella tua stessa situazione.
    Anzi, io sono passata a telnet perche' putty andava in palla appena inserivo il primo metodo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.