Trensfert fichier via socket [Résolu]

Messages postés
22
Date d'inscription
jeudi 26 février 2009
Dernière intervention
9 mai 2010
- - Dernière réponse : mimaselma
Messages postés
6
Date d'inscription
mercredi 12 mai 2010
Dernière intervention
4 juin 2011
- 4 juin 2011 à 22:33
bonjour,
svp quelqu'un peut m'aider,
je veut transférer des fichiers via des socket, ça marche seulement pour les fichiers txt.
je veut transférer tout type de fichier.
merci
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
3
Merci
Salut,

Etrange : les flush sont bien effectués, les flux sont fermés, normalement ce code est OK.

C'est pas grave : le principal c'est que tu ai réussi à trouver un code qui marche.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

Merci cs_DARKSIDIOUS 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 103 internautes ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Montre nous comme tu t'y prends.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
22
Date d'inscription
jeudi 26 février 2009
Dernière intervention
9 mai 2010
0
Merci
j'ai pas compris qu'est ce que tu veut dire mais bon, en faite j'utilise un code que j'ai trouvé sur ce site,

// code client
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;

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("127.0.0.1", 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:\\Documents and Settings\\Administrateur\\Bureau\\java réseau\\Nouveau Document texte (2).txt","r");
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");
}

public static void main(String [] arg)
{
Client c= new Client();
}
}



// code serveur
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.RandomAccessFile;
import java.net.ServerSocket;
import java.net.Socket;

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:\\doc\\Nouveau Document texte (2).txt","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) {}
}
public static void main(String [] arg)
{
Serveur c= new Serveur();
}

}

merci d'avance pour tous
Commenter la réponse de ezzineahmed
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Le code me paraît correct.

Qu'est-ce que ca te fais lorsque tu essaye de mettre un fichier autre que txt ? Une exception ? Le fichier n'est pas envoyé ? Le fichier généré en sortie n'est pas correct ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
22
Date d'inscription
jeudi 26 février 2009
Dernière intervention
9 mai 2010
0
Merci
salut,
merci pour ta réponse, oui effectivement Le fichier généré en sortie n'est pas correct
il garde la forme(pdf, docx.. ) mais lorsque je veut l'ouvrir,une erreur parait: "... des problèmes ont etait décelé dans son contenu".
c'est quoi à ton avis l'origine de ce problème.
merci
Commenter la réponse de ezzineahmed
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Est-ce que sa taille est différente ? Est-ce que tu as comparé son contenu avec le contenu d'origine avec un outil de comparaison de type "winmerge" pour voir ce qui cloche (quelques octets différents, un bout de fichier manquant ou tout les octets différents ?)
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
22
Date d'inscription
jeudi 26 février 2009
Dernière intervention
9 mai 2010
0
Merci
salut,
la taille est inférieure à celle de l'original,
bon, je vient de trouver un autre code, ça marche, mais je trouve pas vraiment c'est quoi l'erreur avec l'ancien.
si tu est intéressé je te l'envoi.
merci encore une foi
Commenter la réponse de ezzineahmed
Messages postés
6
Date d'inscription
mercredi 12 mai 2010
Dernière intervention
4 juin 2011
0
Merci
salut,
svp esq vous pouvez me donner le nouveau code de transsmition des fichier ?
pasq j ai vraiment besoin et ce lui qui est ici ne marche pas sur mon pc
merci d avance
Commenter la réponse de mimaselma

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.