HOME PCB
..MulticastHello.javaMulticastJsonObject.javaMulticastJsonReceivingThread.javaMulticastJsonSendingThread.javaMulticastObject.javaMulticastReceiveSingleObject.javaMulticastReceivingThread.javaMulticastSendingThread.javaMulticastThread.javaMulticastWebProgram.java
package Multicast;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.NetworkInterface;
import java.util.Enumeration;

public abstract class MulticastSendingThread extends MulticastThread
{
    private int intervalMilli;

    public MulticastSendingThread(int port, String ip_group, int interval_milli)
    {
        super(port, ip_group);
        this.setIntervalMilli(interval_milli);
    }

    @Override
    public void run()
    {
        while (true)
        {
            try
            {
                byte[] bytes = this.getNextPacketBytes();
                Enumeration element = NetworkInterface.getNetworkInterfaces();
                while (element.hasMoreElements())
                {
                    NetworkInterface netIf = (NetworkInterface) element.nextElement();

                    if (!netIf.getName().equals("lo") && netIf.getInetAddresses().hasMoreElements())
                    {
                        try
                        {
                            this.getSocket().setNetworkInterface(netIf);
                            this.getSocket().send(new DatagramPacket(bytes, bytes.length, this.getGroup(), this.getPort()));
                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                    }
                }

                Thread.sleep(this.getIntervalMilli());
            }
            catch (IOException e)
            {
                try
                {
                    this.clearSocket();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
            catch (InterruptedException e)
            {
                return;
            }
        }
    }

    public void setIntervalMilli(int interval_milli)
    {
        this.intervalMilli = interval_milli;
    }

    public int getIntervalMilli()
    {
        return intervalMilli;
    }

    protected abstract byte[] getNextPacketBytes();
}