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 :

Envoie de fichier par socket


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 eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut Envoie de fichier par socket
    Bonjour,

    Je cherche à envoyer un fichier d'un coup par socket, je pense que mon code est bon mais je ne reçois rien ..

    J'ai vu pas mal de solution sur le net qui consistait à découper le fichier en tableau de Byte mais à priori, il devrait être possible d'envoyer directement un objet File non ?

    Un bout de mon code :

    Serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    File f = new File(fichier);
    System.out.println("f.length : "+f.length());
    envoieObjet.writeObject(f); //envoieObjet est un objet de type ObjectOutputStream
    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
     
    	       File f = new File(str); //str est le nom du fichier envoyé précédemment
    	       try {
    	    	    FileWriter fw = new FileWriter(f);
    	    	    FileReader reader = new FileReader((File)RecoiFichier.readObject()); //RecoiFichier est un objet de type ObjectInputStream
    	    	    try {	    	           	        
    	    	    	char[] cbuf = new char[2048];
    	    	        int len;
    	    	        while ( (len = reader.read(cbuf)) > 0 ) {
    	    	        	fw.write(cbuf, 0 , len);
    	    	        }
     
    	    	     } finally {	    	       
    	    	        reader.close();
    	    	        fw.flush();
    	    	        fw.close();
    	    	     }
                    } catch (IOException e1) {
    			// TODO Auto-generated catch block
    			e1.printStackTrace();
    		}      // lecture de l'écho
    		catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    A priori, ton code envoie un objet de type File, que tu recuperes du coté client, pour essayer de le lire. C'est à dire que tu envoies un objet qui décrit un fichier, mais pas le fichier lui-meme. En d'autres termes, tu pourrais tout aussi bien envoyer le nom du fichier.

    J'imagine que tu esperais transmettre également le contenu du fichier, ce qui n'est pas le cas.

  3. #3
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    Effectivement ... merci de ta réponse.

    Et donc ya-t-il un moyen de transférer le fichier d'un bloc ou je dois passer par une solution de découpage et d'envoie multiple ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Citation Envoyé par eracius Voir le message
    Et donc ya-t-il un moyen de transférer le fichier d'un bloc ou je dois passer par une solution de découpage et d'envoie multiple ?
    La nécessité du découpage ou non dépend du type de la socket. Mais en règle général, on prefere envoyer par morceaux, pour bien controler les envois, et pouvoir réagir en cas d'erreur.


    [EDIT]
    Je viens de voir la réponse d'adiGuba.
    Effectivement, utiliser les flux, c'est mieux.
    [/EDIT]

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    [QUOTE=eracius;2557010]J'ai vu pas mal de solution sur le net qui consistait à découper le fichier en tableau de Byte mais à priori, il devrait être possible d'envoyer directement un objet File non ?[/code]
    Non : un objet File correspond simplement à une représentation d'un fichier en local : il ne comporte pas de donnée. Si tu envoie l'objet File via un ObjectOutputStream cela revient au même que d'envoyer simplement le nom du fichier : les données contenu dans ce dernier ne seront pas envoyé.


    Ton erreur vient du fait que tu résonnes en tant que fichier et c'est faux : il faut résonner en tant que flux de donnée.

    • Sur ton serveur tu ouvres ton fichier avec un FileInputStream() et tu recopie sont contenu dans la socket.
    • Sur le client tu crées un fichier avec FileOutputStream() avec les données que tu reçoit via ta socket


    a++

  6. #6
    Membre confirmé Avatar de eracius
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 138
    Par défaut
    ok je vois le truc.

    Merci beaucoup

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

Discussions similaires

  1. envoi/reception fichier par socket
    Par rezuz dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 19/06/2010, 16h52
  2. Envoi de Fichier par Socket
    Par devalender dans le forum WinDev
    Réponses: 2
    Dernier message: 20/06/2008, 12h59
  3. Envoi de fichier par socket
    Par thebloodyman dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/08/2007, 17h07
  4. Envoi de fichier par socket
    Par dr_octopus74 dans le forum Réseau
    Réponses: 42
    Dernier message: 19/01/2007, 17h59
  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