envoi de gros fichier par socket - Java - Programmation
Marsh Posté le 04-05-2011 à 12:38:35
C'est quoi la valeur de "lu" côté client?
Sinon tu fermes pas ton fluxsortie par un fluxsortie.close().
Marsh Posté le 04-05-2011 à 13:35:46
la valeur de lu ne passe jamais à -1...
elle ne voit pas la fin du fichier.. donc je ne peux pas l'arrêter.
pour ça, j'ai trouvé une solution, je créé un message avec la taille du fichier a envoyer :
Code :
|
puis je l'envoie via un message socket et j'ajoute ceci :
Code :
|
grâce à ça, je peux arrêter la lecture du buffer et fermer mes flux.
mais je suis toujours pas sorti d'affaire, parce que je dois envoyer plusieurs fichiers a la suite,
j'avais donc fais une procédure de ce genre :
- le serveur compte le nombre de fichier a envoyer et l'envoie au client
- le serveur fait une boucle de 0 a nombre de fichiers
- envoie le nom et la taille du fichier
- envoie le fichier
le client :
- le client reçoit le nombre de fichier
- le client fait une boucle de 0 a nombre de fichiers
- reçoit le nom et la taille du fichier
- reçoit le fichier
cette procedure me semble correcte, elle marche bien pour le premier fichier, mais ca plante des le 2eme... avec un message connection reset..
c'est pour ca que je ne fermait pas le flux outputstream coté serveur, car je veux envoyer plusieurs fichiers..
Voici le code de la procedure ci dessus :
Code :
|
coté client :
Code :
|
l'erreur que j'obtiens
coté serveur :
java.net.SocketException: Broken pipe
coté client :
java.net.SocketException: Socket closed
si je vire les appels de fonctions qui envoient/recoivent les fichiers, tous les echanges fonctionnent, je dois donc fermer qqch qui bloque la connexion, puisque la ligne qui pose probleme, c'est celle contenant le writeObject(message); ou le readObject();
voila, j'espere avoir été clair.
merci pour votre aide !
Marsh Posté le 04-05-2011 à 14:14:50
C'EST BON !
je ne comprend pas vraiment pourquoi, (j'ai pas trouvé tout seul) mais si je ferme le
BufferedInputStream inBuffer = new BufferedInputStream(socket.getInputStream());
et bien ca plante...
Marsh Posté le 04-05-2011 à 10:47:18
bonjour,
je dois faire du transfert de fichiers assez volumineux par socket, mais je bloque un peu...
j'utilise un tampon pour decouper mon fichier, j'arrive bien a le transferer mais le client n'arrive pas à voir quand est ce que la fin du fichier arrive..
voici la code coté serveur (qui envoie le fichier) :
voici le client qui recoit :
j'ai bien le transfert de fichier qui s'effectue, mais il ne s'arrete pas...
si quelqu'un a deja fait qqch de similaire et peut me preter main forte..
merci d'avance