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 :

Envoi 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 du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par d�faut Envoi de fichier par socket
    bnjr
    j ai besoin d aide je veux envoyer des fichiers dans un r�seau (utilisant les sockets)
    mais j ai tester toutes les solutions et r1 ne fonctionne c ma derniere tentative et elle ne fonctionne pas
    le code suivant est dans le tread de client lorsqu il re�oit un Objet de type FICH (FICH classe serialiser contient un attribut fe type File)
    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
    if (o instanceof FICH) {
                    F = (FICH) o;
                    try {
                        fi = F.FIN;
                        f=new FileInputStream(fi);
                        fo=new FileOutputStream(fc.c.num);
                        byte[] buf = new byte[1024];
                        f.read();
     
                       System.out.println("reçu  "+fi);
                    int n;int i=1;
                        System.out.println("debut d ecriture"); 
                         while((n=f.read(buf))==1024){                        
                              fo.write(buf,0,n);
                              System.out.println("ecriture N° "+i);
                                i++;
            }
    //        //et la on ajoute les bytes plus petits que 1024 ) la fin            
                        fo.write(buf,0,n);
                        System.out.println("la dernier ecriture");
                        f.close();
                        fo.close();
                    } catch (Exception ex) {
                        System.out.println(ex + " erreur d ecriture");
                        ex.printStackTrace();
                    }
    c'est l'affichage dans la console du client

    Nom : consoleClient.png
Affichages : 781
Taille : 141,9 Ko

    et le fichier contient les byte mais il m affich �a

    Nom : FICHIER.png
Affichages : 778
Taille : 243,3 Ko
    svp aidez moi
    merci

  2. #2
    Expert �minent
    Avatar de tchize_
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    while((n=f.read(buf))==1024)
    Le test correct est
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    while((n=f.read(buf))>=0)
    on teste tant que la valeur de retour n'est pas n�gative. Seule une valeur de -1 indique une fin de fichier.

    Ensuite s�rialiser un objet de type File est inutile. Tout ce que ton code fait actuellement c'est copier une fichier d'un dossier du client vers un autre dossier du client. La seule chose qui est transf�r�e entre le serveur et le client, c'est le nom du fichier. File ne contient pas le contenu du fichier, juste son chemin d'acc�s. Si tu veux transf�rer un fichier du serveur vers les clients, tu lit les bytes cot� serveur, tu �crit ces bytes sur la socket, tu relit ces bytes cot� client et tu les �crit dans le fichier d'arriv�e.

    PS: un effort pour nommer correctement tes variables dans ton code en respectant les conventions java, et un autre effort pour �crire autre chose que du language SMS dans tes questions, ce ne serait pas du luxe.

  3. #3
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par d�faut
    merci
    j'ai essai de faire cette solution de lire les byte puis les �crire dans la socket cot� serveur et les re�u du cot� client puis les �crire dans le fichier d'arriv�e mais
    le thread de client re�oit des objets donc cette solution ma g�n�rer une exception


    et a propos le code du test il ne marche pas

  4. #4
    Expert �minent
    Avatar de tchize_
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par d�faut
    Le code du test marche tr�s bien, c'est le reste de ton code qui fait n'importe quoi. Poste nous ton serveur et ton client corrig�s pour qu'on vois tes erreurs.

  5. #5
    Membre du Club
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2013
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : Chercheur en informatique

    Informations forums :
    Inscription : Mai 2013
    Messages : 6
    Par d�faut
    j'ai essay� cette solution est elle fonctionne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class CONTENU implements Serializable{
     
        int compteur;
        Vector tabbit=new Vector();
        CONTENU(){
     
    }
     
    }


    cot� serveur : (lorsqu'il re�oit une demande de telecharegement )
    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
    //////la reception du nom de fichier voulez le telecharger
                       if (o instanceof fichier) {
                         f = (fichier) o;
                    try {
                        fis=new FileInputStream(f.chemin);
                           buf = new byte[1024];
                           int n = 0;
                           int compteur=0;
                           FCONTENU=new CONTENU();
                            while ((n = fis.read(buf)) >= 0) {
                                FCONTENU.tabbit.add(buf);
                                FCONTENU.compteur=compteur;
                                compteur++;
                                buf = new byte[1024];
     
                            }
                            System.out.println("terminée !");
                            fs.gc.sortie.writeObject(FCONTENU);
                            System.out.println("ENVOYEE !"); 
                            fis.close();
                    } catch (Exception ex) {
                        System.out.println(ex+" erreur d envoi ");
                        ex.printStackTrace();
                    }
     
                    }
    cot� client : (la reception du fichier)
    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
     if (o instanceof  CONTENU) {
                    FCONTENU =(CONTENU)o;
                     System.out.println("reçu !");
                    try {
                        fos=new FileOutputStream(fc.c.num);
                       for(int i=0;i<FCONTENU.tabbit.size();i++){
                                   buf  = (byte[]) FCONTENU.tabbit.elementAt(i);
                                   fos.write(buf);
     
                       } 
                        System.out.println("terminée !");
                       fos.close();
                    } catch (Exception ex) {
                        System.out.println(ex + " erreur d ecriture");
                        ex.printStackTrace();
                    }
                }

  6. #6
    Mod�rateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par d�faut
    �a marche pas si bien que �a.

    • Essaie avec des fichiers textes, tu verras qu'ils se retrouvent avec des trucs tout bizarres � la fin.

      C'est bien d'avoir une variable n dans while ((n = fis.read(buf)) >= 0) { mais tu dois aussi t'en servir, sinon c'est comme si elle �tait pas l�.

    • Essaie avec des fichiers de 500Mo. �a fait mal, hein ?

      C'est parce que tu le charges enti�rement en m�moire. Ce n'est pas malin de faire �a avec des fichiers, il faut les envoyer par bouts.
      Par exemple rien ne t'oblige � faire en sorte qu'un fichier soit envoy� en entier sous forme d'un seul objet. Tu pourrais avoir un objet "l� j'envoie un fichier" puis plein d'objet "un bout du fichier" puis un objet "le fichier est fini".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Envoi de Fichier par Socket
    Par devalender dans le forum WinDev
    R�ponses: 2
    Dernier message: 20/06/2008, 12h59
  2. Envoie de fichier par socket
    Par eracius dans le forum Entr�e/Sortie
    R�ponses: 5
    Dernier message: 05/10/2007, 11h21
  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