title: java.lang.NullPointerException and java.net.SocketException
body: <p>I’m trying to socket program in Java. Here the client sends a string which should be reversed by the server and sent back to the client. The server is a multithreaded server. Here is the client-side code:</p>
  
  <pre><code>import java.io.*;
  import java.net.*;
  
  class ClientSystem
  {
      public static void main(String[] args)
      {
              String hostname = "127.0.0.1";
              int port = 1234;
  
              Socket clientsocket = null;
              DataOutputStream output =null;
              BufferedReader input = null;
  
              try
              {
                      clientsocket = new Socket(hostname,port);
                      output = new DataOutputStream(clientsocket.getOutputStream());
                      input = new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
              }
              catch(Exception e)
              {
                      System.out.println("Error occured"+e);
              }
  
              try
              {
                      while(true)
                      {
                              System.out.println("Enter input string ('exit' to terminate connection): ");
                              BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                              String inputstring = br.readLine();
                              output.writeBytes(inputstring+"\n");
  
                              //int n = Integer.parseInt(inputstring);
                              if(inputstring.equals("exit"))
                                      break;
  
                              String response = input.readLine();
                              System.out.println("Reversed string is: "+response);
  
                              output.close();
                              input.close();
                              clientsocket.close();
                      }
              }
              catch(Exception e)
              {
                      System.out.println("Error occured."+e);
              }
      }
  }
  </code></pre>
  
  <p>Here is the server side code:</p>
  
  <pre><code>import java.io.*;
  import java.net.*;
  
  public class ServerSystem
  {
      ServerSocket server = null;
      Socket clientsocket = null;
      int numOfConnections = 0, port;
  
      public ServerSystem(int port)
      {
              this.port = port;
      }
  
      public static void main(String[] args)
      {
              int port = 1234;
              ServerSystem ss = new ServerSystem(port);
              ss.startServer();
      }
  
      public void startServer()
      {
              try
              {
                      server = new ServerSocket(port);
              }
              catch(Exception e)
              {
                      System.out.println("Error occured."+e);
              }
  
              System.out.println("Server has started. Ready to accept connections.");
  
              while(true)
              {
                      try
                      {
                              clientsocket = server.accept();
                              numOfConnections++;
                              ServerConnection sc = new ServerConnection(clientsocket, numOfConnections, this);
                              new Thread(sc).start();
                      }
                      catch(Exception e)
                      {
                              System.out.println("Error occured."+e);
                      }
              }
      }
  
      public void stopServer()
      {
              System.out.println("Terminating connection");
              System.exit(0);
      }
  }
  
  class ServerConnection extends Thread
  {
      BufferedReader br;
      PrintStream ps;
      Socket clientsocket;
      int id;
      ServerSystem ss;
  
      public ServerConnection(Socket clientsocket, int numOfConnections, ServerSystem ss)
      {
              this.clientsocket = clientsocket;
              id = numOfConnections;
              this.ss = ss;
  
              System.out.println("Connection "+id+" established with "+clientsocket);
              try
              {
                      br = new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
                      ps = new PrintStream(clientsocket.getOutputStream());
              }
              catch(Exception e)
              {
                      System.out.println("Error occured."+e);
              }
      }
  
      public void run()
      {
              String line, reversedstring = "";
  
              try
              {
                      boolean stopserver = false;
                      while(true)
                      {
                              line = br.readLine();
                              System.out.println("Received string: "+line+" from connection "+id);
                              //long n = Long.parseLong(line.trim());
  
                              if(line.equals("exit"))
                              {
                                      stopserver = true;
                                      break;
                              }
                              else
                              {
                                      int len = line.length();
                                      for (int i=len-1; i&gt;=0; i--)
                                              reversedstring = reversedstring + line.charAt(i);
                                              ps.println(""+reversedstring);
                              }
                      }
                      System.out.println("Connection "+id+" is closed.");
                    br.close();
                      ps.close();
                      clientsocket.close();
  
                      if(stopserver)
                              ss.stopServer();
              }
              catch(Exception e)
              {
                      System.out.println("Error occured."+e);
              }
      }
  }
  </code></pre>
  
  <p>I get a java.lang.NullPointerException on the server side code when I enter the string and when i try to re-enter the string I get a java.net.SocketException: Socket closed exception.</p>
  
  <p>Client side output:</p>
  
  <pre><code>Enter input string ('exit' to terminate connection): 
  usa
  Reversed string is: asu
  Enter input string ('exit' to terminate connection): 
  usa
  Error occured.java.net.SocketException: Socket closed
  </code></pre>
  
  <p>Server side output:</p>
  
  <pre><code>Server has started. Ready to accept connections.
  Connection 1 established with Socket[addr=/127.0.0.1,port=3272,localport=1234]
  Received string: usa from connection 1
  Received string: null from connection 1
  Error occured.java.lang.NullPointerException
  </code></pre>
  
  <p>I tried a lot but I don't get from where I get these exceptions. </p>