Tranfert de plusieurs fichier client/server

Tranfert de plusieurs fichier client/server - Java - Programmation

Marsh Posté le 01-11-2002 à 15:54:26    

Bonjour a tous,
 
J'ai un probleme pour transferer plusieurs fichiers differents lors d'une meme connexion. Le probleme, c'est que le programme qui recoit les fichiers ne se rend pas compte que le 1er est fini et qu'il doit passer au second.  
 
Lorsque j'essaye de transferer 2 fichiers, le contenu du 1er et du second se retrouve dans le 1er du coté destination ( et le 2 eme n'est meme pas crée).
 
Sources :
 

Code :
  1. import java.util.*;
  2. import java.net.*;
  3. import java.io.*;
  4. public class Receiver{
  5. public static void main(String[] argv){
  6. try{
  7.        ServerSocket titi = new ServerSocket(6667); //on creer une nouvelle socket pour le transfert du fichier
  8.        Socket t=titi.accept();
  9.        RandomAccessFile inFile = new RandomAccessFile ("new03.jpg","rw" ); //on creer le fichier sur le disque dur
  10.        InputStream in2 = t.getInputStream(); 
  11.        byte bb[] = new byte[1024];
  12.        int amount;
  13.        while((amount = in2.read(bb)) != -1){
  14.      
  15.            inFile.write(bb,0,amount);
  16.            System.out.println("Receiving first picture"+bb.toString());
  17.        }
  18.   RandomAccessFile inFile2 = new RandomAccessFile ("new04ryan.jpg","rw" ); //on creer le fichier sur le disque dur
  19.        byte bb2[] = new byte[1024];
  20.        int amount2;
  21.        while((amount2 = in2.read(bb2)) != -1){
  22.          System.out.println("Receiving second picture" );
  23.            inFile2.write(bb2,0,amount2);
  24.        }
  25.        in2.close();
  26.        inFile.close();
  27.        t.close();
  28.    }
  29.    catch(IOException e){System.out.println(e);} 
  30.  
  31. }
  32. }


 

Code :
  1. import java.util.*;
  2. import java.net.*;
  3. import java.io.*;
  4. public class Sender{
  5. public static void main(String[] argv){
  6. try{
  7.        RandomAccessFile outFile = new RandomAccessFile("04.jpg","r" ); // création du fichier en lecture
  8.        Socket t = new Socket(argv[0],6667); //nouvelle socket pour le transfert du fichier
  9.        OutputStream out2 = t.getOutputStream(); 
  10.        byte bb[] = new byte[1024];
  11.        int amount;
  12.        while((amount = outFile.read(bb)) != -1){
  13.            out2.write(bb, 0,amount);
  14.        }
  15.      
  16.        outFile.close();
  17.    
  18.      
  19.        byte bb2[] = new byte[1024];
  20.        int amount2;
  21.    RandomAccessFile outFile2 = new RandomAccessFile("02ryan.jpg","r" ); // création du fichier en lecture       
  22.        while((amount2 = outFile2.read(bb2)) != -1){
  23.            out2.write(bb2, 0,amount2);
  24.        }
  25.        out2.close();
  26.        t.close();
  27.    }catch(IOException e){System.out.println(e);} 
  28.  
  29.  
  30.   }
  31.  
  32. }


 
Je me doute bien qu'il faudrait avertir le recepteur du changement de fichier mais je ne sais pas vraiment comment faire...
 
Merci d'avance

Reply

Marsh Posté le 01-11-2002 à 15:54:26   

Reply

Marsh Posté le 01-11-2002 à 19:27:20    

Est-ce-qu'il ne serait pas plus simple de transférer un fichier à la fois ? Donc n fichiers -> n transferts avec ouverture d'un socket à chaque coup :??:

Reply

Marsh Posté le 01-11-2002 à 19:38:49    

MachinBidule a écrit a écrit :

Est-ce-qu'il ne serait pas plus simple de transférer un fichier à la fois ? Donc n fichiers -> n transferts avec ouverture d'un socket à chaque coup :??:  




 
si les fichiers sont petits c'est pas super efficace. C'est comme si tu rouvrais une session avec ton mail serveur chaque fois que tu dois envoyer un mail


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 01-11-2002 à 20:03:32    

Ah oui, c'est vrai. Oops... +1 pour toi
 
Autre solution, alors:
 
Ecrire avant chaque "sous-flux" de fichier, une variable de type long (donc de longueur fixe) qui te donne le nombre d'octets à lire pour le prochain fichier. Ainsi, tu peux gérer une "rupture" sur ton flux de données pour le découper en autant de fichier à créer.
 
En pseudo-code:
 

Code :
  1. tant que flux non fini {
  2.     lire longueur (n) en octets du fichier à récupérer du flux
  3.     créer nouveau fichier en sortie
  4.     lire les n ocetets du flux vers le fichier
  5.     fermer le fichier en sortie
  6.   }


Reply

Marsh Posté le 03-11-2002 à 12:17:52    

Trés bonne idée.
 
Avant d'envoyer les fichiers, j'envoie leurs tailles en bytes.
Le recepteur sait quand s'arreter :) !
 
Ca marche :) :) !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed