Bonjour, je fais une application de stockage de fichiers client/serveur.
Et j'ai un problème que je ne comprend pas.
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 //utiliser par la partie cliente public static void EnvoiFichier(String nomDeFichier, DataOutputStream outToServeur,BufferedReader inS) throws IOException, InterruptedException { RandomAccessFile fic = null; fic = new RandomAccessFile (nomDeFichier,"r"); byte[] buffer_send = new byte[1024]; // buffer de lecture dans le fichier int fichierfini = (int)fic.length(); // == 0 lorsque le fichier aura été entièrement envoyé while (fichierfini != 0){ //System.out.println("taille restante : "+ fic.getFilePointer()); int octets_lus = 0; // nombre d'octets lus octets_lus = fic.read(buffer_send, 0, buffer_send.length - 4); if(fichierfini > 1024){ System.out.println("taille envoyé : " + buffer_send.length); outToServeur.write(buffer_send); //envoie } else if(fichierfini < 1024){ System.out.println("taille envoyé : " + fichierfini); System.out.println("Fin fichier LECTURE envoi fichier"); outToServeur.write(buffer_send,0,fichierfini); } outToServeur.flush(); inS.read(); //attente confirmation fichierfini = (int) (fic.length() - fic.getFilePointer()); } outToServeur.write("END".getBytes()); //outToServeur.writeBytes("END"); System.out.println("envoie du END"); outToServeur.flush(); fic.close(); }En effet, lorsque j'envoie un fichier texte tout se passe bien par contre quand je passe à un fichier plus gros comme une image, le message "END" envoyé par le client est compris dans la dernière partie du fichier que j'envoie (il devrait être envoyer séparément dans le prochain envoi), et je ne vois vraiment pas pourquoi. Par exemple j'envoie 592 bytes dans l'affichage taille reçu j'ai 595 (comprend donc les 3 bytes du "END", mais à la reception
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 //utilisé par la partie serveur pour recevoir les fichiers public static void ReceptFichier(String nomDeFichier, DataOutputStream sortie, InputStream entree) throws IOException { try{ //System.out.println("ouverture du fichier1"); RandomAccessFile fluxSortie = new RandomAccessFile(nomDeFichier,"rw"); //System.out.println("ouverture du fichier2"); String message = ""; sortie.flush(); while (!message.equals("END")){ System.out.println("reception d'une partie"); // 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 = entree.read(buffer_receive, 0, buffer_receive.length); //en attente System.out.println("taille reçu : " + size_msg); if (size_msg >= 0){ message = new String(buffer_receive, 0, size_msg); System.out.println(message); } if (!message.equals("END")) { fluxSortie.write(buffer_receive); sortie.write("OK".getBytes()); System.out.println("pas la fin de fichier"); sortie.flush(); } else if (message.equals("END")) System.out.println("on est a la fin du fichier END"); } System.out.println("Fin de receptfichier : fermeture du fichier"); fluxSortie.close(); } catch (Exception e){} }
Pourtant, le "END" est envoyé après la réception d'une confirmation par le serveur. Est ce que vous pourriez m'aider à trouver le problème s'il vous plaît ?
Edit:
J'ai reussi à le faire marcher sans trop savoir comment ... J'ai mi un writeBytes à la place d'un write.getBytes pour le "OK" et un readLine ... Mais le problème est cette fois-ci que l'image transférer n'est pas correct, il doit y avoir des pertes de données ? Pourtant tout semble correct pour les textes.
Merci.
Partager