private boolean transmit(DATAPacket dtg) {
        FileOutputStream fos = null;
        try {
            int i = 1;
            File fi = new File(directory_name); //Création de la Zone de dépot si elle n'existe pas
            if (!fi.isDirectory()) {
                fi.mkdir();
            }
            File fichier = new File(directory_name + filename);
            DatagramPacket _dtg = new DatagramPacket(new byte[DEFAULT_PACKET_SIZE], DEFAULT_PACKET_SIZE);
            fichier.createNewFile();
            fos = new FileOutputStream(fichier);
            System.out.println("DATA :" + Arrays.toString(dtg.getDtg().getData()));
            //On écrit le premier DATAPacket dans le fichier
            fos.write(dtg.getData());

            //Réponse de l'ACk de ce premier paquet
            ACKPacket ack = new ACKPacket(this.getIp(), dtg.getDtg().getPort(), ACKPacket.getBlockNb(dtg.getDtg()));
            this.getSocket().send(ack.getDtg());
            System.out.println("ACK  :" + Arrays.toString(ack.getDtg().getData()));

            if (dtg.getDtg().getLength() < 512) {
                return true;
            }
            while (true) {
                //On écoute le paquet suivant
                this.getSocket().receive(_dtg);
                if (ERRORPacket.isErrorPacket(_dtg)) {
                    //Si le serveur répond à tout moment par un paquet d'erreur on arrete le transfert 
                    System.out.println("Une Erreur est survenue: " + ERRORPacket.getErrMsg(_dtg));
                    fireErrorOccured("Une Erreur est survenue: " + ERRORPacket.getErrMsg(_dtg));
                    fos.close();
                    //Suppression du fichier crée
                    fichier.delete();
                    return false;
                } else {

                    System.out.println("DATA :" + Arrays.toString(_dtg.getData()));
                    byte[] truncate = new byte[_dtg.getLength() - 4];
                    System.arraycopy(_dtg.getData(), 4, truncate, 0, _dtg.getLength() - 4);
                    //écriture des données
                    fos.write(truncate);
                    ack = new ACKPacket(this.getIp(), dtg.getDtg().getPort(), DATAPacket.getBlockNb(_dtg));
                    System.out.println("ACK  :" + Arrays.toString(ack.getDtg().getData()));
                    //réponse de l'ACK
                    this.getSocket().send(ack.getDtg());
                    i++;
                    //On s'arrete si le paquet reçu a une taille inférieur à 512.
                    if (_dtg.getLength() < 512) {
                        break;
                    }
                }
            }
        } catch (FileNotFoundException ex) {
            //Si on le peut pas ouvrir le fichier
            fireErrorOccured("Fichier non-ouvrable");
            System.out.println("Fichier non-ouvrable");
            return false;
        } catch (IOException ex) {
            //Si le serveur ne répond plus
            fireErrorOccured("Délai d'attente dépassé");
            System.out.println("Délai d'attente dépassé");
            return false;
        } finally {
            try {
                fos.close();
                return true;
            } catch (IOException ex) {
                System.out.println("Fermeture du fichier impossible");
                fireErrorOccured("Fermeture du fichier impossible");
                return false;
            }
        }
    }