diff --git a/projects/Assignments/homework2/MaroonMulticastReceiver.java b/projects/Assignments/homework2/MaroonMulticastReceiver.java
new file mode 100644
index 0000000000000000000000000000000000000000..b4d3e526956edd60457a197662145b2b6cd3fa6b
--- /dev/null
+++ b/projects/Assignments/homework2/MaroonMulticastReceiver.java
@@ -0,0 +1,70 @@
+
+
+
+import java.io.*;
+import java.net.*;
+
+/**
+ *
+ * @author mcgredo
+ */
+public class MaroonMulticastReceiver {
+
+    public static final String MULTICAST_ADDRESS = "239.1.2.15";
+    public static final int DESTINATION_PORT = 1717;
+    /** How many routers can be crossed */
+    public static final int TTL = 10; 
+    
+    public static void main(String[] args) 
+    {
+        try
+        {
+        
+            // This is a java/IPv6 problem. You should also add it to the
+            // arguments used to start the app, eg -Djava.net.preferIPv4Stack=true
+            // set in the "run" section of preferences. Also, typically
+            // netbeans must be restarted after these settings.
+            // https://stackoverflow.com/questions/18747134/getting-cant-assign-requested-address-java-net-socketexception-using-ehcache
+            System.setProperty("java.net.preferIPv4Stack", "true");
+            
+            
+            MulticastSocket multicastSocket = new MulticastSocket(DESTINATION_PORT);
+            multicastSocket.setTimeToLive(TTL);
+            InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS);
+            System.out.println(multicastAddress);            
+            // Join group useful on receiving side
+            multicastSocket.joinGroup(multicastAddress);
+            // You can join multiple groups here
+            
+            int count = 0;
+            
+            while(true)
+            {
+                byte[] packetArray = new byte[1500];
+                DatagramPacket packet = new DatagramPacket(packetArray, packetArray.length);
+                
+                multicastSocket.receive(packet);
+                count++;
+                
+                ByteArrayInputStream bais = new ByteArrayInputStream(packet.getData());
+                DataInputStream dis = new DataInputStream(bais);
+                int firstNumber = dis.readInt();
+                int messageLength = dis.readInt();
+                String message = "";
+                    for (int i = 0; i < messageLength; i++){
+                        message += dis.readChar();
+                    }
+              
+                   
+                
+                
+                System.out.println("Number received: " + count + " First number:" + firstNumber + " message:" + message);
+            }
+        }
+        catch(Exception e)
+        {
+            System.out.println(e);
+        }
+    }
+    
+}
diff --git a/projects/Assignments/homework2/MaroonMulticastSenderExample.java b/projects/Assignments/homework2/MaroonMulticastSenderExample.java
new file mode 100644
index 0000000000000000000000000000000000000000..d37d37d831b1abb8d6ecc21e91579bcc9b224e58
--- /dev/null
+++ b/projects/Assignments/homework2/MaroonMulticastSenderExample.java
@@ -0,0 +1,86 @@
+
+
+
+import java.io.*;
+import java.net.*;
+
+/**
+ * Looks a lot like a UDP sender.
+ * 
+ * @author mcgredo
+ */
+public class MaroonMulticastSenderExample {
+
+    public static final String MULTICAST_ADDRESS = "239.1.2.15";
+    public static final int DESTINATION_PORT = 1717;
+    /** How many routers can be crossed */
+    public static final int TTL = 10; 
+    
+    public static void main(String[] args) 
+    {
+        try
+        {
+            // This is a java/IPv6 problem. You should also add it to the
+            // arguments used to start the app, eg -Djava.net.preferIPv4Stack=true
+            // set in the "run" section of preferences. Also, typically
+            // netbeans must be restarted after these settings.
+            // https://stackoverflow.com/questions/18747134/getting-cant-assign-requested-address-java-net-socketexception-using-ehcache
+            System.setProperty("java.net.preferIPv4Stack", "true");
+            
+            
+            MulticastSocket multicastSocket = new MulticastSocket(1718);
+            multicastSocket.setTimeToLive(TTL);
+            InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS);
+            System.out.println(multicastAddress);            
+            // Join group useful on receiving side
+            multicastSocket.joinGroup(multicastAddress);
+            // You can join multiple groups here
+            
+            // 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);
+            dos.writeInt(1);
+            String message = "Hammertime";
+            dos.writeInt(message.length());
+            dos.writeChars(message);
+            byte[] buffer = baos.toByteArray();
+            
+            DatagramPacket packet1 = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_PORT);
+            
+            baos.reset();
+            dos.writeInt(2);
+            message = "Collaberate and Listen";
+            
+            dos.writeInt(message.length());
+            dos.writeChars(message);
+            buffer = baos.toByteArray();
+            
+            DatagramPacket packet2 = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_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 idx = 0; idx < 1000; idx++)
+            {
+               
+               multicastSocket.send(packet1);
+               multicastSocket.send(packet2);
+               
+               Thread.sleep(1000); // Send 100, one per second
+               System.out.println("Sent multicast packet " + idx + " of 100");
+            }
+        }
+        catch(Exception e)
+        {
+            System.out.println(e);
+        }
+    }
+    
+}