import java.io.IOException;
import java.net.InetAddress;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.net.DatagramPacket;
import java.util.logging.Logger;
import java.util.logging.Level;

public class Main {

    public static void main(String[] args) throws java.io.IOException {
        if (1 != args.length) {
            System.err.println( "Missing bind IP" );
            System.exit(1);
        }
        int port = 25675;
        InetAddress ipv4Address = InetAddress.getByName(args[0]);
        DatagramSocket socket = new DatagramSocket(port, ipv4Address);
        Logger log = Logger.getLogger("MAIN");
        byte[] buffer = new byte[1460];

        log.info( "Running on: " + ipv4Address + ":" + port);
        DatagramPacket request = new DatagramPacket( buffer, buffer.length );
        try
        {
            while (true)
            {
                try
                {
                    socket.receive(request);
                    log.info("Recieved " + request.getLength() + " bytes from: " + request.getSocketAddress());
                    String response = new String("pong");
                    byte[] bytes = response.getBytes();
                    socket.send(new DatagramPacket(bytes, bytes.length, request.getSocketAddress()));
                    log.info("Sent pong");
                }
                catch (SocketException e)
                {
                    log.log(Level.WARNING, "Socket: " + e.getMessage(), e);
                }
                catch (IOException e )
                {
                    log.log(Level.WARNING, "IO: " + e.getMessage(), e);
                }
            }
        }
        finally
        {
            if (null != socket)
            {
                socket.close();
                socket = null;
            }
        }
    }
}