diff --git a/CourseExamples/src/UdpMulticastHttpExamples/UdpReceiver.java b/CourseExamples/src/UdpMulticastHttpExamples/UdpReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..d171e380f5ca4d41f3a6b4aa9e5fbc7aae472430
--- /dev/null
+++ b/CourseExamples/src/UdpMulticastHttpExamples/UdpReceiver.java
@@ -0,0 +1,52 @@
+package UdpMulticastHttpExamples;
+
+import java.io.*;
+import java.net.*;
+/**
+ * An example of receiving UDP packets. Since very often both the
+ * sender and receiver are on the same host we use different ports
+ * for each. This prevents complaints from the localhost.
+ * 
+ * @author mcgredo
+ */
+public class UdpReceiver 
+{
+    public static final int       SENDING_PORT = 1414;
+    public static final int     RECEIVING_PORT = 1415;
+    public static final String DESINATION_HOST = "localhost";
+
+    /**
+     * @param args the command line arguments
+     */
+    public static void main(String[] args) 
+    {
+        try
+        {
+            System.out.println("UdpReceiver started...");
+            // Create a UDP socket
+            DatagramSocket udpSocket = new DatagramSocket(RECEIVING_PORT);
+            
+            // You need a new receiving packet to read from every packet received
+            while (true)
+            {
+                byte[] receiveBuffer = new byte[1500];
+                DatagramPacket receivePacket = new DatagramPacket(receiveBuffer, receiveBuffer.length);
+                udpSocket.receive(receivePacket);
+                
+                // Decode the contents by extracting the data from the packet
+                ByteArrayInputStream bais = new ByteArrayInputStream(receivePacket.getData());
+                DataInputStream dis = new DataInputStream(bais);
+                
+                // What happens if you read an integer? Two double values? ***
+                float  first = dis.readFloat(); // alternatives: readFloat(); readInt(); dis.readUTF(); 
+                float second = dis.readFloat();
+                System.out.println("first value: " + first + " second value: " + second);
+            }
+        }
+        catch(IOException e)
+        {
+            System.out.println("Problem with UdpReceiver, see exception trace:");
+            System.out.println(e);
+        }
+    }
+}
diff --git a/CourseExamples/src/UdpMulticastHttpExamples/UdpSender.java b/CourseExamples/src/UdpMulticastHttpExamples/UdpSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb6064b09831c11ce70224c125c674ee1005788c
--- /dev/null
+++ b/CourseExamples/src/UdpMulticastHttpExamples/UdpSender.java
@@ -0,0 +1,68 @@
+package UdpMulticastHttpExamples;
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * An example of sending UDP packets. The sending and receiving programs
+ * use different UDP ports; there can be problems getting this to work
+ * if both the sending and receiving sockets try to use the same port
+ * on the same host.
+ * 
+ * @author mcgredo
+ */
+public class UdpSender 
+{
+
+    public static final int      SENDING_PORT   = 1414;
+    public static final int      RECEIVING_PORT = 1415;
+    public static final String DESTINATION_HOST = "localhost";
+    
+	@SuppressWarnings("SleepWhileInLoop")
+    public static void main(String[] args) 
+    {
+        try
+        {
+            System.out.println("UdpSender started...");
+            // Create a UDP socket
+            DatagramSocket udpSocket = new DatagramSocket(SENDING_PORT);
+            
+            // Put together a message with binary content. "ByteArrayOutputStream"
+            // is a java.io utility that lets us put together an array of binary
+            // data, which we put into the UDP packet.
+            
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            DataOutputStream dos = new DataOutputStream(baos);
+			// alternatives: writeFloat(17.0f); writeInt(17); writeUTF("\"hello MV3500 no really\"");
+            dos.writeFloat(17.0f);
+            dos.writeFloat(24.0f);
+            byte[] buffer = baos.toByteArray();
+            
+            // Put together a packet to send
+            
+            // ID of the host we are sending to
+            InetAddress destinationAddress = InetAddress.getByName(DESTINATION_HOST);
+            
+            DatagramPacket packet = new DatagramPacket(buffer, buffer.length, destinationAddress, RECEIVING_PORT );
+       
+            // How fast does this go? Does UDP try to slow it down, or does
+            // this cause network problems? (hint: yes for an unlimited send
+            // rate, unlike TCP). How do you know on the receiving side
+            // that you haven't received a duplicate UDP packet, out of
+            // order packet, or dropped packet?
+            
+            for (int index = 1; index <= 100; index++) // avoid infinite send loops in code, they can be hard to kill!
+            {
+               udpSocket.send(packet);
+               Thread.sleep(1000); // Send 100, one per second
+               System.out.println("Sent packet " + index + " of 100");
+            }
+            System.out.println("UdpSender complete.");
+        }
+        catch (IOException | InterruptedException e)
+        {
+            System.out.println("Problem with UdpSender, see exception trace:");
+            System.out.println(e);
+        }
+    }
+}
diff --git a/CourseExamples/src/UdpMulticastHttpExamples/UdpTerminalLog.txt b/CourseExamples/src/UdpMulticastHttpExamples/UdpTerminalLog.txt
new file mode 100644
index 0000000000000000000000000000000000000000..daf5bcbf6686f02c29a7c50bc0698dc6d42a7a24
--- /dev/null
+++ b/CourseExamples/src/UdpMulticastHttpExamples/UdpTerminalLog.txt
@@ -0,0 +1,122 @@
+Invocation instructions:
+1. run/debug UdpReceiver.java
+2. run/debug UdpSender.java
+
+Program responses:
+
+===================================================
+run:
+UdpSender started...
+Sent packet 1 of 100
+Sent packet 2 of 100
+Sent packet 3 of 100
+Sent packet 4 of 100
+Sent packet 5 of 100
+Sent packet 6 of 100
+Sent packet 7 of 100
+Sent packet 8 of 100
+Sent packet 9 of 100
+Sent packet 10 of 100
+Sent packet 11 of 100
+Sent packet 12 of 100
+Sent packet 13 of 100
+Sent packet 14 of 100
+Sent packet 15 of 100
+Sent packet 16 of 100
+Sent packet 17 of 100
+Sent packet 18 of 100
+Sent packet 19 of 100
+Sent packet 20 of 100
+Sent packet 21 of 100
+Sent packet 22 of 100
+Sent packet 23 of 100
+Sent packet 24 of 100
+Sent packet 25 of 100
+Sent packet 26 of 100
+Sent packet 27 of 100
+Sent packet 28 of 100
+Sent packet 29 of 100
+Sent packet 30 of 100
+Sent packet 31 of 100
+Sent packet 32 of 100
+Sent packet 33 of 100
+Sent packet 34 of 100
+Sent packet 35 of 100
+Sent packet 36 of 100
+Sent packet 37 of 100
+Sent packet 38 of 100
+Sent packet 39 of 100
+Sent packet 40 of 100
+Sent packet 41 of 100
+Sent packet 42 of 100
+Sent packet 43 of 100
+Sent packet 44 of 100
+Sent packet 45 of 100
+Sent packet 46 of 100
+Sent packet 47 of 100
+Sent packet 48 of 100
+Sent packet 49 of 100
+Sent packet 50 of 100
+Sent packet 51 of 100
+Sent packet 52 of 100
+Sent packet 53 of 100
+Sent packet 54 of 100
+Sent packet 55 of 100
+Sent packet 56 of 100
+Sent packet 57 of 100
+Sent packet 58 of 100
+Sent packet 59 of 100
+Sent packet 60 of 100
+Sent packet 61 of 100
+Sent packet 62 of 100
+Sent packet 63 of 100
+Sent packet 64 of 100
+Sent packet 65 of 100
+Sent packet 66 of 100
+Sent packet 67 of 100
+Sent packet 68 of 100
+Sent packet 69 of 100
+Sent packet 70 of 100
+Sent packet 71 of 100
+Sent packet 72 of 100
+Sent packet 73 of 100
+Sent packet 74 of 100
+Sent packet 75 of 100
+Sent packet 76 of 100
+Sent packet 77 of 100
+Sent packet 78 of 100
+Sent packet 79 of 100
+Sent packet 80 of 100
+Sent packet 81 of 100
+Sent packet 82 of 100
+Sent packet 83 of 100
+Sent packet 84 of 100
+Sent packet 85 of 100
+Sent packet 86 of 100
+Sent packet 87 of 100
+Sent packet 88 of 100
+Sent packet 89 of 100
+Sent packet 90 of 100
+Sent packet 91 of 100
+Sent packet 92 of 100
+Sent packet 93 of 100
+Sent packet 94 of 100
+Sent packet 95 of 100
+Sent packet 96 of 100
+Sent packet 97 of 100
+Sent packet 98 of 100
+Sent packet 99 of 100
+Sent packet 100 of 100
+UdpSender complete.
+BUILD SUCCESSFUL (total time: 1 minute 40 seconds)
+
+===================================================
+run:
+UdpReceiver started...
+first value: 17.0 second value: 24.0
+first value: 17.0 second value: 24.0
+first value: 17.0 second value: 24.0
+first value: 17.0 second value: 24.0
+[... etc. ...]
+
+===================================================