Probleme Envoi fichiers client/serveur JAVA

Fermé
Boris94240 - 23 mars 2009 à 15:56
magicien10024 Messages postés 3174 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 octobre 2018 - 23 mars 2009 à 18:52
Bonjour,
je cherche a faire un serveur de sauvegarde de fichiers avec le client qui va bien...
jusque la j'arrive bien a faire communiquer le serveur avec le client, j'arrive a envoyer un fichier unique mais lorsque j'essai d'envoyer tout une liste de fichier ma fonction de recuperation de fichier s'arrete de fonctionner mais je ne sais pas pourquoi ....

Merci d'avance pour votre aide!!

La ligne ou s'arrete de fonctionner le serveur est la suivante

bytesRead = is.read(mybytearray, current, (mybytearray.length-current));


Voici le serveur
[code]

import java.net.*;

import java.io.*;

import FonctionUtils.listerFichier;

public class FileServer {

public static void main (String [] args ) throws IOException {


String message="rien";

// create socket

ServerSocket servsock = new ServerSocket(13267);

while (true) {

System.out.println("Waiting...");

Socket sock = servsock.accept();

System.out.println("Accepted connection : " + sock);

BufferedReader reception = new BufferedReader(new InputStreamReader(sock.getInputStream()));

PrintWriter envoi = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())),true);



File RepertoireDuClient = new File("C:/Documents and Settings/HP_Administrateur/Mes documents/NetBeansProjects/DesktopApplication1/"+sock.getInetAddress().toString());

File DataDuClient = new File("C:/Documents and Settings/HP_Administrateur/Mes documents/NetBeansProjects/DesktopApplication1/"+sock.getInetAddress().toString()+"/"+sock.getInetAddress().toString()+".bin");

if (!RepertoireDuClient.exists())

{

RepertoireDuClient.mkdir();

DataDuClient.createNewFile();

System.out.println("creation du dossier client");

envoi.println("full");

message = reception.readLine();

System.out.println("Message du client : " +message);

if(message.equalsIgnoreCase("ok")){

String nbfichiers = reception.readLine();

int nbfic = Integer.parseInt(nbfichiers);

System.out.println("nombere de fichiers :" +nbfic);

for(int i=0;i<nbfic;i++){

System.out.println("Waiting... fichier :" +i);

envoi.println("ok");

int filesize=6022386; // filesize temporary hardcoded

long start = System.currentTimeMillis();

int bytesRead;

int current = 0;

// receive file

byte [] mybytearray = new byte [filesize];

InputStream is = sock.getInputStream();

FileOutputStream fos = new FileOutputStream("C:/Documents and Settings/HP_Administrateur/Mes documents/NetBeansProjects/DesktopApplication1/"+sock.getInetAddress().toString()+"/"+sock.getInetAddress().toString()+".txt");

BufferedOutputStream bos = new BufferedOutputStream(fos);

bytesRead = is.read(mybytearray,0,mybytearray.length);

current = bytesRead;

System.out.println("dddd");

// thanks to A. Cádiz for the bug fix

do {

System.out.println("jhnjkjk");

bytesRead = is.read(mybytearray, current, (mybytearray.length-current));

System.out.println("iiiii"+ bytesRead);

if(bytesRead >= 0) current += bytesRead;

System.out.println("eeee"+ bytesRead);

} while(bytesRead > -1);

bos.write(mybytearray, 0 , current);

bos.flush();

long end = System.currentTimeMillis();

System.out.println(end-start);

bos.close();

}

}

}

}

}

}


/code


et voici le client

[code]


import java.net.*;

import java.io.*;

import FonctionUtils.listerFichier;

public class FileClient{

public static void main (String [] args ) throws IOException {

Socket sock = new Socket("127.0.0.1",13267);

String message="rien";

// create socket



while (true) {

System.out.println("Waiting...");



System.out.println("Accepted connection : " + sock);

BufferedReader reception = new BufferedReader(new InputStreamReader(sock.getInputStream()));

PrintWriter envoi = new PrintWriter(new BufferedWriter(new OutputStreamWriter(sock.getOutputStream())),true);

message = reception.readLine();

System.out.println(message);

if(message.equalsIgnoreCase("full")){

envoi.println("ok");

System.out.println("ok");

File[] listeFichier;

listeFichier= listerFichier.listeDeFichiersDansDossierEtSousDossier("C:/Documents and Settings/HP_Administrateur/Mes documents/NetBeansProjects/DesktopApplication1/donnees/");

int nbfichiers = listeFichier.length;

System.out.println("Nombre de fichiers qui vont etre envoyés : taille listeFichier ="+listeFichier.length);

envoi.println(nbfichiers+"");

for(int i=0;i<nbfichiers;i++){

message = reception.readLine();


if(message.equalsIgnoreCase("ok")){

// sendfile

System.out.println(listeFichier[i]);

String cheminfile = listeFichier[i].toString();

File myFile = new File (cheminfile);

byte [] mybytearray = new byte [(int)myFile.length()];

FileInputStream fis = new FileInputStream(myFile);

BufferedInputStream bis = new BufferedInputStream(fis);

bis.read(mybytearray,0,mybytearray.length);

OutputStream os = sock.getOutputStream();

System.out.println("Sending...");

os.write(mybytearray,0,mybytearray.length);

os.flush();

}



}

}

}

}

}



/code
A voir également:

1 réponse

magicien10024 Messages postés 3174 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 octobre 2018 283
23 mars 2009 à 15:58
bonjour,


compresse ton volume de fichiers , tu auras moins de souci
0
qu'entends tu par la ?
0
magicien10024 Messages postés 3174 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 octobre 2018 283 > Boris94240
23 mars 2009 à 17:10
quand tu as 1 seule fichier ca ne pose pas de souci


ex si ton dossier fait 100 m° tu le compresse


ton fichier--> clic droit --> envoyer vers --> dossier compressé
0
Boris94240 > magicien10024 Messages postés 3174 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 octobre 2018
23 mars 2009 à 17:39
ha oui ok ... effectivement ca aurait été une solution si j'avais la possibilité de le faire mais je ne peux pas ....
Je dois sauvegarder tout le contenu d'un dossier ( c'est a dire fichers et sous dossiers qui sont dedans )
C'est pourquoi je liste tous les fichiers d'un repretoire avec la fonction suivante.

listeFichier= listerFichier.listeDeFichiersDansDossierEtSousDossier("C:/Documents and Settings/HP_Administrateur/Mes documents/NetBeansProjects/DesktopApplication1/donnees/");

je met le resultat dans un tableau de fichier
je regarde la taille qu'il fait et j'envoie au serveur le nombre d'envois qu'il va y avoir pour la boucle for

tout se passe nikel sauf que le serveur au moment de la reception ne reçoit rien bien que le client ai tout envoyé.

je suis vraiment a cours d'idee ...
0
magicien10024 Messages postés 3174 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 28 octobre 2018 283 > Boris94240
23 mars 2009 à 18:52
j'avais la possibilité de le faire mais je ne peux pas


quand ton dossier ( ou sous dossier ca veut rien dire ) est compresser --> l'envoyer

le destinataire le décompresse et retrouve tout les fichiers qui s 'y trouve .



je suis vraiment à cours d'idee


prend le peine de faire 1 test si tu 'as pas d'idée
0