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

Entrée/Sortie Java Discussion :

[socket] probleme d'envoi de fichier


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Par défaut [socket] probleme d'envoi de fichier
    bonjour,
    je travaille sur un serveur ftp. Mon probleme est que quand j'envoie un stream de fichier le caractere end of file n'est envoyé que si j'appelle la methode close() sur le stream qui envoie le fichier et je suis bien embeté car ça ferme la socket coté serveur.
    si je n'appelle pas la methode close() le client reste bloqué sur la methode read() car il attend le end of file.
    est ce qu'il y a une autre façon de faire??

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2005
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 118
    Par défaut
    Bonjour,
    avec flush(), ça marche pas ?

    A+
    Joris

  3. #3
    Membre confirmé Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Par défaut
    non pareil ça marche pas!

  4. #4
    Membre éclairé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Par défaut
    fais voir un peu de code

  5. #5
    Membre confirmé Avatar de soulhouf
    Inscrit en
    Août 2005
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 213
    Par défaut
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    private Message receiveMessage(Socket currentSocket) {
     
          //      get the input stream
     
          FileInputStream fileBuffer;
     
          Message msg = null;
     
          try {
     
             fileBuffer = (FileInputStream)currentSocket.getInputStream();
     
     
     
             //save the file
     
             File fichier = new File("tmpFile");
     
             fichier.createNewFile();
     
             //prepare the output stream to save the file
     
             FileOutputStream fileDestination = new FileOutputStream(fichier);
     
             byte buff[] = new byte[512*1024];
     
             int nbLecture;
     
             System.out.println("line 55");
     
             while( (nbLecture = fileBuffer.read(buff)) != -1 ) {
     
                System.out.println(nbLecture);
     
                fileDestination.write(buff, 0, nbLecture);
     
             }    // c'est ici qu'il se plante, il ne dépasse jamais cette frontiere
     
     
             System.out.println("line 59");
     
             //fileBuffer.close();
     
     
     
             ObjectInputStream in = new ObjectInputStream(new FileInputStream("tmpFile"));
     
             msg = (Message)in.readObject();
     
             System.out.println("line 64");
     
             in.close();
     
               fichier.delete();
     
               System.out.println("line 67");
     
          } catch (IOException e) {
     
             // TODO Auto-generated catch block
     
             e.printStackTrace();
     
          } catch (ClassNotFoundException e) {
     
             // TODO Auto-generated catch block
     
             e.printStackTrace();
     
          }
     
     
     
          return msg;
     
       }
    cette methode est écrite dans le serveur et elle sert à gérer et recevoir les messages envoyés par le client...

  6. #6
    Membre Expert
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Par défaut Re: [socket] probleme d'envoi de fichier
    Citation Envoyé par soulhouf
    bonjour,
    je travaille sur un serveur ftp. Mon probleme est que quand j'envoie un stream de fichier le caractere end of file n'est envoyé que si j'appelle la methode close() sur le stream qui envoie le fichier et je suis bien embeté car ça ferme la socket coté serveur.
    si je n'appelle pas la methode close() le client reste bloqué sur la methode read() car il attend le end of file.
    est ce qu'il y a une autre façon de faire??
    C'est normal qu'il reste bloqué jusqu'à ce que le client ferme le canal.

    Il y a deux événements qui peuvent déloquer ta lecture:
    1 - Fermeture du canal (le client appelle close)
    2 - Le tampon est plein (difficile avec un un tampon de (512ko)

    Une solution est que tu adoptes une protocole existant ex: FTP ou tu crées ton propre protocole (réinvention de la roue).

    Si tu désires développer ton propre protocole, il serait préférable que tu travailles avec des blocs de tailles constantes par exemple 10ko. En plus ton serveur doit pouvoir gérer les timeouts.

Discussions similaires

  1. [Socket]probleme de transfert de fichier
    Par skyliner dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 25/04/2011, 15h30
  2. [JSch] probleme d'envoi de fichier par ftp
    Par jerem721 dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 08/05/2009, 12h39
  3. Probleme d'envoi de fichiers par FTP
    Par TheReturnOfMuton dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/06/2008, 11h03
  4. Probleme d'envoi de fichiers EXcel
    Par lagaffe34 dans le forum Access
    Réponses: 3
    Dernier message: 02/02/2006, 11h41

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