private DATAPacket receiveRRQanswer() {
        byte[] data = new byte[DEFAULT_PACKET_SIZE];
        DatagramPacket dtg = new DatagramPacket(data, data.length);
        try {
            //écoute de la réponse du serveur
            this.getSocket().receive(dtg);
            if (DATAPacket.isDataPacket(dtg)) {
                //Si le serveur accepte le RRQ, il répond directement avec le premier DATAPacket
                this.setPort_dest(dtg.getPort());
                byte[] truncate = new byte[dtg.getLength() - 4];
                System.arraycopy(dtg.getData(), 4, truncate, 0, dtg.getLength() - 4);
                return new DATAPacket(truncate, dtg.getAddress(), dtg.getPort(), 1);
            }
            if (ERRORPacket.isErrorPacket(dtg) && (1 != ERRORPacket.getErrorCode(dtg) || 2 != ERRORPacket.getErrorCode(dtg))) {
                //Si le serveur ne trouve pas le fichier, ou si le client n'a pas les droits d'accès.
                System.out.println(ERRORPacket.getErrMsg(dtg));
                fireErrorOccured("Erreur lors du téléchargement: " + ERRORPacket.getErrMsg(dtg));
                return null;
            }
        } catch (IOException ex) {
            //Si aucun ACK n'est reçu
            System.out.println("Ack non reçu");
            fireErrorOccured("Ack non reçu");
            return new DATAPacket(new byte[0], this.getIp(), this.getPort_dest(), this.getPort_dest());
        }
        return null;
    }