Adición de tiempo de espera a DatagramSocket - receive ()

Necesito crear un tiempo de espera de 10 segundos en esta parte del código

DatagramPacket getack = new DatagramPacket (entrante, entrante.longitud);
socket.receive (getack);

Lo necesito para que aparezca en la lista de paquetes entrantes durante 10 s. Si recibe un paquete antes de los 10 s, saltará a la instrucción if, en caso de que alcance 10s, saltaría a else y reenviaría el paquete. ¿Es esto posible y cómo podría hacer esto? Soy bastante nuevo en esto.

private static void sendDATA() {
    outgoing = new byte[512]; // Empty array
    try {
        ByteBuffer sDATA = ByteBuffer.allocate(516);
        // 512 - 2 byte opcode, 2 byte block #, 512 data

        DatagramPacket data = new DatagramPacket(outgoing, outgoing.length, InetAddress.getByName(clientip), clientport);
        InputStream fis = new FileInputStream(new File(FILE));

        int a;
        int block = 1; 

        while((a = fis.read(outgoing,0,512)) != -1)
        {
            data.setLength(a);
            sDATA.put((byte)3);
            sDATA.put((byte)block);
            sDATA.put(outgoing);
            socket.send(data); 

            while(true) {
                DatagramPacket getack = new DatagramPacket(incoming, incoming.length);
                socket.receive(getack);

                if(incoming[0] == 3 && incoming[1] == block) {
                    break;
                } else {
                    socket.send(data);
                }
            }

        }       
    } catch (Exception e) {

    }

}

Respuestas a la pregunta(2)

Su respuesta a la pregunta