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 :

Echange de fichier via Socket


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut Echange de fichier via Socket
    Bonjour,

    Dans un de mes développements je suis obligé de partager un dossier entre un client et un serveur. J'aimerais savoir si il existe un outil Apache comme commons-io mais pour les sockets.

    En effet, je n'ai pas envie de redévelopper encore et encore des fonctionalités de bas-niveau comme l'échange de fichiers entre sockets.

    Dois-je développer mes propres fonctions ou est-ce qu'il existe une solution afin de me faciliter la vie ?

    Merci d'avance

  2. #2
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Points : 327
    Points
    327
    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
     
     
        // connexion au serveur.$
        private Socket client;
        //***********************************
     
        //les flux.....................
        private ObjectInputStream entree;
        private ObjectOutputStream sortie;
        //***************************************
     
        public void obtenirFlux()throws IOException{
            this.sortie = new ObjectOutputStream( this.client.getOutputStream());
            sortie.flush();
            this.entree = new ObjectInputStream(this.client.getInputStream());   
        }
     
        public void envoyerDonner(File file){
            try{
            sortie.writeObject(file);
            sortie.flush();
            }
            catch(IOException e){
            }
        }

  3. #3
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Coucou AASProni,

    Merci pour le code, mais en fait je recherche une API qui me permettrait d'avoir des choses exotiques comme par exemple le temps restant de téléchargement ce genre de chose. Tout en sachant que j'ai des gros fichiers à échanger entre mon client et mon serveur.

    Tu connais des choses spécifiques à ce sujet ?

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 085
    Points : 7 999
    Points
    7 999
    Par défaut
    AASProni as tu testé le code que tu montres ?

    Il envoie juste l'objet File et non son contenu...

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par akrogames Voir le message
    Dans un de mes développements je suis obligé de partager un dossier entre un client et un serveur. J'aimerais savoir si il existe un outil Apache comme commons-io mais pour les sockets.
    Les sockets fonctionnent à base d'InputStream et OutputStream, tu peux donc utiliser commons-io comme d'hab, sans problème.

    Citation Envoyé par akrogames Voir le message
    Dois-je développer mes propres fonctions ou est-ce qu'il existe une solution afin de me faciliter la vie ?
    Je peux pas garantir que ça n'existe pas, mais je n'en connais pas.

  6. #6
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Merci wax merci thelvin,

    Vous ne connaissez pas d'API me permettant par exemple d'afficher le temps restant ou plus simplement le nombre de kbytes restant, ce genre de chose ?

    Merci pour vos réponses.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Comme je l'ai dit au-dessus, non. Plus que des API je verrais ça comme des kits de GUI, et je fais très peu de GUI Java.

  8. #8
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Ce ne sont pas les protocoles d'échange de fichier qui manquent. Tu as les procotoles type CIFS ("partage windows"), le FTP, le SCP, le HTTP/WebDAV, NFS, ...

    Tout ce que tu as à faire, c'est déterminer lequel de ces protocoles rentrerait le mieux dans ton projet, et à configurer les machines pour partager des dossiers via ce protocole.

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 085
    Points : 7 999
    Points
    7 999
    Par défaut
    Non mais un transfert de fichier par socket est simple :

    1) Récupérer la taille du fichier.
    2) Faire une boucle pour envoyer byte a byte (ou par paquet de x bytes)
    3) A chaque tour de boucle regarder le nbr de byte transférer et le temps écoule afin de savoir le temps restant.

    Il existe plein de tutos et de faq sur le site afin d'apprendre un peu mieux le socket, tu devrais y jetter un oeil.

    Et si possible, utiliser comme l'indique _tchize un protocole déja tout fait qui pourrait peut être t'éviter de coder certains trucs. Mais alors la flexibilité sera différente.

  10. #10
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Je suis un idiot, j'ai pas vu ceci :
    org.apache.commons.io.FileUtils.copyURLToFile(URL, File)

    Sinon parfait pour l'idée d'utiliser un protocol.

    Merci à vous

  11. #11
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 122
    Points : 327
    Points
    327
    Par défaut
    Puis-je donner la correction de mon code

    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
     
     
     
        // connexion au serveur.$
        private Socket client;
        //***********************************
     
        //les flux.....................
        private ObjectInputStream entree;
        private ObjectOutputStream sortie;
        //***************************************
     
        public void obtenirFlux()throws IOException{
            this.sortie = new ObjectOutputStream( this.client.getOutputStream());
            sortie.flush();
            this.entree = new ObjectInputStream(this.client.getInputStream());   
        }
     
        public void envoyerDonner(File file){
            try{		
    			InputStream ins = new FileInputStream(file); 
    			byte[] bytes = new byte[ins.available()];
    			ins.read(bytes);
    			ins.close();
    			sortie.writeObject(bytes);
    			sortie.flush();
            }
            catch(IOException e){
            }
        }

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par AASProni Voir le message
    Puis-je donner la correction de mon code
    Tu peux, mais tu ne l'as pas fait. Le code que tu viens de poster :

    - essaie de charger tout le fichier en mémoire. Il ne faut pas.
    - n'y arrive de toute façon que dans des cas très précis. Il faut que ça marche pareil tout le temps (on n'utilise jamais InputStream.available() !!)
    - utilise ObjectOutputStream, ce qui n'est guère utile pour des fichiers. Le OutputStream tout simple de la Socket est très bien.

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

Discussions similaires

  1. Probleme : echange de fichiers par socket
    Par blackjack69 dans le forum Langage
    Réponses: 1
    Dernier message: 29/04/2008, 03h23
  2. Copie de fichier via sockets
    Par MortDansLAme dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/02/2008, 14h01
  3. envoi fichier via socket
    Par snakemetalgear dans le forum Réseau
    Réponses: 7
    Dernier message: 09/06/2007, 16h55
  4. transfert fichier via socket
    Par ac/dc dans le forum C++Builder
    Réponses: 3
    Dernier message: 26/11/2006, 22h21
  5. Transfert de fichier via sockets...
    Par damien99 dans le forum MFC
    Réponses: 8
    Dernier message: 19/02/2006, 15h41

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