/**{f}

 * SimpleWebServer.java

 * Classe che è in attesa di connessioni e serve semplici documenti HTML

 * attraverso l'uso di socket

 * @version 1.00 01/03/01

 * @author Bertolini Marta & Girotto Cristiano

 */

 

import java.io.*.

import java.net.*.

  public class SimpleWebServer {

    public static void main(String args[])

    {

        ServerSocket serverSocket = null;

        Socket clientSocket = null;

        int connects = 0;

        try

        {

            // Crea il  server socket

            serverSocket = new ServerSocket(80, 5);

 

            while (connects < 5)

            {

                // aspetta per una connessione

                clientSocket = serverSocket.accept();

 

                //Serve la connessione

                ServiceClient(clientSocket);

                connects++;

            }

            serverSocket.close();

        }

        catch (IOException ioe)

        {

            System.out.println("Error in SimpleWebServer: " + ioe);

            ioe.printStackTrace();

        }

    }

 

    public static void ServiceClient(Socket client)

        throws IOException

    {

        BufferedReader inbound = null;

        OutputStream outbound = null;

        try

        {

            // Acquisisce lo streams per IO

            inbound = new BufferedReader(

                new InputStreamReader(client.getInputStream()) );

 

            StringBuffer buffer = PrepareOutput();

            String inputLine;

            while ((inputLine = inbound.readLine()) != null)

           {

                System.out.println(inputLine);

                //  all  fine della richiesta, manda la risposta 

                if ( inputLine.equals("") )

                {

                    outbound = client.getOutputStream();

                    outbound.write(buffer.toString().getBytes());

                    break;

                }

            }

        }

        finally

        {

            // Chiude le connessioni

            System.out.println("Cleaning up connection: " + client);

            outbound.close();

            inbound.close();

            client.close();

        }

    }

 

    public static StringBuffer PrepareOutput()

    {

        StringBuffer outputBuffer = new StringBuffer();

        outputBuffer.append("<HTML>\n<HEAD>\n<TITLE>Test HTML Document</TITLE>\n");

        outputBuffer.append("</HEAD>\n");

        outputBuffer.append("<BODY>\n<STRONG>Ciao a Tom Orly e Saimon Munaro !</STRONG>\n");

        outputBuffer.append("</BODY>\n");

        outputBuffer.append("</HTML>\n");

 

        // Forma  HTTP response header

        StringBuffer headerBuffer = new StringBuffer();

        headerBuffer.append("HTTP/1.0 200 OK\r\n");

        headerBuffer.append("Content-type: text/html\r\n");

        headerBuffer.append("Content-length: " + outputBuffer.length() );

        headerBuffer.append("\r\n\r\n");

        headerBuffer.append(outputBuffer.toString());

        return headerBuffer;

    }

 

    /**

     * una semplice routine di sleep

     * @param numero di millisecondi d'arresto

     */

    private static void sleep(int a)

    {

       try

        {

            Thread.currentThread().sleep(a);

        }

        catch (InterruptedException e)

       {

        }

    }

 }