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 :
et le main
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) {} } }
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(); } }
Partager