/**{f}

 * EchoClient.java

 * Classe che gestisce la scrittura-lettura del client-server

 * attraverso l'uso di socket

 * @version 1.00 01/03/01

 * @author Bertolini Marta & Girotto Cristiano

 */

 

import java.net.*; // package contenente gli oggetti Socket

import java.io.*;  // package contenente IOStream

// definizione della classe

public class EchoClient

{

// non sono presenti campi in quanto tutto è gestito dal metodo main

      public static void main(String[] args)

      {

            // controllo se il numero di parametri d'ingresso è corretto:

            // infatti devono essere usati due parametri d'ingresso: il primo

            // è una stringa che identifica l'indirizzo IP del server

            // (ad esempio localhost, 127.0.0.1, 192.168.18.20..); il secondo

            // parametro invece è la stringa che si invierà al server.

            // Le due stringhe sono contenute nel vettore di stringhe args

            // e precisamente le componenti args[0] e args[1].

            if(args.length<2) {

                  System.out.println(" Numero di parametri errato");

                  System.out.println(" Usare: java Client <IPServer> <messaggio>");

                  System.out.println(" Esempio: java Client 127.0.0.1 ByeBye");

                  return;

            }

            // i metodi relativi agli oggetti Socket e IOStream devono essere inseriti

            // in try-catch in quanto possono essere generate delle eccezioni

            try  {

            // definizione dell'oggetto socket: in questo caso è precisato

            // nel metodo costruttore l'indirizzo del server, come primo parametro

            // ed il numero di porta, come secondo parametro.

            Socket s = new Socket(args[0], 1234);

            // Creazione degli oggetti dout e din che rappresentano due Buffer di IO

            // attraverso i quali è possibile scrivere e leggere da socket

            DataOutputStream dout = new DataOutputStream(s.getOutputStream());

            BufferedReader din = new BufferedReader(new InputStreamReader(s.getInputStream()));

            System.out.println("Invio "+args[1] +" al server!");

            //scrittura attraverso l'oggetto dout sul socket s: si tratta del messaggio che il client invia

            // al server a cui il client ha richiesto la connessione

            dout.writeBytes(args[1]+"\n");

            // uso la funzione flush() per svuotare il buffer di dout.

            dout.flush();

            // gestione della risposta

            String risposta;

            System.out.println("Aspetto risposta dal server!");

            // lettura attraverso l'oggetto din sul socket s: si tratta della risposta inviata

            // dal server al client; in questo caso specifico viene gestito un numero di righe

            // di risposta anche maggiore di 1

                  while ((risposta=din.readLine())!=null)

                  {

                        System.out.println(risposta);

                  } // while

            } // try

            // catch: gestione di un'eventuale anomalia

            catch (Exception e)

            {

                        System.out.println("Errore in Client.main "+e);

            } // catch

      } // main

} // class