Skip to content
Snippets Groups Projects
HW1Client.java 4.22 KiB
package MV3500Cohort2023MarchJune.homework1.Islas;

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

/**
 * Before, we always used telnet (netcat) to connect to the server. Here we are 
 * now writing our own program to do the connection.
 *
 * As you will see, when we run this after we start the server we will see the
 * same string telnet printed, sent by the server. The output at the server will
 * show different socket pairs for each time the loop iterates.
 *
 * @author mcgredo
 * @author brutzman@nps.edu
 */
public class HW1Client {
      /** Default constructor */
      public HW1Client()
      {
          // default constructor
      }
  
      /** IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
       * @see <a href="https://en.wikipedia.org/wiki/localhost">https://en.wikipedia.org/wiki/localhost</a>
       * @see <a href="https://en.wikipedia.org/wiki/IPv6_address">https://en.wikipedia.org/wiki/IPv6_address</a> 
       */
      public final static String LOCALHOST = "0:0:0:0:0:0:0:1"; //Local host
  
      /**
       * Program invocation, execution starts here
       * @param args command-line arguments
       */
      public static void main(String[] args)
      {        
          // Local variables/fields
          Socket socket = null;
          InputStream is;
          Reader isr;
          BufferedReader br;
          String serverMessage;
          int clientLoopCount = 0;
          
          try {
              while (true)
              {
                  clientLoopCount++; // increment at beginning of loop for reliability
                  System.out.println(HW1Client.class.getName() + " creating socket...");
  
                  // We request an IP to connect to ("localhost") and
                  // port number at that IP (2317). This establishes
                  // a connection to that IP in the form of a Socket
                  // object; the server uses a ServerSocket to wait for
                  // connections.
                  socket = new Socket(LOCALHOST, 2317); // locohost? 
  
                  // Now hook everything up (i.e. set up the streams), Java style:
                  is  = socket.getInputStream();
                  isr = new InputStreamReader(is);
                  br  = new BufferedReader(isr);
  
                  // Read a single line written by the server. We'd
                  // do things a bit differently if there were many lines to be read
                  // from the server instead of one only.
                  serverMessage = br.readLine();
                  System.out.println("==================================================");
                         
                  System.out.print  ("Client loop " + clientLoopCount + ": ");
                  System.out.println("now we're talking!");
                  System.out.println("The message the server sent was: '" + serverMessage + "'");
                  // socket gets closed, either automatically/silently by this code (or possibly by the server)
                  
                  Thread.sleep(500l); // slow things down, for example 500l (long) = 500 msec (1/2 second)
                  
              } // end while(true) // infinite loops are dangerous, be sure to kill this process!
          } 
          catch (IOException | InterruptedException e )
          {
              System.err.println("Problem with " + HW1Client.class.getName() + " networking:"); // describe what is happening
              System.err.println("Error: " + e);
              
              // Provide more helpful information to user if exception occurs due to running twice at one time
              if (e instanceof java.net.BindException) {
                  System.err.println("*** Be sure to stop any other running instances of programs using this port!");
              }
          }
          finally // occurs after any other activity when shutting down
          {
              try {
                  if (socket != null)
                      socket.close();
              } catch (IOException e) {}
              
              // program exit: tell somebody about that happening.  Likely cause: server drops connection.
              System.out.println();
              System.out.println(HW1Client.class.getName() + " exit");
          }
      }
}