/* 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