ServerSocket objects you create will use their accept() method to connect to a client.
 public Socket accept() throws IOException
There are no getInputStream() or getOutputStream() methods for ServerSocket.
Instead you use  accept() to return a Socket object, and then call its 
getInputStream() or getOutputStream() methods.For example,
  try {
    ServerSocket ss = new ServerSocket(2345);
    Socket s = ss.accept();
    PrintWriter pw = new PrintWriter(s.getOutputStream());
    pw.println("Hello There!");
    pw.println("Goodbye now.);
    s.close();
  }
  catch (IOException e) {
    System.err.println(e);
  }
Notice in this example, I closed the Socket s, not the ServerSocket ss.
ss is still bound to port 2345. You get a new socket for each connection
but it's easy to reuse the server socket. For example, the next code fragment
repeatedly accepts connections:
  try {
    ServerSocket ss = new ServerSocket(2345);
    while (true) {
      Socket s = ss.accept();
      PrintWriter pw = new PrintWriter(s.getOutputStream());
      pw.println("Hello There!");
      pw.println("Goodbye now.);
      s.close();
    }
  }
  catch (IOException e) {
    System.err.println(e);
  }