/* * Andrea Caravano (www.andreacaravano.net) * * Esercizio 1: "TiHoColpito" * Descrizione: Progettare un applicazione Client/Server in Java che, a seguito dell’invio, da parte del client, * di una stringa di testo contenente una lettera dell’alfabeto americano e un numero, separati da un Whitespace (es: C 6), * invii, in maniera casuale, una tra le due seguenti stringhe: * - “Colpito!” * - “Mancato, ritenta!" * Prima dell’invio, validare la correttezza della struttura dati e, se non valida, inviare al client una stringa vuota. * La comunicazione termina con l’invio, da parte del client, di una stringa vuota. * * 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;publicclassClientTiHoColpito{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;try{System.out.print("Indicare le coordinate da consegnare al client, separate da Whitespace: ");S=newScanner(System.in);StringletturaScanner=S.nextLine();while(letturaScanner.isEmpty()==false){S=newScanner(letturaScanner);Stringlettera=S.next();intnumero=S.nextInt();PW.println(String.format("%s %d",lettera,numero));Stringrisposta=BR.readLine();if(risposta.isEmpty()){thrownewException();}else{System.out.format("Risposta del server: %s%n",risposta);}System.out.print("Indicare le coordinate da consegnare al client, separate da Whitespace: ");S=newScanner(System.in);letturaScanner=S.nextLine();}PW.println("");}catch(Exceptione){System.err.println("Errore nell'immissione dati. Riprova.");PW.println("");// Indico al server, come previsto dal protocollo, la volontà di chiudere la comunicazione.}}}
/* * Andrea Caravano (www.andreacaravano.net) * * Esercizio 1: "TiHoColpito" * Descrizione: Progettare un applicazione Client/Server in Java che, a seguito dell’invio, da parte del client, * di una stringa di testo contenente una lettera dell’alfabeto americano e un numero, separati da un Whitespace (es: C 6), * invii, in maniera casuale, una tra le due seguenti stringhe: * - “Colpito!” * - “Mancato, ritenta!" * Prima dell’invio, validare la correttezza della struttura dati e, se non valida, inviare al client una stringa vuota. * La comunicazione termina con l’invio, da parte del client, di una stringa vuota. * * 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.Random;importjava.util.Scanner;publicclassServerTiHoColpito{staticfinalintPORTALISTEN=9000;staticfinalStringLETTEREMAIUSCOLE="ABCDEFGHIJKLMNOPQRSTUVWXYZ";staticfinalStringLETTEREMINUSCOLE="abcdefghijklmnopqrstuvwxyz";staticfinalintMAXNUMERO=10;staticfinalString[]POSSIBILISTRINGHE={"Colpito!","Mancato, ritenta!"};publicstaticvoidmain(String[]args){try(ServerSocketprocessoServer=newServerSocket(PORTALISTEN)){System.out.format("Processo server avviato con il seguente indirizzo di socket: %s%n",processoServer.getLocalSocketAddress());while(true){try(SocketvariabileClient=processoServer.accept()){System.out.format("Processo client connesso con il seguente indirizzo di socket: %s%n",variabileClient.getRemoteSocketAddress());avviaComunicazione(variabileClient);}catch(IOExceptione){System.err.format("Errore connessione con client: %s%n",e.getMessage());}}}catch(IOExceptione){System.err.format("Errore lato server: %s%n",e.getMessage());}}privatestaticvoidavviaComunicazione(SocketvarClient)throwsIOException{BufferedReaderBR=newBufferedReader(newInputStreamReader(varClient.getInputStream(),"UTF-8"));PrintWriterPW=newPrintWriter(newOutputStreamWriter(varClient.getOutputStream(),"UTF-8"),true);StringstringaRicevuta=BR.readLine();System.out.format("Ricevuto dal client la stringa: %s%n",stringaRicevuta);while(stringaRicevuta.isEmpty()==false){ScannerS;try{S=newScanner(stringaRicevuta);StringletteraStr=S.next();charlettera=letteraStr.toCharArray()[0];intnumero=S.nextInt();if(letteraStr.length()>1)thrownewException();if(LETTEREMAIUSCOLE.contains(String.valueOf(lettera))||LETTEREMINUSCOLE.contains(String.valueOf(lettera)));else{thrownewException();}if(numero>=MAXNUMERO){thrownewException();}intnumeroEstratto=newRandom().nextInt(1+1);// Non viene scelto un seme.// Viene definita un'istanza di classe "Random", al momento dell'estrazione.System.out.format("E' stato estratto il numero: %d%n",numeroEstratto);PW.println((numeroEstratto==0)?POSSIBILISTRINGHE[0]:POSSIBILISTRINGHE[1]);}catch(Exceptione){System.err.println("Errore di formattazione dei dati da parte del client. Segnalazione...");PW.println("");}stringaRicevuta=BR.readLine();System.out.format("Ricevuto dal client la stringa: %s%n",stringaRicevuta);}System.out.println("Termine della comunicazione con il client...");}}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.