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 :

Impossible de transferer des fichiers long


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Points : 38
    Points
    38
    Par défaut Impossible de transferer des fichiers long
    bonjour tout le monde
    voila mon probleme je travaille sur le transfert d'un fichier .. d'un serveur vers un client via les sockets java... mais le probleme qui se pose actuellement c'est que je ne peus pas transferer des fichier grand genre 5Mo.. je peus transfere que des petit fichier 250ko ....
    voila mon code

    serveur:
    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
     
    package serv4;
     
    import java.net.*;
    import java.io.*;
     
    public class Serveur {
      public static void main (String [] args ) throws IOException {
        // create socket
        ServerSocket servsock = new ServerSocket(13267);
        while (true) {
          System.out.println("Waiting...");
     
          Socket sock = servsock.accept();
          System.out.println("Accepted connection : " + sock);
     
          // sendfile
          File myFile = new File ("c:\\livres.pdf");
          byte [] mybytearray  = new byte [(int)myFile.length()];
          FileInputStream fis = new FileInputStream(myFile);
          BufferedInputStream bis = new BufferedInputStream(fis);
          bis.read(mybytearray,0,mybytearray.length);
          OutputStream os = sock.getOutputStream();
          System.out.println("Sending...");
          os.write(mybytearray,0,mybytearray.length);
          os.flush();
          sock.close();
          }
        }
    }
    Client :
    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
     
    package serv4;
     
    import java.net.*;
    import java.io.*;
     
    public class Client{
      public static void main (String [] args ) throws IOException {
        int filesize=602238; // filesize temporary hardcoded
     
        long start = System.currentTimeMillis();
        int bytesRead;
        int current = 0;
        // localhost for testing
        Socket sock = new Socket("127.0.0.1",13267);
        System.out.println("Connecting...");
     
        // receive file
        byte [] mybytearray  = new byte [filesize];
        InputStream is = sock.getInputStream();
        FileOutputStream fos = new FileOutputStream("d:\\livre.pdf");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bytesRead = is.read(mybytearray,0,mybytearray.length);
        current = bytesRead;
     
     
        do {
           bytesRead =
              is.read(mybytearray, current, (mybytearray.length-current));
           if(bytesRead >= 0) current += bytesRead;
        } while(bytesRead > -1);
     
        bos.write(mybytearray, 0 , current);
        bos.flush();
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        bos.close();
        sock.close();
      }
    }
    Merci

  2. #2
    Membre averti
    Inscrit en
    Mars 2008
    Messages
    283
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 283
    Points : 380
    Points
    380
    Par défaut
    Bonjour,

    Les buffers par défaut sont trop petits pour ton application.
    Tes méthodes fonctionnent très bien sans eux d'ailleurs.

    En gros, retire "BufferedInputStream bis = new BufferedInputStream(fis);" et "BufferedOutputStream bos = new BufferedOutputStream(fos);"

    EDIT :
    Et pour la recopie d'un InputStream vers un OutputStream, je te conseil plutôt ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void recopier(InputStream in, OutputStream out) {
        byte[] buf = new byte[1024];
        // Pas besoin de monter la taille du buffer trop haut, les perfs n'evoluent pas tant que ça.
        int lu = 0;
        while ((lu = in.read(buf)) > 0)
            out.write(buf, 0, lu);
    }
    Salut

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Points : 38
    Points
    38
    Par défaut
    est ce que vous pouvez me proposer une solution directement sur mon code... car j'ai pas compris la solution
    Merci

  4. #4
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    explication: ce qu'il y a d'anormal dans ton code c'est de créer un buffer de la taille du fichier: tu dois transférer bloc par bloc. (d'où la proposition d'utiliser 1024 et de boucler)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        do {
           bytesRead =
              is.read(mybytearray, current, (mybytearray.length-current));
           if(bytesRead >= 0) current += bytesRead;
        } while(bytesRead > -1);
     
        bos.write(mybytearray, 0 , current);
        bos.flush();
    avec ce code, si le buffer est trop petit, tu va vite te retrouver à court de place.

    Faut envoyer au fur et à mesure que tu lit dans le buffer, pas après avoir tenté de lire tout le fichier.

Discussions similaires

  1. [CKEditor] Impossible d'uploader des fichiers.
    Par jgoetzfr dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 14/12/2007, 18h02
  2. [NetCat] Transferer des fichiers entre MS windows et Linux/Unix
    Par Aramis dans le forum Développement
    Réponses: 5
    Dernier message: 13/12/2007, 11h36
  3. Impossible de télécharger des fichiers depuis mon serveur
    Par amine55555 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 12/05/2007, 14h15
  4. Transférer des fichiers par FTP
    Par diamonds dans le forum Général Conception Web
    Réponses: 8
    Dernier message: 06/12/2006, 16h14
  5. impossible d'utiliser des fichiers sources uniques
    Par Florian.L dans le forum Code::Blocks
    Réponses: 7
    Dernier message: 11/10/2006, 15h35

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