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

Langage Java Discussion :

Sockets .. envoie de fichiers endomagé


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Par défaut Sockets .. envoie de fichiers endomagé
    Bonjour tout le monde
    Voila mon problémé j'ai commencé a travaillé avec les sockets .j'ai essayé de transferer des fichier via les sockets . mais lorsque je veux ouvrir le fichier transféré par exemple (.doc ou .pdf) je le trouve endomagé
    NB: je peux seulement ouvrir les fichiers transféré sous format "fichier.txt" est ce que vous avez une idée
    Merci d'avance
    voila mes class

    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
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    package serv3;
     
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Date;
     
    public class Client extends Thread
    {
     public Client()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
       //envoiSimple();
       envoiFichier();
      }
      catch (Exception e) {e.printStackTrace();}
     }
     
     private void envoiSimple() throws UnknownHostException, IOException
     {
      Date t = new Date();
     
      Socket socketClient = new Socket("127.0.0.1", 8008);
         DataInputStream in = new DataInputStream(socketClient.getInputStream());
         DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
     
         // Creation d'un tampon de stockage
      byte[] buffer_receive = new byte[1024];
     
         for (int i = 0; i < 10 * 1024; i++)
         {
          out.write(buffer_receive);
          out.flush();
     
          in.read();
         }
     
         out.write("END".getBytes());
         out.flush();
     
         System.out.println("Transfert de 10 Mo en " + (new Date().getTime() - t.getTime()));
     }
     
     private void envoiFichier() throws UnknownHostException, IOException
     {
      Date t = new Date();
     
      Socket socketClient = new Socket("localhost", 8008);
         DataInputStream in = new DataInputStream(socketClient.getInputStream());
         DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
     
     
      // ouverture de flux sur le fichier à envoyer
         RandomAccessFile fic = null;
      int tailleF = 0;
     
     
         fic = new RandomAccessFile ("c:\\salah.rar","rw");
         tailleF = (int) fic.length();
     
     
         // quelques initialisations     
      byte[] buffer_send = new byte[1024]; // buffer de lecture dans le fichier
         int fichierfini = -1; // == 0 lorsque le fichier aura été entièrement envoyé
     
     
         while (fichierfini !=0)
      {
       // Lecture du fichier d'entrée dans le buffer
       int octets_lus = 0; // nombre d'octets lus
       octets_lus = fic.read(buffer_send, 0, buffer_send.length - 4);
     
     
     
          out.write(buffer_send);
          out.flush();
     
     
          in.read();
     
       // teste si le fichier source a été entièrement parcourru
       fichierfini = (int) (fic.length() - fic.getFilePointer());
      }
     
      // Boucle d'envoi terminée : soit envoi fini, soit erreur
         out.write("END".getBytes());
         out.flush();
     
      // Dans tous les cas, fermeture du fichier en lecture
      fic.close();
      in.close();
      out.close();
     
         float tps = (new Date().getTime() - t.getTime()) / 1000F;
         if (tps == 0) tps = 1;
     
         System.out.println(tailleF + " octets copiés en " + (new Date().getTime() - t.getTime()) + "ms");
     }
    }


    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
     
    package serv3;
     
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.RandomAccessFile;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    public class Serveur extends Thread 
    {
     public Serveur()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
        ServerSocket socketEcoute = new ServerSocket(8008);
        Socket socketClient = socketEcoute.accept();
     
           DataInputStream in = new DataInputStream(socketClient.getInputStream());
           DataOutputStream out = new DataOutputStream(socketClient.getOutputStream()); 
     
           RandomAccessFile fluxSortie = new RandomAccessFile("d:\\salah.rar","rw");
     
           String message = "";
           while (!message.equals("END"))
           {     
         // Creation d'un tampon de stockage
         byte[] buffer_receive = new byte[1024];
     
         // Lecture du message sur le flux d'entree
         int size_msg = 0;
     
         size_msg = in.read(buffer_receive, 0, buffer_receive.length);
     
         fluxSortie.write(buffer_receive);
     
         if (size_msg >= 0)
          message = new String(buffer_receive, 0, size_msg); 
     
         if (!message.equals("END"))
         {
          out.write("OK".getBytes());
          out.flush();      
         }
           }
       }
       catch(Exception e) {}
      }
    }
    et le main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    package serv3;
     
    public class Main 
    {
       public static void main(String[] args) 
       {  
          new Serveur();new Client();  
       }
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       octets_lus = fic.read(buffer_send, 0, buffer_send.length - 4);
     
     
     
          out.write(buffer_send);
          out.flush();

    tu ne tiens pas compte de "octets_lu" alors que, clairement, buffer_send n'est pas plein (taille max -4 dans ton code au maximum). Donc en pratique, dans le "meilleurs" des cas, tu envoie à chaque fois 4 0 à la fin en trop (que le serveur joyeusement récupère et ajoute dans le fichier).

    Code correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       octets_lus = fic.read(buffer_send, 0, buffer_send.length - 4);
          out.write(buffer_send,0,octets_lus);
          out.flush();
    Même commentaire pour la lecture coté serveur.
    PS à améliorer:
    • je ne vois pas l'intérêt de ce "-4"
    • je ne vois pas comment dans ton code, tu es sur de recevoir le "END" . Tu pexu très bien recevoir plein de caca avec le end au bout, vu ton code
    • tu écrit le "END" dans le fichier destination, il a rien à y faire
    • tu ne supporterais pas un fichier qui contiendrais le texte "END" dedans

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Par défaut
    j'ai corrigé le client et le serveur mais toujours le meme probleme est ce que vous avez une idée

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    donne ton code modifié

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Par défaut
    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
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    package serv3;
     
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Date;
     
    public class Client extends Thread
    {
     public Client()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
       //envoiSimple();
       envoiFichier();
      }
      catch (Exception e) {e.printStackTrace();}
     }
     
     private void envoiSimple() throws UnknownHostException, IOException
     {
      Date t = new Date();
     
      Socket socketClient = new Socket("127.0.0.1", 8008);
         DataInputStream in = new DataInputStream(socketClient.getInputStream());
         DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
     
         // Creation d'un tampon de stockage
      byte[] buffer_receive = new byte[1024];
     
         for (int i = 0; i < 10 * 1024; i++)
         {
          out.write(buffer_receive);
          out.flush();
     
          in.read();
         }
     
         out.write("END".getBytes());
         out.flush();
     
         System.out.println("Transfert de 10 Mo en " + (new Date().getTime() - t.getTime()));
     }
     
     private void envoiFichier() throws UnknownHostException, IOException
     {
      Date t = new Date();
     
      Socket socketClient = new Socket("localhost", 8008);
         DataInputStream in = new DataInputStream(socketClient.getInputStream());
         DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
     
     
      // ouverture de flux sur le fichier à envoyer
         RandomAccessFile fic = null;
      int tailleF = 0;
     
     
         fic = new RandomAccessFile ("c:\\salah.pdf","rw");
         tailleF = (int) fic.length();
     
     
         // quelques initialisations     
      byte[] buffer_send = new byte[1024]; // buffer de lecture dans le fichier
         int fichierfini = -1; // == 0 lorsque le fichier aura été entièrement envoyé
     
     
         while (fichierfini !=0)
      {
       // Lecture du fichier d'entrée dans le buffer
       int octets_lus = 0; // nombre d'octets lus
       octets_lus = fic.read(buffer_send, 0, buffer_send.length - 4);
     
     
          //modification apporté
          out.write(buffer_send,0,octets_lus);
          out.flush();
     
     
          in.read();
     
       // teste si le fichier source a été entièrement parcourru
       fichierfini = (int) (fic.length() - fic.getFilePointer());
      }
     
      // Boucle d'envoi terminée : soit envoi fini, soit erreur
         out.write("END".getBytes());
         out.flush();
     
      // Dans tous les cas, fermeture du fichier en lecture
      fic.close();
      in.close();
      out.close();
     
         float tps = (new Date().getTime() - t.getTime()) / 1000F;
         if (tps == 0) tps = 1;
     
         System.out.println(tailleF + " octets copiés en " + (new Date().getTime() - t.getTime()) + "ms");
     }
    }

    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
     
    package serv3;
     
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.RandomAccessFile;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    public class Serveur extends Thread 
    {
     public Serveur()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
        ServerSocket socketEcoute = new ServerSocket(8008);
        Socket socketClient = socketEcoute.accept();
     
           DataInputStream in = new DataInputStream(socketClient.getInputStream());
           DataOutputStream out = new DataOutputStream(socketClient.getOutputStream()); 
     
           RandomAccessFile fluxSortie = new RandomAccessFile("d:\\salah.pdf","rw");
     
           String message = "";
           while (!message.equals("END"))
           {     
         // Creation d'un tampon de stockage
         byte[] buffer_receive = new byte[1024];
     
         // Lecture du message sur le flux d'entree
         int size_msg = 0;
     
         size_msg = in.read(buffer_receive, 0, buffer_receive.length);
     
         fluxSortie.write(buffer_receive,0,size_msg);
     
         if (size_msg >= 0)
          message = new String(buffer_receive, 0, size_msg); 
     
         if (!message.equals("END"))
         {
          out.write("OK".getBytes());
          out.flush();      
         }
           }
       }
       catch(Exception e) {}
      }
    }
    est ce que vous pouvez me proposé des modification car je suis blocké
    Merci

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    -> ma remaque sur la présence du END dans la réponse est toujours valable, tu n'a rien fait pour le corriger, ca pollue ton fichier destination
    -> faire un new String () d'un array de byte quelconque est très dangereux, ca peut lancer des exceptions!
    -> retire ce et remplace le, au minimum, par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    catch(Exception e) {e.printStackTrace();}
    -> ton in.read() du coté envoi ne sert à rien, ton serveur, de l'autre coté, n'écrit jamais sur sont outpustream, tu ne peux donc rien avoir à recevoir.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Par défaut
    Le END c'est juste pour determiné la fin du fichier... en faite ya pa de probleme avec un fichier .txt il est transféré avec succé
    je pens que le probleme ce strouve au niveau des byte
    Merci

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    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 483
    Par défaut
    1) le End se retrouve dans le fichier
    2) le End peut etre précédé de crasse, puisque tu envoie tout dans un flux, y a rien qui te garantie que de l'autre coté on va lire les byte par même paquet.
    D'un coté tu envoi 3x1024byte puis END
    de l'autre coté tu recois peut etre 6x500byte puis 48byte avec END au bout
    résultat:
    a) ton new String(buffer) n'as pas de sens dans ce dernier cas (les 48 bytes peuvent etre tout et n'importe quoi,. Pareil pour les 6x500 bytes -> exception (que tu ignore superbement au passage) et fichier tronqué
    b) ton test message.equals("END") ne sera dans ce cas jamais true.

    Ce n'est pas comme ça qu'on marque la fin de l'envoi d'un fichier. Le plus simple, soit tu envoie au préalable un long avec la taille du ficheir (ainsi ton destinataire sait combien de fichiers il doit recevoir et donc n'a plus qu'à compter correctement), soit tu fait un close de la socket (et ton destinaire sais qu'on a atteind la fin grace à ce close)

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Par défaut
    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
    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
     
    package serv3;
     
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Date;
     
    public class Client extends Thread
    {
     public Client()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
       //envoiSimple();
       envoiFichier();
      }
      catch (Exception e) {e.printStackTrace();}
     }
     
     
     private void envoiFichier() throws UnknownHostException, IOException
     {
      Date t = new Date();
     
      Socket socketClient = new Socket("localhost", 8008);
         DataInputStream in = new DataInputStream(socketClient.getInputStream());
         DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
      // ouverture de flux sur le fichier à envoyer
         RandomAccessFile fic = null;
      int tailleF = 0;
         fic = new RandomAccessFile ("c:\\salah.txt","rw");
         tailleF = (int) fic.length();
         // quelques initialisations     
      byte[] buffer_send = new byte[1024]; // buffer de lecture dans le fichier
         int fichierfini = -1; // == 0 lorsque le fichier aura été entièrement envoyé
     
     
         while (fichierfini !=0)
      {
       // Lecture du fichier d'entrée dans le buffer
       int octets_lus = 0; // nombre d'octets lus
       octets_lus = fic.read(buffer_send, 0, buffer_send.length - 4);
     
          out.write(buffer_send);
          out.flush();
          in.read();
     
       // teste si le fichier source a été entièrement parcourru
       fichierfini = (int) (fic.length() - fic.getFilePointer());
      }
     
      // Boucle d'envoi terminée : soit envoi fini, soit erreur
         out.write("END".getBytes());
         out.flush();
     
      // Dans tous les cas, fermeture du fichier en lecture
      fic.close();
      in.close();
      out.close();
     
         float tps = (new Date().getTime() - t.getTime()) / 1000F;
         if (tps == 0) tps = 1;
     
         System.out.println(tailleF + " octets copiés en " + (new Date().getTime() - t.getTime()) + "ms");
     }
    }

    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
     
    package serv3;
     
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.RandomAccessFile;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    public class Serveur extends Thread 
    {
     public Serveur()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
        ServerSocket socketEcoute = new ServerSocket(8008);
        Socket socketClient = socketEcoute.accept();
     
           DataInputStream in = new DataInputStream(socketClient.getInputStream());
           DataOutputStream out = new DataOutputStream(socketClient.getOutputStream()); 
     
           RandomAccessFile fluxSortie = new RandomAccessFile("d:\\salah.txt","rw");
     
           String message = "";
           while (!message.equals("END"))
           {     
         // Creation d'un tampon de stockage
         byte[] buffer_receive = new byte[1024];
     
         // Lecture du message sur le flux d'entree
         int size_msg = 0;
     
         size_msg = in.read(buffer_receive, 0, buffer_receive.length);
     
         fluxSortie.write(buffer_receive);
     
         if (size_msg >= 0)
          message = new String(buffer_receive, 0, size_msg); 
     
         if (!message.equals("END"))
         {
          out.write("OK".getBytes());
          out.flush();      
         }
           }
       }
       catch(Exception e) {}
      }
    }
    est ce que vous pouvez faire les modification necessaire directement sur le code... et merci d'aance tchize

  10. #10
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2006
    Messages : 61
    Par défaut
    Voila j'ai trouvé la solution ... elle peut servir a quelqun

    1 er : transfert d'un fichier d'un serveur vers un client sockets :

    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
     
    package serv4;
     
    import java.net.*;
    import java.io.*;
     
    public class Serveur {
      public static void main (String [] args ) throws IOException {
        // create socket
        ServerSocket servsock = new ServerSocket(13267);
        while (true) {
          System.out.println("Waiting...");
     
          Socket sock = servsock.accept();
          System.out.println("Accepted connection : " + sock);
     
          // sendfile
          File myFile = new File ("c:\\salahs.pdf");
          byte [] mybytearray  = new byte [(int)myFile.length()];
          FileInputStream fis = new FileInputStream(myFile);
          BufferedInputStream bis = new BufferedInputStream(fis);
          bis.read(mybytearray,0,mybytearray.length);
          OutputStream os = sock.getOutputStream();
          System.out.println("Sending...");
          os.write(mybytearray,0,mybytearray.length);
          os.flush();
          sock.close();
          }
        }
    }
    Clinet :

    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
     
    package serv4;
     
    import java.net.*;
    import java.io.*;
     
    public class Client{
      public static void main (String [] args ) throws IOException {
        int filesize=6022386; // filesize temporary hardcoded
     
        long start = System.currentTimeMillis();
        int bytesRead;
        int current = 0;
        // localhost for testing
        Socket sock = new Socket("127.0.0.1",13267);
        System.out.println("Connecting...");
     
        // receive file
        byte [] mybytearray  = new byte [filesize];
        InputStream is = sock.getInputStream();
        FileOutputStream fos = new FileOutputStream("d:\\salahs.pdf");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        bytesRead = is.read(mybytearray,0,mybytearray.length);
        current = bytesRead;
     
     
        do {
           bytesRead =
              is.read(mybytearray, current, (mybytearray.length-current));
           if(bytesRead >= 0) current += bytesRead;
        } while(bytesRead > -1);
     
        bos.write(mybytearray, 0 , current);
        bos.flush();
        long end = System.currentTimeMillis();
        System.out.println(end-start);
        bos.close();
        sock.close();
      }
    }
    2 eme : Transfert d'un fichier a partir d'un client vers un serveur

    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
     
    package serv3;
     
    import java.io.BufferedOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.RandomAccessFile;
    import java.net.ServerSocket;
    import java.net.Socket;
     
    public class Serveur extends Thread 
    {
     public Serveur()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
     
    	  int filesize=6022386; // filesize temporary hardcoded
     
    	    long start = System.currentTimeMillis();
    	    int bytesRead;
    	    int current = 0;
        ServerSocket socketEcoute = new ServerSocket(8008);
        Socket socketClient = socketEcoute.accept();
     
     
           DataOutputStream out = new DataOutputStream(socketClient.getOutputStream()); 
     
     
           byte [] mybytearray  = new byte [filesize];
           DataInputStream in = new DataInputStream(socketClient.getInputStream());
           FileOutputStream fos = new FileOutputStream("d:\\salahss.pdf");
           BufferedOutputStream bos = new BufferedOutputStream(fos);
           bytesRead = in.read(mybytearray,0,mybytearray.length);
           current = bytesRead;
     
           // thanks to A. Cádiz for the bug fix
           do {
              bytesRead =
                 in.read(mybytearray, current, (mybytearray.length-current));
              if(bytesRead >= 0) current += bytesRead;
           } while(bytesRead > -1);
     
           bos.write(mybytearray, 0 , current);
           bos.flush();
           long end = System.currentTimeMillis();
           System.out.println(end-start);
           bos.close();
           in.close();    
     
     
     
     
     
     
       }
       catch(Exception e) {}
      }
    }
    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
    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
     
    package serv3;
     
    import java.io.BufferedInputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.io.RandomAccessFile;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Date;
     
    public class Client extends Thread
    {
     public Client()
     {
      this.start();
     }
     
     public void run()
     {
      try
      {
       //envoiSimple();
       envoiFichier();
      }
      catch (Exception e) {e.printStackTrace();}
     }
     
     
     private void envoiFichier() throws UnknownHostException, IOException
     {
      Date t = new Date();
     
      Socket socketClient = new Socket("localhost", 8008);
         DataInputStream in = new DataInputStream(socketClient.getInputStream());
         DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
     
     
         File myFile = new File ("c:\\salahs.pdf");
         byte [] mybytearray  = new byte [(int)myFile.length()];
         FileInputStream fis = new FileInputStream(myFile);
         BufferedInputStream bis = new BufferedInputStream(fis);
         bis.read(mybytearray,0,mybytearray.length);
     
         System.out.println("Sending...");
         out.write(mybytearray,0,mybytearray.length);
         out.flush();
     
     
     
     
      in.close();
      out.close();
     
         float tps = (new Date().getTime() - t.getTime()) / 1000F;
         if (tps == 0) tps = 1;
     
         System.out.println((int)myFile.length() + " octets copiés en " + (new Date().getTime() - t.getTime()) + "ms");
     }
    }
    main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    package serv3;
     
    public class Main 
    {
       public static void main(String[] args) 
       {
    	   try{
          new Serveur();new Client();
    	   }   
       catch(Exception e) {e.printStackTrace();}
       }
    }
    Merci a vous

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

Discussions similaires

  1. [Socket] envoi de fichier
    Par danje dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 03/05/2008, 19h22
  2. Envoi de fichier par socket
    Par dr_octopus74 dans le forum Réseau
    Réponses: 42
    Dernier message: 19/01/2007, 18h59
  3. [socket] probleme d'envoi de fichier
    Par soulhouf dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 21/10/2005, 17h15
  4. [Débutant] Envoi de fichier par socket
    Par zapho dans le forum Entrée/Sortie
    Réponses: 13
    Dernier message: 26/05/2004, 19h58
  5. [Socket]envoie de fichier!!!
    Par SamDaKap dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/11/2002, 09h07

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