Copie de fichier par reseau

Fermé
lebusher Messages postés 24 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 24 janvier 2017 - 15 janv. 2017 à 20:19
lebusher Messages postés 24 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 24 janvier 2017 - 15 janv. 2017 à 21:58
Bonsoir !

Voila, ça fait un moment que je traivaille sur un programe java me permettant de tranferer des fichiers d'une machine a l'autre par reseau, mais mon code a des comportements innattendu. je vous met les portions d'envoie et de reception. Le probleme actuel, est que je n'arrive pas a recevoir, vous verez des System.out bien placee, lesquels me signalent que je reçois 0 bytes. je me casse la tete dessus depuis ce matin mais je vois pas pourquoi je reçois pas. Pourriez vous m'aider s'il vous plait ?

Merci!

Methode de l'envoie :


private static void envoieFichier( OutputStream os, File f){

try{
System.out.println(Files.copy(f.getAbsoluteFile().toPath(), os));

} catch(Exception e) { e.printStackTrace(); }

}

Methode de reception :


private static void recoisFichier( File file, InputStream is){

try{
System.out.println("recevon "+file);

System.out.println(Files.copy(is, file.getAbsoluteFile().toPath()));
System.out.println("RECU "+(file.length()/8));
//fin telechargement
} catch(Exception e) { b.append("verifier espace sur le peripherique..\n");e.printStackTrace(); }

}


A voir également:

3 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 janv. 2017 à 20:39
Bonjour,

Comment as-tu fait le code qui appelle ces deux méthodes ?

J'ai repris cet ancien code (Envoi des fichiers par des sockets java) pour l'adapter avec tes deux méthodes et le transfert de fichiers est bon.

Socket sock = new ServerSocket(9001).accept();
recoisFichier(new File("C:/test2.jpg"), sock.getInputStream());
sock.close();

Socket sock = new Socket(InetAddress.getLocalHost(), 9001);
envoieFichier(sock.getOutputStream(), new File("C:/test.jpg"));
sock.close();

Donc ce n'est pas les deux méthodes que tu nous montres qui poserai problème mais plutôt la manière dont tu les utilises.
0
lebusher Messages postés 24 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 24 janvier 2017 17
15 janv. 2017 à 21:00
justement c'est etrange parceque mon code il fonctionnais bien, et des fois le programme ne fonctionne pas correctement.
le probleme que je cherchais a resoudre est que le fichier recus avait quelques bits en moins.. et la mon programme me donne un fichier recu vide, j'esperai en postant mon code ainsi decouvrir ce qui est a l'origine de ce comportement instable
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 janv. 2017 à 21:12
Comme je l'ai dit, ton code est incomplet, il manque la partie de comment tu gères tes Input/OutputStream, dans mon exemple je le fais avec des Socket, à voir comment tu as fait de ton côté, sachant que c'est vraiment cette partie là qui gère la communication réseau...
0
lebusher Messages postés 24 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 24 janvier 2017 17
15 janv. 2017 à 21:56
Fonction de reception :

//en fait je recois pas que des fichiers, mais aussi des dossier...
private static void recevoir(Socket client){

try{

InputStream is=new DataInputStream(client.getInputStream());

BufferedReader entree = new BufferedReader(new InputStreamReader(client.getInputStream()));
String nomFic = entree.readLine();b.append("recois "+nomFic+"\n");
File file=new File(nomFic);
String isFile = entree.readLine();

if ( valider(client, nomFic, isFile) ) {

if (isFile.equals("vrai"))
recoisFichier( new File(nomFic), is);

else {
OS = entree.readLine();
recoisFichier( new File("reception"+File.separator+nomFic+".zip"), is);
decompresser("reception"+File.separator+nomFic+".zip");System.out.println("Fin decompression");
}

}

entree.close();
is.close();
}
catch(IOException e){ e.printStackTrace(); }

}
0
lebusher Messages postés 24 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 24 janvier 2017 17
15 janv. 2017 à 21:58
et l'envoie :

public static void envoyer(Socket serveur, String file){

try{
File fic = new File(file);
OutputStream os=new DataOutputStream(serveur.getOutputStream());
OutputStreamWriter sortie = new OutputStreamWriter(serveur.getOutputStream());

ecrire( fic.getName(), sortie);
if (fic.isFile()) ecrire( "vrai", sortie);
else ecrire( "faux", sortie);


if (fic.isFile()){
envoieFichier( os, new FileInputStream(fic), fic);
}
else {
dossier = fic.getName()+".zip";
FileOutputStream fos = new FileOutputStream(fic.getName()+".zip");
zos = new ZipOutputStream(new BufferedOutputStream(fos));
zos.setLevel(9);
zos.setMethod(ZipOutputStream.DEFLATED);

compresseDossier( fic.getAbsolutePath(), os, sortie, "");
zos.close();

ecrire(System.getProperty("os.name"), sortie);

envoieFichier(os, new FileInputStream(new File(fic.getName()+".zip")), new File(fic.getName()+".zip"));

}

} catch (IOException e){ b.append("Erreur d'envoie du fichier, veuillez reesayer!\n"); }

}



voila pour mes fonctions d'envoie et reception
0