Sockets .. envoie de fichiers endomagé
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:
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:
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:
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();
}
} |