
/*
   This program is a server that takes connection requests on
   the port specified by the constant LISTENING_PORT.  When a
   connection is opened, the program sends the current time to
   the connected socket.  The program will continue to receive
   and process consinections until it is killed (by a CONTROL-C,
   for example).  Note that this server processes each connection
   as it is received, rather than creating a separate thread
   to process the connection.
*/

import java.net.*;
import java.io.*;
import java.util.Date;

public class DateServe {

   static final int LISTENING_PORT = 32007;


   public static void main(String[] args) {
   
      ServerSocket listener;  // Listens for incoming connections.
      Socket connection;      // For communication with the
                              //             connecting program.
            
      /* Accept and process connections forever, or until
         some error occurs.  (Note that errors that occur 
         while communicating with a connected program are
         caught and handled in the sendDate() routine, so
         they will not crash the server.)
      */
            
      try {
         listener = new ServerSocket(LISTENING_PORT);
         TextIO.putln("Listening on port " + LISTENING_PORT);
         while (true) {
            connection = listener.accept();
            sendDate(connection);
         }
      }
      catch (Exception e) {
         TextIO.putln("Sorry, the server has shut down.");
         TextIO.putln("Error:  " + e);
         return;
      }
      
   }  // end main()
   

   static void sendDate(Socket client) {
        // The parameter, client, is a socket that is
        // already connected to another program.  Get
        // an output stream for the connection, send the
        // current date, and close the connection.
      try {
         System.out.println("Connection from " + 
                       client.getInetAddress().toString() );
         Date now = new Date();  // The current data and time.
         PrintWriter outgoing;   // Stream for sending data.
         outgoing = new PrintWriter( client.getOutputStream() );
         outgoing.println( now.toString() );
         outgoing.flush();  // Make sure the data is actually sent!
         client.close();
      }
      catch (Exception e){
         System.out.println("Error: " + e);
      }
   } // end sendDate()
   

} //end class DateServe
