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); + } + } + +}