Skip to content
Snippets Groups Projects
Hanley_multicastHW_sender.java 3.36 KiB
/**
 * 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 Hanley_multicastHW_sender {
    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;
    private int velocity;
    private float xPos;
    private float yPos;
    
    
    public static void main(String[] args) 
    {
        int velocity = 2;
        int dir = 45;
        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(dir))*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(dir))*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);
        }
    }
    
}