Bonjour tout le monde
Voila mon problémé j'ai commencé a travaillé avec les sockets .j'ai essayé de transferer des fichier via les sockets . mais lorsque je veux ouvrir le fichier transféré par exemple (.doc ou .pdf) je le trouve endomagé
NB: je peux seulement ouvrir les fichiers transféré sous format "fichier.txt" est ce que vous avez une idée
Merci d'avance
voila mes class

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
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
 
package serv3;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Date;
 
public class Client extends Thread
{
 public Client()
 {
  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);
     DataInputStream in = new DataInputStream(socketClient.getInputStream());
     DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
 
     // Creation d'un tampon de stockage
  byte[] buffer_receive = new byte[1024];
 
     for (int i = 0; i < 10 * 1024; i++)
     {
      out.write(buffer_receive);
      out.flush();
 
      in.read();
     }
 
     out.write("END".getBytes());
     out.flush();
 
     System.out.println("Transfert de 10 Mo en " + (new Date().getTime() - t.getTime()));
 }
 
 private void envoiFichier() throws UnknownHostException, IOException
 {
  Date t = new Date();
 
  Socket socketClient = new Socket("localhost", 8008);
     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 ("c:\\salah.rar","rw");
     tailleF = (int) fic.length();
 
 
     // quelques initialisations     
  byte[] buffer_send = new byte[1024]; // buffer de lecture dans le fichier
     int fichierfini = -1; // == 0 lorsque le fichier aura été entièrement envoyé
 
 
     while (fichierfini !=0)
  {
   // Lecture du fichier d'entrée dans le buffer
   int octets_lus = 0; // nombre d'octets lus
   octets_lus = fic.read(buffer_send, 0, buffer_send.length - 4);
 
 
 
      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");
 }
}


serveur :

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
 
package serv3;
 
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.RandomAccessFile;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Serveur extends Thread 
{
 public Serveur()
 {
  this.start();
 }
 
 public void run()
 {
  try
  {
    ServerSocket socketEcoute = new ServerSocket(8008);
    Socket socketClient = socketEcoute.accept();
 
       DataInputStream in = new DataInputStream(socketClient.getInputStream());
       DataOutputStream out = new DataOutputStream(socketClient.getOutputStream()); 
 
       RandomAccessFile fluxSortie = new RandomAccessFile("d:\\salah.rar","rw");
 
       String message = "";
       while (!message.equals("END"))
       {     
     // 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 = 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) {}
  }
}
et le main

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
package serv3;
 
public class Main 
{
   public static void main(String[] args) 
   {  
      new Serveur();new Client();  
   }
}