package MV3500Cohort2018JanuaryMarch.homework2; import java.io.*; import java.net.*; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * homework assignment * @author Ken */ public class MaroonMulticastReceiver { /** * 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 MaroonMulticastReceiver () { // 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) */ public static void main(String[] args) { JFrame guiFrame = new JFrame(); guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); guiFrame.setTitle("Read a message"); guiFrame.setSize(300,250); guiFrame.setLocationRelativeTo(null); final JPanel output = new JPanel(); output.setVisible(true); JLabel outputLbl= new JLabel("Hit the Button"); output.add(outputLbl); JButton MCButton = new JButton( "Push Me"); MCButton.addActionListener(new ActionListener(){ @Override @SuppressWarnings("deprecation") public void actionPerformed(ActionEvent event){ 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; 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(); } outputLbl.setText(message); System.out.println("Number received: " + count + " First number:" + firstNumber + " message:" + message); } catch(Exception e){ System.out.println(e); } } } ); guiFrame.add(output, BorderLayout.CENTER); guiFrame.add(MCButton,BorderLayout.NORTH); guiFrame.setVisible(true); } }