[RESOLU]Problème de communication (DataInputStream & DataOutputStream)

Problème de communication (DataInputStream & DataOutputStream) [RESOLU] - Java - Programmation

Marsh Posté le 19-02-2004 à 16:13:03    

Bonjour,
 
J'ai donc un ptit problème de communication entre 2 flux et, bien qu'il soit probable que ce soit une erreur toute bête :whistle:, je sèche complètement :sweat:.
 
Mon objectif étant de permettre à un client d'uploader des fichiers sur un serveur, j'ai essayé avec ces morceaux de code :
 
Du coté serveur j'ai ça :

Code :
  1. String leNomFichier = "" ;
  2.  long laTailleFichier = -1 ;
  3.  byte leTampon[] = new byte[TAILLE_BLOC] ;
  4.  int leNbOctetsLus = -1, leNbOctetsLusTotal = 0 ;
  5.  try
  6.  {
  7.   leNomFichier = sonFluxEntree.readUTF() ;
  8.   laTailleFichier = sonFluxEntree.readLong() ;
  9.   FileOutputStream leFluxFichier = new FileOutputStream(REPERTOIRE + leNomFichier) ;
  10.   while (leNbOctetsLusTotal < laTailleFichier)
  11.   {
  12.    leNbOctetsLus = sonFluxEntree.read(leTampon) ;
  13.    System.out.println(leNbOctetsLus) ;
  14.    leFluxFichier.write(leTampon, 0, leNbOctetsLus) ;
  15.    leNbOctetsLusTotal += leNbOctetsLus ;
  16.   }


et du coté client j'ai ça :

Code :
  1. File leFichier = new File(REPERTOIRE + telFID + EXTENSION) ;
  2.  byte leTampon[] = new byte[TAILLE_BLOC] ;
  3.  int leNbOctetsLus = -1 ;
  4.  try
  5.  {
  6.   sonFluxSortie.writeUTF(leFichier.getName()) ;
  7.   sonFluxSortie.writeLong(leFichier.length()) ;
  8.   FileInputStream leFluxFichier = new FileInputStream(leFichier) ;
  9.   while ((leNbOctetsLus = leFluxFichier.read(leTampon)) != -1)
  10.   {
  11.    sonFluxSortie.write(leTampon, 0, leNbOctetsLus) ;
  12.    System.out.println(leNbOctetsLus) ;
  13.   }


J'en viens donc maintenant à mon problème :

  • Grâce aux System.out.println(leNbOctetsLus) ; placés dans les boucles j'ai pu constater que lors du dernier bloc à envoyer leNbOctetsLus était bien inférieur à TAILLE_BLOC coté client, mais que cet abrutit de serveur lisait encore TAILLE_BLOC octets :pfff: (il faut savoir que j'ai d'autres write qui suivent derrière coté client).
  • Au final, je me retrouve coté serveur avec un fichier plus gros que l'original, et tout les read / write qui suivent ne sont plus en phases :cry:.


Voili voilou, désolé si j'ai pas été super clair et désolé de vous déranger si c'est une erreur de merde :sarcastic:.
En tout cas ce serait super cool si vous pouviez me débloquer :jap:.
 
Merci d'avance pour les réponses :hello:.


Message édité par HannibAlBundie le 20-02-2004 à 18:10:26
Reply

Marsh Posté le 19-02-2004 à 16:13:03   

Reply

Marsh Posté le 20-02-2004 à 15:56:47    

un ptit up dû à l'EDIT du 20/02 :D

Reply

Marsh Posté le 20-02-2004 à 16:30:51    

Code :
  1. int leNombreDOctetRestantALire = laTailleFichier;
  2.        while (leNbOctetsLusTotal < laTailleFichier)
  3.        {
  4.           if (leNombreDOctetRestantALire > leTampon.length) {
  5.              leNbOctetsLus = sonFluxEntree.read(leTampon);
  6.           } else {
  7.              leNbOctetsLus = sonFluxEntree.read(leTampon, 0, leNombreDOctetRestantALire );
  8.           }
  9.           leNombreDOctetRestantALire -= leNbOctetsLus;
  10.           System.out.println(leNbOctetsLus) ;
  11.           leFluxFichier.write(leTampon, 0, leNbOctetsLus) ;
  12.           leNbOctetsLusTotal += leNbOctetsLus ;
  13.        }


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 20-02-2004 à 18:09:40    

Merci beaucoup :jap: , ca marche beaucoup mieux comme ça :p

Reply

Sujets relatifs:

Leave a Replay

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