Skip to content
Snippets Groups Projects
BlankenbekerMulticastSender.java 3.57 KiB
package MV3500Cohort2018JanuaryMarch.homework2;

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;

/**
 *
 * @author Michael
 */
public class BlankenbekerMulticastSender {

    /** socket value of shared interest */
    public static final String MULTICAST_ADDRESS = "239.1.2.15";
    /** socket value of shared interest */
    public static final int DESTINATION_PORT = 1717;
    /** How many routers can be crossed */
    public static final int TTL = 10; 
   
    /** run the program
     * @param args command-line arguments, string parameters (unused) */
    public static void main(String[] args) 
    {
         BlankenbekerTruck truck = new BlankenbekerTruck();
        while (true) {
            truck.move();
        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);
            float x = truck.getX();
            float y = truck.getY();
            float z = truck.getZ();
            
            dos.writeFloat(x);
            dos.writeFloat(y);
            dos.writeFloat(z);
            
            byte[] buffer = baos.toByteArray();
            
            // Put together a packet to send
            
            // muticast group we are sending to--not a single host
            
            DatagramPacket packet = 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 < 1; idx++)
            {
               
               multicastSocket.send(packet);
               Thread.sleep(1000); // Send 100, one per second
               System.out.println("Sent new multicast packet 1 of 1");
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }
    }
    
}
}