diff --git a/examples/src/UdpMulticastExamples/MulticastSender.java b/examples/src/UdpMulticastExamples/MulticastSender.java index ef30a4d4f540144eff6b023d8761e143ab8f7be2..ef698d274c20274df27d411d240bcc451add523f 100644 --- a/examples/src/UdpMulticastExamples/MulticastSender.java +++ b/examples/src/UdpMulticastExamples/MulticastSender.java @@ -3,6 +3,8 @@ package UdpMulticastExamples; import edu.nps.moves.dis7.utilities.DisThreadedNetIF; import java.io.*; import java.net.*; +import java.util.logging.Level; +import java.util.logging.Logger; /** * Looks a lot like UdpSender. Start this after launching MulticastReceiver. @@ -28,11 +30,13 @@ public class MulticastSender { public static final int LOOPSIZE = 20; // 20000 public static final String QUIT_SENTINEL = "QUIT QUIT QUIT!"; + private static NetworkInterface ni; @SuppressWarnings("SleepWhileInLoop") public static void main(String[] args) throws IOException { MulticastSocket multicastSocket = null; + InetSocketAddress group = null; // Put together a message with binary content. "ByteArrayOutputStream" // is a java.io utility that lets us put together an array of binary @@ -51,18 +55,18 @@ public class MulticastSender { System.setProperty("java.net.preferIPv4Stack", "true"); // multicast group we are sending to--not a single host - multicastSocket = new MulticastSocket(DESTINATION_PORT); + multicastSocket = new MulticastSocket(/*DESTINATION_PORT*/); multicastSocket.setTimeToLive(TTL); // time to live reduces scope of transmission InetAddress multicastAddress = InetAddress.getByName(MULTICAST_ADDRESS); System.out.println("Multicast address/port: " + multicastAddress.getHostAddress() + "/" + DESTINATION_PORT); - InetSocketAddress group = new InetSocketAddress(multicastAddress, DESTINATION_PORT); + group = new InetSocketAddress(multicastAddress, DESTINATION_PORT); // Join group useful on receiving side - multicastSocket.joinGroup(group, DisThreadedNetIF.findIpv4Interface()); + multicastSocket.joinGroup(group, ni = DisThreadedNetIF.findIpv4Interface()); // You can join multiple groups here byte[] buffer = baos.toByteArray(); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length, multicastAddress, DESTINATION_PORT); + DatagramPacket packet = new DatagramPacket(buffer, buffer.length, group/*, DESTINATION_PORT*/); for (int index = 0; index < LOOPSIZE; index++) { @@ -99,8 +103,14 @@ public class MulticastSender { System.err.println(e); } finally { - if (multicastSocket != null) + if (multicastSocket != null && !multicastSocket.isClosed()) { + try { + multicastSocket.leaveGroup(group, ni); + } catch (IOException ex) { + Logger.getLogger(MulticastSender.class.getName()).log(Level.SEVERE, null, ex); + } multicastSocket.close(); + } dos.close(); }