IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Probleme : echange de fichiers par socket


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut Probleme : echange de fichiers par socket
    Salut,
    je vous presente mon probleme : je souhaite realiser un transfert de fichiers entre 2 machines par socket. Lorsque je transfere un petit fichier (du style 50 ko) tout fonctionne bien. Mais quand j'essaie de transferer un fichier un peu plus gros (un mp3 de 3Mo par exemple), le programme transfere seulement une centaine d'octets et la classe qui sert a l'emission me sort l'erreur : java.net.SocketException: Software caused connection abort: socket write error
    Je pense que ca doit merder au niveau des tampons ou quelque chose comme ca mais jai pas reussi a resoudre le probleme.
    J'ai 2 classes, une gerant l'emission et une gerant la reception. Je vous copie la source ci-dessous. Si quelqu'un a une idée pour m'aider je le remercie d'avance.
    Classe pour l'envoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    public class EmissionFichier extends Emission implements Runnable {
        private DataOutputStream sortieData;
        private BufferedOutputStream sortie;
        private BufferedInputStream entreeFichier;
        private File fichier;
     
        public EmissionFichier(Donnees d, Connexion c, OutputStream o) {
            super (d,c);
            this.sortie = new BufferedOutputStream (o);
            this.sortieData = new DataOutputStream(o);
        }
     
     
        public void setFichier (File f)  {
            this.fichier = f;
            try {
                this.entreeFichier = new BufferedInputStream(new FileInputStream (f));
            } catch (FileNotFoundException e) {
                connexion.addTexte ("Fichier introuvable");
            }
        }
     
     
        public void envoi ()  {
            int octet;
            String nom = fichier.getName ();
            try {
                sortieData.writeLong(fichier.length()); // on envoie la taille du fichier
                sortieData.writeInt(nom.length()); // on envoie la longueur du nom
                sortieData.writeBytes(nom); // on envoie le nom
                while ((octet = entreeFichier.read()) != -1)  {
                    sortie.write(octet);
                }
                sortie.flush();
            }
            catch (IOException g)  {
               System.out.println ("Erreur dans l'envoi du fichier : "+g);
            }
            finally {
                  connexion.deconnecter();
            }
        }
     
        public void run() {
            if (fichier != null)
               envoi ();
        }
    }
    Classe pour la reception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public class ReceptionFichier extends Reception {
        private DataInputStream entree;
        private FileOutputStream sortieFichier;
        private File fichier;
     
        public ReceptionFichier(Donnees d, Connexion c, InputStream i) {
            super(d, c);
            this.entree = new DataInputStream(new BufferedInputStream(i));
        }
     
     
        public void run() {
            int octet;
            long tailleRecue = 0;
            long tailleFichier = 1;
            try {
                tailleFichier = entree.readLong(); // on lit la taille du fichier
                int longueurNom = entree.readInt();
                // lecture du nom du fichier
                String nom = "";
                for (int i = 0; i < longueurNom; i++) {
                    nom += (char)entree.readByte();
                }
                try {
                    sortieFichier = new FileOutputStream(nom);
                } catch (FileNotFoundException e) {
                    System.out.println("Erreur : " + e);
                }
                while ((octet = entree.readByte()) != -1) {
                    sortieFichier.write(octet);
                    tailleRecue++;
                }
            } catch (IOException e) {
                // verifier si la taille recue est bien la taille originale
                if (tailleRecue < tailleFichier)
                    System.out.println("Erreur : " + e);
            } finally {
                connexion.deconnecter();
            }
        }
    }

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Par défaut
    Enfin trouvé : la methode readByte de DataInputStream renvoir un octet signe, c'est a dire qui peut prendre la valeur -1. Le thread de reception s'arretait donc des que un octet comme celui ci apparaissait ! A la place j'ai utilise la methode read de BufferInputStream et tout marche bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. envoye fichier par socket
    Par ac/dc dans le forum Réseau
    Réponses: 3
    Dernier message: 01/12/2006, 20h46
  2. Envoi d'un fichier par socket
    Par Aleksis dans le forum C++
    Réponses: 12
    Dernier message: 12/08/2006, 05h10
  3. Réponses: 3
    Dernier message: 06/03/2006, 10h36
  4. Transfert de fichiers par sockets
    Par Kaori dans le forum C++
    Réponses: 19
    Dernier message: 26/01/2005, 13h58
  5. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 18h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo