/* * 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. */ import java.io.*; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class ClientTiHoColpito { static final String INDIRIZZOSERVER = "127.0.0.1"; static final int PORTASERVER = 9000; public static void main(String[] args) { try (Socket processoClient = new Socket(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 (UnknownHostException e) { System.err.println("Server non contattabile. Possibile errore di immissione."); } catch (IOException e) { System.err.format("Errore connessione con server: %s%n", e.getMessage()); } } private static void avviaComunicazione(Socket processoClient) throws IOException { BufferedReader BR = new BufferedReader(new InputStreamReader(processoClient.getInputStream(), "UTF-8")); PrintWriter PW = new PrintWriter(new OutputStreamWriter(processoClient.getOutputStream(), "UTF-8"), true); Scanner S; try { System.out.print("Indicare le coordinate da consegnare al client, separate da Whitespace: "); S = new Scanner(System.in); String letturaScanner = S.nextLine(); while (letturaScanner.isEmpty() == false) { S = new Scanner(letturaScanner); String lettera = S.next(); int numero = S.nextInt(); PW.println(String.format("%s %d", lettera, numero)); String risposta = BR.readLine(); if (risposta.isEmpty()) { throw new Exception(); } else { System.out.format("Risposta del server: %s%n", risposta); } System.out.print("Indicare le coordinate da consegnare al client, separate da Whitespace: "); S = new Scanner(System.in); letturaScanner = S.nextLine(); } PW.println(""); } catch (Exception e) { System.err.println("Errore nell'immissione dati. Riprova."); PW.println(""); // Indico al server, come previsto dal protocollo, la volontà di chiudere la comunicazione. } } }