Skip to content
Snippets Groups Projects
TcpExample4Client.java 3.97 KiB
package MV3500Cohort2024JulySeptember.homework2.Romero;

import java.io.*;
import java.net.*;
//import java.time.LocalTime; // conversion?

/**
 * This client program establishes a socket connection to the {@link TcpExample4DispatchServer},
 * then checks how long it takes to read the single line it expects as a server response.
 * No fancy footwork here, it is pretty simple and similar to {@link TcpExample3Client}.
 * 
 * @see TcpExample4DispatchServer
 * @see TcpExample4HandlerThread
 *
 * @see <a href="../../../src/TcpExamples/TcpExample4TerminalLog.txt" target="blank">TcpExample4TerminalLog.txt</a>
 * @see <a href="../../../src/TcpExamples/TcpExample4SequenceDiagram.png" target="blank">TcpExample4SequenceDiagram.png</a>
 * @see <a href="../../../src/TcpExamples/TcpExample4SequenceSketch.png" target="blank">TcpExample4SequenceSketch.png</a>
 * 
 * @author Don McGregor
 * @author Don Brutzman
 * @author MV3500 class
 */
public class TcpExample4Client
{
    /** Default constructor */
    public TcpExample4Client()
    {
        // default constructor
    }
    static String DESTINATION_HOST = "localhost";
    static int    MAX_LOOP_COUNT   = 4;

    /**
     * Program invocation, execution starts here
     * @param args command-line arguments
     */
    public static void main(String[] args) {
        try {
            System.out.println(TcpExample4Client.class.getName() + " start, loop " + MAX_LOOP_COUNT + " times");
            System.out.println("=======================================================");
            for (int loopCount = 1; loopCount <= MAX_LOOP_COUNT; loopCount++) // loop then exit
            {
                System.out.println(TcpExample4Client.class.getName() + " creating new socket #" + loopCount + "...");

                // 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 the Socket
                // object; the server uses a ServerSocket to wait for
                // connections.This particualar example is interacting
                // with what it expects is a server that writes a single text
                // line after 10 sec.
                long startTime = System.currentTimeMillis();

                // open a socket for each loop
		Socket socket = new Socket(DESTINATION_HOST, 2317);

                // Setup.  Read the single line written by the server.
                // We'd do things a bit differently if many lines to be read
                // from the server, instead of one only.
                InputStream is = socket.getInputStream();
                Reader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);

                String serverMessage = br.readLine(); // blocks
                long readTime = System.currentTimeMillis();
                long timeLength = readTime - startTime;

                System.out.println(TcpExample4Client.class.getName() + ": message received from server='" + serverMessage + "'");
                System.out.println(TcpExample4Client.class.getName() + ": time msec required for read=" + timeLength);
                System.out.println("=======================================================");
                // To push this further, launch multiple copies of TcpExample4Client simultaneously
            }
            System.out.println(TcpExample4Client.class.getName() + " complete");
            // main method now exits
        } catch (IOException e) {
            System.out.println("Problem with " + TcpExample4Client.class.getName() + " networking:networking:"); // describe what is happening
            System.out.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.out.println("*** Be sure to stop any other running instances of programs using this port!");
            }
        }
    }
}