diff --git a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java index 98e89d497eb4ff36d5a11b51ceb3df3c5cd6ba54..59b5a2ce8b97623eef8c19243a413bab9dfc7090 100644 --- a/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java +++ b/assignments/src/MV3500Cohort2018JanuaryMarch/homework2/TackettMulticastSender.java @@ -1,87 +1,90 @@ package MV3500Cohort2018JanuaryMarch.homework2; -/** - * This assignment uses the code from MV3500 example "multicastExample1" - * modifications were made to the packet creation and where the packet is - * assembled. - * - * @author Brian - */ - - -import java.io.*; -import java.net.*; - - -public class TackettMulticastSender { - public static final String MULTICAST_ADDRESS = "172.20.144.145"; - public static final int DESTINATION_PORT = 1717; - /** How many routers can be crossed */ - public static final int TTL = 10; - private int velocity; - private float xPos; - private float yPos; - - - public static void main(String[] args) - { - int velocity = 3; - int direction = 180; - double xPos = 0; - double yPos = 2; - - - 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 - - - // 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 < 100; idx++) - { - - xPos = xPos + (Math.cos(Math.toRadians(direction))*velocity); //computes the horixontal displacement for each movement based on velocity - this is a fixed velocity and time increment - yPos = yPos + (Math.sin(Math.toRadians(direction))*velocity); //computes the vertical displacement for each movement based on velocity - this is a fixed velocity and time increment - - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(baos); - dos.writeDouble(xPos); - dos.writeDouble(yPos); - - - byte[] buffer = baos.toByteArray(); - - DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_PORT); - - multicastSocket.send(packet); - baos.reset(); - Thread.sleep(1000); // Send 100, one per second - System.out.println("Sent multicast packet " + idx + " of 100"); - } - } - catch(Exception e) - { - System.out.println(e); - } - } - -} +/** + * This assignment uses the code from MV3500 example "multicastExample1" + * modifications were made to the packet creation and where the packet is + * assembled. + * + * @author Brian + */ + + +import java.io.*; +import java.net.*; + + +public class TackettMulticastSender { + public static final String MULTICAST_ADDRESS = "172.20.144.145"; + public static final int DESTINATION_PORT = 1717; + /** How many routers can be crossed */ + public static final int TTL = 10; + private int velocity; + private float xPos; + private float yPos; + + /** + * Program execution commences here + * @param args Command-line arguments (unused) + */ + public static void main(String[] args) + { + int velocity = 3; + int direction = 180; + double xPos = 0; + double yPos = 2; + + + 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 + + + // 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 < 100; idx++) + { + + xPos = xPos + (Math.cos(Math.toRadians(direction))*velocity); //computes the horixontal displacement for each movement based on velocity - this is a fixed velocity and time increment + yPos = yPos + (Math.sin(Math.toRadians(direction))*velocity); //computes the vertical displacement for each movement based on velocity - this is a fixed velocity and time increment + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + dos.writeDouble(xPos); + dos.writeDouble(yPos); + + + byte[] buffer = baos.toByteArray(); + + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_PORT); + + multicastSocket.send(packet); + baos.reset(); + Thread.sleep(1000); // Send 100, one per second + System.out.println("Sent multicast packet " + idx + " of 100"); + } + } + catch(Exception e) + { + System.out.println(e); + } + } + +}