title: A simple java client server program
body: <p>So I did this client server program in java for my college mini project. Note that this is just a small module of a big project I'm working on. I need a string to be sent from the client to the server. The server will return back the string as it is back to the client. (The code will be modified later such that the string is processed before sending back). The client will send a string whenever needed to the server. Thus it means it is compulsory for the server to be running for indefinite time. </p>
  
  <p>The problem I face here is that my server works perfectly only for the first time when the client sends a string. If I run the client the second time with a different string, I get back the same string I sent to the server previously! </p>
  
  <p>Here is my server program:</p>
  
  <pre><code>        public class Server {
  
          public static boolean x = true;
          public static String reply;
  
          public static void main(String a[]) throws Exception {
  
          System.out.println("Entered server console..");
              Socket echoSocket = null;
              ServerSocket serverSocket = null;
              PrintWriter out = null;
              BufferedReader in = null;
  
              System.out.println("Initializing Connection..");
  
              boolean runFlag = true;
              try {
                  serverSocket = new ServerSocket(77);
  
                  while (runFlag) {
                      echoSocket = serverSocket.accept();
  
                      out = new PrintWriter(echoSocket.getOutputStream(), true);
  
                      BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
  
                      while (x) {
  
                          in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
                          reply = in.readLine();
                          if (reply != null) {
                              x = false;
                          }
                      }
                      System.out.println("received: " + reply);
  
                      out.println(reply);
  
                      System.out.println("sent back: " + reply);
                      stdIn.close();
                  }
  
              } catch (Exception e) {
                  System.out.println("Exception in starting server: " + e.getMessage());
              } finally {
                  out.close();
                  in.close();
                  echoSocket.close();
              }
  
          }
      }
  </code></pre>
  
  <p>Here is my Client program:</p>
  
  <pre><code>    public class Client {
      public static String reply,temp;
      public static boolean x=true;
  
      public Client()
      {
          temp="lala";
      }
      public Client(String t)
      {
          temp=t;
      }
  
      public static void main(String[] args) throws IOException {
  
          Socket echoSocket = null;
          PrintWriter out = null;
          BufferedReader in = null;
  
          try {
              echoSocket = new Socket("localhost", 77);
              out = new PrintWriter(echoSocket.getOutputStream(), true);
              in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
          } catch (UnknownHostException e) {
              System.err.println("Don't know about host: localhost.");
              System.exit(1);
          } catch (IOException e) {
              System.err.println("Couldn't get I/O for the connection to: localhost.");
              System.exit(1);
          }
  
          BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
  
          temp="lala"; //this is the string to be sent
  
          out.println(temp);
  
          while (x) {
              reply= in.readLine();
              if(reply!=null)
              {
                  x=false;
              }
          }
  
          System.out.println("reply: "+reply);
  
          out.close();
          in.close();
          stdIn.close();
          echoSocket.close();
      }
  }
  </code></pre>
  
  <p>Can anyone help me find what the problem here is?</p>