From 03216cc9d9ead9a6c0ce12adf7f56a1958a23a5d Mon Sep 17 00:00:00 2001
From: Bill <Bill@Bestroyer>
Date: Wed, 5 Aug 2020 18:53:00 -0700
Subject: [PATCH]

---
 .../homework2/Mahan/Mahan_Client.java         |  81 +++++++++++++++
 .../homework2/Mahan/Mahan_Server.java         |  94 ++++++++++++++++++
 .../homework2/Mahan/Output.PNG                | Bin 0 -> 20709 bytes
 .../homework2/Mahan/README.md                 |   8 ++
 4 files changed, 183 insertions(+)
 create mode 100644 assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java
 create mode 100644 assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java
 create mode 100644 assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Output.PNG

diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java
new file mode 100644
index 0000000000..a3bc4bc626
--- /dev/null
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Client.java
@@ -0,0 +1,81 @@
+package MV3500Cohort2020JulySeptember.homework2.Mahan;
+
+import java.io.*;
+import java.net.*;
+/**
+ *
+ * @author Bill
+ */
+public class Mahan_Client {
+
+    // IPv6 String constant for localhost address, similarly IPv4 127.0.0.1
+    public final static String LOCALHOST = "0:0:0:0:0:0:0:1";
+
+    public static void main(String[] args) {
+        
+        // Local vars/fields
+        Socket socket;
+        InputStream is;
+        InputStreamReader isr;
+        BufferedReader br;
+        String serverMessage;
+        Integer count = 0;
+        
+        OutputStream os;
+        PrintStream ps;
+        
+        
+        try {
+            while (true) {
+                System.out.println("TcpExample3Client 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.println("'Knock, knock,' says the MahanClient.");
+                System.out.println("The MahanServer responds by saying: '" + serverMessage + "'");
+                System.out.println("A frustrated MahanClient responds, 'Answer your door! I have knocked "+ count +" times.");
+                count++;
+                // socket gets closed, either automatically/silently by this code (or possibly by the server)
+                
+                
+                // Now hook everything up (i.e. set up the streams), Java style:
+                os = socket.getOutputStream();
+                ps = new PrintStream(os);
+                ps.println("This message was produced by the MahanClient."); // this gets sent back to client!
+                
+                ps.flush();
+                
+                
+                
+            } // end while(true)
+        } catch (IOException e) {
+            System.err.println("Problem with TcpExample3ServerClient 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 {
+        
+            // program exit: tell somebody about that
+            System.out.println("\nclient exit");
+        }
+    }
+}
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java
new file mode 100644
index 0000000000..7e8ef6460b
--- /dev/null
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Mahan_Server.java
@@ -0,0 +1,94 @@
+package MV3500Cohort2020JulySeptember.homework2.Mahan;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ *
+ * @author Bill
+ */
+public class Mahan_Server {
+
+    public static void main(String[] args) {
+        try {
+            
+            // ServerSocket waits for a connection from a client. 
+            // Notice that it is outside the loop; ServerSocket
+            // needs to be made only once.
+            System.out.println("TcpExample3Server has started..."); // it helps debugging to put this on console first
+            
+            ServerSocket serverSocket = new ServerSocket(2317);
+            OutputStream os;
+            PrintStream ps;
+            InetAddress localAddress, remoteAddress;
+            
+            InputStream is;
+            InputStreamReader isr;
+            BufferedReader br;
+            String clientMessage;
+            int localPort, remotePort;
+
+            // Server is up and waiting (i.e. "blocked" or paused)
+            // Loop, infinitely, waiting for client connections.
+            // Stop the program somewhere else.
+            while (true) { 
+                
+                // block until connected to a client
+                try (Socket clientConnection = serverSocket.accept()) {
+                    
+                    // Now hook everything up (i.e. set up the streams), Java style:
+                    os = clientConnection.getOutputStream();
+                    ps = new PrintStream(os);
+                    ps.println("Go away!"); // this gets sent back to client!
+                    
+                    // Print some information locally about the Socket connection.
+                    // This includes the port and IP numbers on both sides (the socket pair).
+                    localAddress = clientConnection.getLocalAddress();
+                    remoteAddress = clientConnection.getInetAddress();
+                    localPort = clientConnection.getLocalPort();
+                    remotePort = clientConnection.getPort();
+                    
+                    // My socket pair connection looks like this, to localhost:
+                    // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54876 ))
+                    // Socket pair: (( /0:0:0:0:0:0:0:1, 2317 ), ( /0:0:0:0:0:0:0:1, 54881 ))
+                    
+                    // Why is the first IP/port the same, while the second set has different ports?
+                    System.out.println("TcpExample3Server socket pair: (( " + localAddress.toString() + ", " + localPort + " ), ( "
+                            + remoteAddress.toString() + ", " + remotePort + " ))");
+                    
+                    // Notice the use of flush() and try w/ resources. Without
+                    // the try w/ resources the Socket object may stay open for
+                    // a while after the client has stopped needing this
+                    // connection. try w/ resources explicitly ends the connection.
+                    
+                                    // Now hook everything up (i.e. set up the streams), Java style:
+                is = clientConnection.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.
+                clientMessage = br.readLine();
+                System.out.println("==================================================");
+                System.out.println("Now we're talking!");
+                System.out.println("The message the server sent was: '" + clientMessage + "'");
+//                System.out.println("This was the "+ count +" connection.");
+                    
+                    
+                    
+                    ps.flush();
+                    // like it or not, you're outta here!
+                }
+            }
+        } catch (IOException e) {
+            System.err.println("Problem with TcpExample3Server networking: " + 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!");
+            }
+        }
+    }
+}
diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Output.PNG b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/Output.PNG
new file mode 100644
index 0000000000000000000000000000000000000000..f4186dec73b83c4b7ee9acc2922bab7e7c281935
GIT binary patch
literal 20709
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
O+CfiOKbLh*2~7Y3L;mUj

literal 0
HcmV?d00001

diff --git a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md
index 0144d62d03..6b0b4f34a9 100644
--- a/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md
+++ b/assignments/src/MV3500Cohort2020JulySeptember/homework2/Mahan/README.md
@@ -10,3 +10,11 @@ References include
 * [assignments source subdirectories](../../../../../assignments/src) show examples from previous cohorts. 
 
 Questions and innovation are always welcome, good luck!
+
+Coded two classes:
+MahanServer
+MahanClient
+
+1. Run the MahanServer once
+2. Run the MahanClient as many times as you want
+3. Enjoy the messages from the two consoles 
\ No newline at end of file
-- 
GitLab