transfert de fichier client-serveur
bonjour à tous,
voila je suis pas un pro de java
mais la je galere je me suis documenté sur le probleme et rien à faire, j'ai toujours un probleme.
voila j'essai de faire un programme permettant le transfert de fichier du serveur vers le client et faire transiter le fichier par socket.
le truc c'est qu'avec les fichier d'extension .txt j'ai aucun probleme, mon seul probleme c'est quand je fait le transfert d'un autre type d'extension ca foire grave je reçois le fichier mais le nombre d'octet n'est pas le meme que la source. donc pour l'ouverture des fichiers (on va pas en faire un dession ca marche pas).
voici mon code si quelqu'un a une idée qu'il me fait sign svp c'est pour mon projet scolaire:
voici ma classe principale:
Code:
1 2 3 4 5 6 7
| public class main
{
public static void main(String[] args)
{
new server();new Client();new selectionfichier();
}
} |
*************************
*************************
*************************
*************************
ma classe server:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
import java.net.*;
import java.awt.Dimension;
import java.io.*;
import java.util.*;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
public class server extends Thread
{
public server()
{
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);
ServerSocket socketEcoute = new ServerSocket(8008);
Socket socketClient = socketEcoute.accept();
DataInputStream in = new DataInputStream(socketClient.getInputStream());
DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
// Creation d'un tampon de stockage
byte[] buffer_receive = new byte[4096];
for (int i = 0; i <10*4096; i++)
{
out.write(buffer_receive);
out.flush();
in.read();
}
out.write("END".getBytes());
out.flush();
System.out.println("Transfert " + (new Date().getTime() - t.getTime()));
}
private void envoiFichier() throws UnknownHostException, IOException
{
Date t = new Date();
// Socket socketClient = new Socket("127.0.0.1", 8008);
ServerSocket socketEcoute = new ServerSocket(8008);
Socket socketClient = socketEcoute.accept();
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 ("D:\\zelda.txt","r");
/*JFileChooser fic1=new JFileChooser(new File("."));
fic1.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
int retrunval=fic1.showDialog(new JFrame(), "selection");
if(retrunval==JFileChooser.APPROVE_OPTION)
{
File Selectchemin=fic1.getSelectedFile();
}*/
tailleF = (int) fic.length();
// quelques initialisations
byte[] buffer_send = new byte[4096]; // buffer de lecture dans le fichier
long fichierfini = -1; // == 0 lorsque le fichier aura été entièrement envoyé
while (fichierfini !=0)
{
//Lecture du fichier d'entrée dans le buffer
long octets_lus = 0; // nombre d'octets lus
octets_lus = fic.length();
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");
}
} |
***********************
***********************
***********************
***********************
voici mon code client:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| package ServeurPackage;
import java.net.*;
import java.io.*;
public class Client extends Thread
{
public Client()
{
this.start();
}
public void run()
{
try
{
/*ServerSocket socketEcoute = new ServerSocket(8008);
Socket socketClient = socketEcoute.accept();*/
Socket socketClient = new Socket("127.0.0.1", 8008);
DataInputStream in = new DataInputStream(socketClient.getInputStream());
DataOutputStream out = new DataOutputStream(socketClient.getOutputStream());
RandomAccessFile fluxSortie = new RandomAccessFile("D:\\clermont\\zelda.txt","rw");
String message = "";
while (!message.equals("END"))
{
// Creation d'un tampon de stockage
byte[] buffer_receive = new byte[4096];
// 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) {}
}
} |
j'aurais voulu utiliser JFileChooser pour selectionner mon fichier mais la cerveau plante donc si vous pouvez m'aider aussi de ce coté au lieu d'utiliser RandomAccessFile