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

public class Socket3 {
  //listen on a port waiting for a connection requesting a service
  //we just send the same data back for illustration
  public static void main(String[] args) {

    ServerSocket serverSocket = null;
    try {
      serverSocket = new ServerSocket( 5001 ); //any port >= 1024
    }
    catch( IOException exception ) {
      System.err.println( exception );
      System.exit(1);
    }
    System.out.println("Started successfully");

    for (;;) { //forever
      try {
        Socket socket = serverSocket.accept(); //blocks waiting for a connection

        System.out.println("Remote server " + socket.getInetAddress() +
                           " connected from port " + socket.getPort() );

        BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream() ) );
        PrintWriter out = new PrintWriter( socket.getOutputStream() );

        String request;
        while ( ( request = in.readLine() ) != null ) {
          out.println( request );
          out.flush();
        }
        in.close();
        out.close();
        socket.close();
      }
      catch( IOException exception ) {
        System.err.println( exception );
      }
    }

  }// end main
}  // end Socket3
