/* * Andrea Caravano (www.andreacaravano.net) * * Esercizio 2: "StoAspettando" * Descrizione: Progettare un’applicazione Client/Server Multithread in Java che attenda, per ogni client collegato, * un numero non precisato di stringhe. L’invio del client termina quando la stringa ricevuta dal server * corrisponde a “FINE-INVIO”. * Prima di concludere la comunicazione, vengono inviate nuovamente al client le stringhe ricevute, trasformate * in maiuscolo. * * Possibile soluzione * Componente Client * * N.B.: L'esercizio scaturisce dalla sola fantasia dell'autore e intende rappresentare una applicazione didattica. * I dettagli in esso contenuti potrebbero non essere corrispondenti alla realtà e intendono valutare le abilità nella gestione delle strutture dati proposte. */importjava.io.*;importjava.net.Socket;importjava.net.UnknownHostException;importjava.util.Scanner;publicclassClientStoAspettando{staticfinalStringINDIRIZZOSERVER="127.0.0.1";staticfinalintPORTASERVER=9000;publicstaticvoidmain(String[]args){try(SocketprocessoClient=newSocket(INDIRIZZOSERVER,PORTASERVER)){System.out.format("Connesso al processo server avviato con il seguente indirizzo di socket: %s%n",processoClient.getRemoteSocketAddress());System.out.format("Processo client avviato con il seguente indirizzo di socket: %s%n",processoClient.getLocalSocketAddress());avviaComunicazione(processoClient);}catch(UnknownHostExceptione){System.err.println("Server non contattabile. Possibile errore di immissione.");}catch(IOExceptione){System.err.format("Errore connessione con server: %s%n",e.getMessage());}}privatestaticvoidavviaComunicazione(SocketprocessoClient)throwsIOException{BufferedReaderBR=newBufferedReader(newInputStreamReader(processoClient.getInputStream(),"UTF-8"));PrintWriterPW=newPrintWriter(newOutputStreamWriter(processoClient.getOutputStream(),"UTF-8"),true);ScannerS=newScanner(System.in);StringstringaClient=" ";while(stringaClient.equals("FINE-INVIO")==false){System.out.print("Immetti la stringa da inviare al server: ");stringaClient=S.nextLine();PW.println(stringaClient);}PW.println(stringaClient);S=newScanner(BR.readLine());intcontaStringhe=S.nextInt();System.out.println();System.out.println("Stringhe ricevute dal server: ");for(inti=0;i<contaStringhe;i++){StringstringaRicevuta=BR.readLine();System.out.println(stringaRicevuta);}}}
/* * Andrea Caravano (www.andreacaravano.net) * * Esercizio 2: "StoAspettando" * Descrizione: Progettare un’applicazione Client/Server Multithread in Java che attenda, per ogni client collegato, * un numero non precisato di stringhe. L’invio del client termina quando la stringa ricevuta dal server * corrisponde a “FINE-INVIO”. * Prima di concludere la comunicazione, vengono inviate nuovamente al client le stringhe ricevute, trasformate * in maiuscolo. * * Possibile soluzione * Componente Server * * N.B.: L'esercizio scaturisce dalla sola fantasia dell'autore e intende rappresentare una applicazione didattica. * I dettagli in esso contenuti potrebbero non essere corrispondenti alla realtà e intendono valutare le abilità nella gestione delle strutture dati proposte. */importjava.io.*;importjava.net.ServerSocket;importjava.net.Socket;importjava.util.ArrayList;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassServerStoAspettando{staticfinalintPORTALISTEN=9000;staticExecutorServiceesecutore=Executors.newCachedThreadPool();staticfinalStringFINESEQUENZA="FINE-INVIO";publicstaticvoidmain(String[]args){try(ServerSocketprocServer=newServerSocket(PORTALISTEN)){System.out.format("Processo server avviato con il seguente indirizzo di socket: %s%n",procServer.getLocalSocketAddress());while(true){try{SockettempSocket=procServer.accept();esecutore.execute(()->{try(SocketvarClient=tempSocket){System.out.format("Thread ID = %d - Indirizzo di socket del client: %s%n",Thread.currentThread().getId(),varClient.getRemoteSocketAddress());avviaComunicazione(varClient);}catch(IOExceptione){System.err.format("Errore di avvio della comunicazione: %s%n",e.getMessage());}});}catch(IOExceptione){System.err.format("Errore nella creazione di nuovi socket: %s%n",e.getMessage());}}}catch(IOExceptione){System.err.format("Errore lato server: %s%n",e.getMessage());}}privatestaticvoidavviaComunicazione(SocketvarClient){try(BufferedReaderBR=newBufferedReader(newInputStreamReader(varClient.getInputStream(),"UTF-8"));PrintWriterPW=newPrintWriter(newOutputStreamWriter(varClient.getOutputStream(),"UTF-8"),true)){StringstringaRicevuta=BR.readLine();intcontaStringhe=0;ArrayList<String>listaStringhe=newArrayList<>();while(stringaRicevuta.equals(FINESEQUENZA)==false){contaStringhe++;listaStringhe.add(stringaRicevuta);stringaRicevuta=BR.readLine();}PW.println(contaStringhe);// Segnalo al client il numero di stringhe che gli sto per inviare.for(Strings:listaStringhe){PW.println(s.toUpperCase());}}catch(IOExceptione){System.err.format("Errore di I/O: %s%n",e.getMessage());}}}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.