bonjour à tous,
voila je suis pas un pro de java
mais la je galere je me suis documenté sur le probleme et rien à faire, j'ai toujours un probleme.
voila j'essai de faire un programme permettant le transfert de fichier du serveur vers le client et faire transiter le fichier par socket.
le truc c'est qu'avec les fichier d'extension .txt j'ai aucun probleme, mon seul probleme c'est quand je fait le transfert d'un autre type d'extension ca foire grave je reçois le fichier mais le nombre d'octet n'est pas le meme que la source. donc pour l'ouverture des fichiers (on va pas en faire un dession ca marche pas).
voici mon code si quelqu'un a une idée qu'il me fait sign svp c'est pour mon projet scolaire:


voici ma classe principale:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public class main 
{
   public static void main(String[] args) 
   {  
      new server();new Client();new selectionfichier();  
   }
}
*************************
*************************
*************************
*************************

ma classe server:

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
110
111
112
113
114
115
116
117
118
119
 
import java.net.*;
import java.awt.Dimension;
import java.io.*;
import java.util.*;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
 
 
public class server extends Thread
{
 public server()
 {
  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);
  ServerSocket socketEcoute = new ServerSocket(8008);
  Socket socketClient = socketEcoute.accept(); 
  DataInputStream in = new DataInputStream(socketClient.getInputStream());
     DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
 
     // Creation d'un tampon de stockage
  byte[] buffer_receive = new byte[4096];
 
     for (int i = 0; i <10*4096; i++)
     {
      out.write(buffer_receive);
      out.flush();
 
      in.read();
     }
 
     out.write("END".getBytes());
     out.flush();
 
     System.out.println("Transfert " + (new Date().getTime() - t.getTime()));
 }
 
 private void envoiFichier() throws UnknownHostException, IOException
 {
  Date t = new Date();
 
 // Socket socketClient = new Socket("127.0.0.1", 8008);
  ServerSocket socketEcoute = new ServerSocket(8008);
  Socket socketClient = socketEcoute.accept(); 
  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 ("D:\\zelda.txt","r");
 
  /*JFileChooser fic1=new JFileChooser(new File("."));
  fic1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
  int retrunval=fic1.showDialog(new JFrame(), "selection");
  if(retrunval==JFileChooser.APPROVE_OPTION)
  {
	  File Selectchemin=fic1.getSelectedFile();
  }*/
  tailleF = (int) fic.length();
 
 
     // quelques initialisations     
  byte[] buffer_send = new byte[4096]; // buffer de lecture dans le fichier
     long fichierfini = -1; // == 0 lorsque le fichier aura été entièrement envoyé
 
 
     while (fichierfini !=0)
  {
   //Lecture du fichier d'entrée dans le buffer
   long octets_lus = 0; // nombre d'octets lus
   octets_lus = fic.length();
 
 
 
      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");
 }
}
***********************
***********************
***********************
***********************

voici mon code 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
package ServeurPackage;
 
import java.net.*;
import java.io.*;
 
 
public class Client extends Thread 
{
 public Client()
 {
  this.start();
 }
 
 public void run()
 {
  try
  {
    /*ServerSocket socketEcoute = new ServerSocket(8008);
    Socket socketClient = socketEcoute.accept();*/
	  Socket socketClient = new Socket("127.0.0.1", 8008);
       DataInputStream in = new DataInputStream(socketClient.getInputStream());
       DataOutputStream out = new DataOutputStream(socketClient.getOutputStream()); 
 
       RandomAccessFile fluxSortie = new RandomAccessFile("D:\\clermont\\zelda.txt","rw");
 
       String message = "";
       while (!message.equals("END"))
       {     
     // Creation d'un tampon de stockage
     byte[] buffer_receive = new byte[4096];
 
     // 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) {}
  }
}

j'aurais voulu utiliser JFileChooser pour selectionner mon fichier mais la cerveau plante donc si vous pouvez m'aider aussi de ce coté au lieu d'utiliser RandomAccessFile