/**{f}

 * EchoServer.java

 * Classe che gestisce la richiesta di connessione NON MULTITHREADING al server

 * da parte del client per la scrittura-lettura del client-server

 * attraverso l'uso di socket

 * @version 1.00 01/03/10

 * @author Bertolini Marta & Girotto Cristiano

 */

 

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

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

// definizione della classe

public class EchoServer

{

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

      public static void main(String[] args)

      {

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

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

            try

            {

            // creazione del serversocket sulla porta 1234

            ServerSocket SS = new ServerSocket(1234);

            // definizione dell'oggetto socket

            Socket s;

            // ciclo infinito in cui il server gestisce una chiamata dal client

            // e poi ritorna ad attedere una seconda chiamata

            // attenzione NON E' MULTITHREADING

            while(true){

            System.out.println("In attesa di chiamate");

            // attesa di una connessione da parte di un client che richiede il servizio sulla

            // porta del serversocket, nel caso corrente 1234.

            // Il metodo accept di serversocket restituisce un oggetto Socket

            // che nel nostro caso viene fatto corrispondere al riferimento s

            s = SS.accept();

            // 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()));

            //lettura attraverso l'oggetto din sul socket s: si tratta del messaggio inviato

            // dal client che ha richiesto la connessione

            String risposta = din.readLine();

            System.out.println("Ricevuto "+risposta);

            System.out.println("Risposta al client");

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

            // al client che ha richiesto la connessione

            dout.writeBytes("Server: ricevuto "+risposta+" \n");

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

            dout.flush();

            // chiudo i due buffer IO

            dout.close();

            din.close();

            }// while

            }// try

            // catch: gestione di un'eventuale anomalia

            catch (Exception e)

            {

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

            }// catch

      } // main

} // class EchoServer