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 :

coupure pendant un echange de fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Points : 60
    Points
    60
    Par défaut coupure pendant un echange de fichier
    Bonjour,

    voilà mon problème : j'ai un client et un serveur. Je désire transmettre un fichier de l'un à l'autre, mais le transfert ne s'effectue pas correctement :

    il s'interrompt en cours de route, et ne sont donc pas complet.

    voilà ma classe 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
     
    import java.io.*;
    import java.net.*;
     
    public class Client {
        public static final int port = 6020;
        private Socket client;
        private static DataInputStream dataIn;
        private static FileOutputStream fos;
        private File fichier;
     
        public static void main(String args[]) throws SocketException,IOException {
            Socket client = null;
            String s;
     
            try {
                int i;
                client = new Socket("122.122.1.4", port);
                dataIn = new DataInputStream(client.getInputStream());
                System.out.println("connection");
                File fichier = new File("C:\\testClientServeur_to\\new_env.txt");
                fos = new FileOutputStream(fichier); // Ecriture dans le fichier
                while((i = dataIn.read()) != -1)
                    fos.write(i);
            } catch(Exception e) {
                System.out.println("Erreur : "+e);
            }
            try { client.close(); } catch (IOException e2) {}// fermeture socket
        }
     
    }



    et ma classe 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
    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
     
    import java.io.*;
    import java.net.*;
    import java.util.*;
     
    public class Serveur extends Thread {
        static final int port = 6020;
        private static ServerSocket socketListener;
        private static File fileToSend = new File("C:\\testClientServeur_from\\env.txt");
        private static File fileToSend2;
        private static Socket client;
        private static DataOutputStream dataOut;
        private static FileInputStream fis = null;
     
        //initialiser le socket serveur
        public static void fileSender(int port,File fileToSend) throws IOException {
            fileToSend2 = fileToSend;
            System.out.println("Fichier = "+fileToSend2);
     
            try {
                socketListener = new ServerSocket(port);    //Ce ServerSocket écoute les tentatives de connexion
            } catch(IOException e) {
                System.err.println("Impossible découter sur le port.");
            }
            //start();
        }
     
        public static void fileTransfer(Socket client,File fileTosend) {
            try {
                dataOut = new DataOutputStream(client.getOutputStream());
            } catch(IOException ioe) {
                System.out.println("Erreur lors de la création du flux de sortie : "+ioe);
            }
            boolean fileExists = true;
            try {
                fis = new FileInputStream(fileToSend); //Flux de lecture dans le fichier
                System.out.println("FileInputStream crée = "+fis.toString());
            } catch (FileNotFoundException e) {
                fileExists = false;
            }
            if (fileExists) {
                //Création d"un buffer de 4K
                byte[] buffer= new byte[4096];
                int bytes = 0;
                try {
                    //Envoie du nom du fichier dans le flux de sortie
                    //dataOut.writeUTF(fileToSend.getName());
                    //Copie du fichier dans le flux de sortie
                    while((bytes = fis.read(buffer)) != -1)
                        dataOut.write(buffer, 0, bytes);
                    fis.close();
                } catch(IOException ioe) {
                    System.out.println("Erreur d'IO : "+ioe);
                }
            }
        }
     
        public static void main(String args[]) throws UnknownHostException,SocketException,IOException{
            fileSender(port, fileToSend);
            try {
                while(true) {
                    client = socketListener.accept();
                    System.out.println("Socket accepté = "+client.toString());
                    fileTransfer(client,fileToSend);
                    break;
                }
            } catch(IOException ioe) {
                System.out.println("Erreur d'IO : "+ioe);
            }
        }
     
    }

  2. #2
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Quelle est la taille de ton fichier envoyé et reçu?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    cela peut varier de quelques Ko à quelques Mo. Ca change quelques chose? J'ai comme l'impression qu'il n'y a pas de contrôle d'erreur ou de packets perdus...

  4. #4
    Membre chevronné
    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
    Points : 1 996
    Points
    1 996
    Par défaut
    Bonjour,

    Il est clair que ton envoi de fichier est un "tantinet naïf". Tu n'utilises aucun protocole entre ton client et serveur. Il sera donc difficile de trouver une erreur de transmission.

    Je te conseille de chercher sur le net un peu de théorie sur le transfert de fichier si tu désirers en développer un ou de chercher une API pour la transmission de fichier.

  5. #5
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    mets ton buffer de taille 1 pour voir.

  6. #6
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Et envoyer directement le fichier ca ne serait pas plus simple ????
    regarde du coté de ObjectOutputStream et de ObjectInputStream, tu veras c'est beaucoup plus simple.....

Discussions similaires

  1. journalisation coupure pendant la copie
    Par g25451 dans le forum Mandriva / Mageia
    Réponses: 2
    Dernier message: 24/01/2008, 18h54
  2. [Industrie] Echange de fichiers sécurisés
    Par Civodul4 dans le forum Sécurité
    Réponses: 2
    Dernier message: 21/06/2007, 22h21
  3. Réponses: 3
    Dernier message: 17/11/2006, 19h12
  4. Réponses: 16
    Dernier message: 03/11/2005, 20h33
  5. VNC (version gratuite) permet-il l'echange de fichier?
    Par HNT dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 26/09/2005, 09h10

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