Something went wrong on our end
-
Brutzman, Don authoredBrutzman, Don authored
SasalaMulticastSender.java 3.28 KiB
package MV3500Cohort2018JanuaryMarch.homework2;
import java.io.*;
import java.net.*;
import java.time.LocalDateTime;
/**
* Looks a lot like a UDP sender.
*
* @author mcgredo
*/
public class SasalaMulticastSender
{
/**
* Default constructor to silence javadoc warning
* @see <a href="https://stackoverflow.com/questions/4488716/java-default-constructor" target="_blank">StackOverflow: Java default constructor</a>
*/
public SasalaMulticastSender ()
{
// default initializations
}
/** socket parameter of interest */
public static final String MULTICAST_ADDRESS = "239.1.2.15";
/** socket parameter of interest */
public static final int DESTINATION_PORT = 1717;
/** How many routers can be crossed */
static final int TTL = 10;
/** run the program
* @param args command-line arguments, string parameters (unused) */
@SuppressWarnings("deprecation")
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);
for(int idx = 0; idx < 100; idx++)
{
double temperature = 100 * Math.random();
LocalDateTime LDT = LocalDateTime.now();
String time = LDT.toString();
dos.writeFloat((float) temperature);
dos.writeChars(time);
// Put together a packet to send
// muticast group we are sending to--not a single host
byte[] buffer = baos.toByteArray();
DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_PORT);
multicastSocket.send(packet);
Thread.sleep(1000); // Send 100, one per second
System.out.println("Sent multicast packet " + idx + " of 100");
baos.reset();
}
}
catch(Exception e)
{
System.out.println(e);
}
}
}