From c5d2ae30631663570b95db981aafa784534a02dc Mon Sep 17 00:00:00 2001
From: Simon32220 <Simon.Schnitzler@gmx.de>
Date: Sun, 21 Jul 2024 23:24:46 -0700
Subject: [PATCH] Homework1

---
 .../SchnitzlerUnicastNetworking.java          | 70 +++++++++++++++++++
 .../homework1/Schnitzler/package-info.java    | 10 +++
 2 files changed, 80 insertions(+)
 create mode 100644 assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java
 create mode 100644 assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/package-info.java

diff --git a/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java
new file mode 100644
index 0000000000..987ab61e24
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/SchnitzlerUnicastNetworking.java
@@ -0,0 +1,70 @@
+package MV3500Cohort2024JulySeptember.homework1.Schnitzler;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.PrintStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+/**
+ *
+ * @author simonschnitzler
+ */
+public class SchnitzlerUnicastNetworking {
+    
+    /** Default constructor */
+    public SchnitzlerUnicastNetworking()
+    {
+        // default constructor
+    }
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) {
+        try
+        {
+            System.out.println(SchnitzlerUnicastNetworking.class.getName() + " has started and is waiting for a connection.");
+            System.out.println("  help:     https://savage.nps.edu/Savage/developers.html#telnet");
+            System.out.println("  terminal: enter (telnet localhost 2317) or, for macOS (nc localhost 2317)..." );
+			
+            // The ServerSocket waits for a connection from a client.
+            // It returns a Socket object when the connection occurs.
+            ServerSocket serverSocket = new ServerSocket(2317);
+            
+            // Use Java io classes to write text (as opposed to
+            // unknown bytes of some sort) to the client
+            
+            // The Socket object represents the connection between
+            // the server and client, including a full duplex connection
+            try (Socket clientConnection = serverSocket.accept()) // listen, wait here for a client to connect
+            {
+                // OK we got something, time to respond!
+                // Use Java io classes to write text (as opposed to
+                // unknown bytes of some sort) to the client
+                OutputStream os = clientConnection.getOutputStream();
+                PrintStream  ps = new PrintStream(os);
+                
+                        ps.println("This client response was written by server " + SchnitzlerUnicastNetworking.class.getName()); // to remote client
+                System.out.println("This server response was written by server " + SchnitzlerUnicastNetworking.class.getName()); // to server console
+
+                // "flush()" in important in that it forces a write
+                // across what is in fact a slow connection
+                ps.flush();
+            }
+            System.out.println(SchnitzlerUnicastNetworking.class.getName() + " completed successfully.");
+        }
+        catch(IOException ioe)
+        {
+            System.err.println("Exception with " + SchnitzlerUnicastNetworking.class.getName() + " networking:"); // describe what is happening
+            System.err.println(ioe);
+            // Provide more helpful information to user if exception occurs due to running twice at one time
+            
+            // brute force exception checking, can be brittle if exception message changes
+            // if (e.getMessage().equals("Address already in use: NET_Bind")) 
+            if (ioe 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/MV3500Cohort2024JulySeptember/homework1/Schnitzler/package-info.java b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/package-info.java
new file mode 100644
index 0000000000..e717c85b9d
--- /dev/null
+++ b/assignments/src/MV3500Cohort2024JulySeptember/homework1/Schnitzler/package-info.java
@@ -0,0 +1,10 @@
+/**
+ * TCP Unicast homework assignments supporting the NPS MOVES MV3500 Networked Graphics course.
+ * 
+ * @see <a href="https://gitlab.nps.edu/Savage/NetworkedGraphicsMV3500/-/tree/master/assignments" target="_blank">networkedGraphicsMV3500 assignments</a>
+ * @see java.lang.Package
+ * @see <a href="https://stackoverflow.com/questions/22095487/why-is-package-info-java-useful" target="_blank">StackOverflow: why-is-package-info-java-useful</a>
+ * @see <a href="https://stackoverflow.com/questions/624422/how-do-i-document-packages-in-java" target="_blank">StackOverflow: how-do-i-document-packages-in-java</a>
+ */
+
+package MV3500Cohort2024JulySeptember.homework1.Schnitzler;
-- 
GitLab