import java.io.*;
import java.net.*;

class LineServer {
    public static void main( String[] args ) {
	try {
	    ServerSocket listen = new ServerSocket( 0 );
	    System.out.println("Server port is " + listen.getLocalPort() );

            /* handle one client at a time */
	    while ( true ) {
		Socket sock = listen.accept();

                /* data from client */
		BufferedReader rd = new BufferedReader(
		    new InputStreamReader( sock.getInputStream() ));

                /* data to client */
                BufferedWriter bw = new BufferedWriter( 
                    new OutputStreamWriter( sock.getOutputStream() ));

		System.out.println("Accepted connection from "
		     + sock.getInetAddress() + " at port " 
		     + sock.getPort() );

		String line = null;
		while ( (line=rd.readLine()) != null ) {
                    line = line.toUpperCase();
                    bw.write( line + "\n" );
                    bw.flush();
                    System.out.println( line );
		}
                System.out.println( "closing" + sock );
		sock.close(); // clean up required
	    }
	}
	catch( IOException e ) {
	    System.out.println("error: " + e );
	}
    }
}
