Bonjour,
Je suis à la recherche de l'algorithme permettant le transfert d'un fichier d'un PC à un autre via l'utilisation de sockets.
J'ai essayé beaucoup de choses. Aucun problèmes pour la création et l'utilisations des cokets.
Ce qui me bloque c'est plutôt comment envoyer un fichier et comment le réceptionner...
Pour le moment j'essaye de faire en sorte que le client envoie au serveur un fichier de son choix.
Côté client :
- Je propose à l'utilisateur le choix d'un fichier quelquonque (pas uniquement texte !)
- Je transforme ce fichier en tableau de Bytes
- J'envoi ce tableau par socket, celle-ci étant connectée à la socket du serveur :
[code]
public static void sendFile(String pathname) throws Exception
{
File f = new File(pathname);
if(f.exists())
{
System.out.println("Envoi du fichier "+f.toURI().toURL());
Socket s = new Socket(InetAddress.getByName(serveur),port);
PrintStream sortie=new PrintStream(s.getOutputStream());
sortie.write(fileToByte(f),0,fileToByte(f).length);
s.close();
}
else
{
System.out.println("Le fichier "+f+" est introuvable");
}
}
[/code]
La méthode FileToByte a été trouvée sur Internet :
[code]
static public byte[] fileToByte(File file) throws IOException {
InputStream in = new BufferedInputStream(new FileInputStream(file));
ByteArrayOutputStream result = new ByteArrayOutputStream();
BufferedOutputStream tmp = new BufferedOutputStream(result);
for (int b=in.read(); b != -1; b=in.read()) {
tmp.write(b);
}
in.close();
tmp.close();
return result.toByteArray();
}
[/code]
Côté Serveur :
- Création de la socket, le serveur attend la connexion des clients
- Si un client veut envoyer un fichier, on récupère... rien d'intéressant. C'est là que je bloque !
[code]
while(continuer)
{
//On attend la connexion d'un client
Socket serviceSocket = serveur.accept();
//Création de l'entrée
InputStream inpute = serviceSocket.getInputStream();
int b = inpute.read();
//On récupère le flux de sortie et d'entrée du client
System.out.println("Reçu : "+b);
... (la suite importe peu)
[/code]
Connaissez-vous le moyen de récupérer le tableau de Bytes transitant par le réseau, puis de l'enregistrer dans un fichier ?
Merci :)

Merci pour le code, je viens de l'utiliser.
Je pense qu'il y avait un petit problème dans le code client.
Pour le dernier paquet tu remplit quand même le tampon avec 4096:
//On envoie le dernier paquet, qui ne fait pas forcément 4096 octets
//On remplit le tampon
for(int x=0;x<4096;x++)
tampon.write(aecrire[x]);
Alors que aecrire ne comptient pas 4096 byte pertinent. Il en contient le nombre "compteur" de la boucle while du dessus. Je propose donc:
//On envoie le dernier paquet, qui ne fait pas forcément 4096 octets
//On remplit le tampon
for(int x=0;x<compteur;x++)
tampon.write(aecrire[x]);
Le reste marche bien pour moi, merci.
OuiOui
cote client: tes variables d'entrees.sont- elles standard?
coté serveur: lorsque je declarer le serveur (coe ci dessous) j'obtiens une erreure lors de la compilation.
ServerSocket serveur = new ServerSocket (1200); // erreure ici
Socket serviceSocket = serveur.accept();
Regarde ici pour bien commencer, si ça ne résout pas ton problème créé une nouvelle discussion.