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 :)