voila les codes:
1.la classe du serveur:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class serveur {
public static void main(String[] args) throws IOException {
//création de la socket serveur.
ServerSocket s = new ServerSocket(8189);
System.out.println("serveur demare!!! en attente d'une connection...");
int i = 1;
for (;;) {
//acceptation de la connexion avec le client.
Socket incoming = s.accept();
System.out.println("connection acepter n°" + i);
System.out.println("Spawning " + i);
Thread t = new communication(incoming, i);
Thread t2 = new transmitionsocketserveur();
t2.start();
t.start();
i++;
}
}
}
2.la classe du client:
import javax.swing.*;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
public class client {
public static void main(String[] args) throws IOException {
String host = "localhost";
communication = new Socket(host, 8189);
in = new BufferedReader(new InputStreamReader(communication
.getInputStream()));
out = new PrintWriter(communication.getOutputStream(), true);
int nbelement = Integer.parseInt(in.readLine());
System.out.println(nbelement +"\n\n\n");
int i=0;
while (i != nbelement-2/*je sais pas pourquoi mais ca ne marche que si je fait ca*/) {
String str = in.readLine();
System.out.println(str);
i++;
if(i== nbelement-2)break;//sureter supplementaire
}
String saisie = JOptionPane
.showInputDialog("entree l'id du fichier qui vous interresse");
out.println(saisie);
for (int p = 0; p < 4; p++) {
s = in.readLine();
}
StringTokenizer t = new StringTokenizer(s, "|");
int id = Integer.parseInt(t.nextToken("|"));
String name = t.nextToken("|");
int taille = Integer.parseInt(t.nextToken("|"));
System.out.println("\n\nid = " + id + "\nnom = " + name + "\ntaille = "
+ taille);
name = name.substring(name.lastIndexOf('\\') + 1);
System.out
.println("connection sur le port 8188 pour commencer le transfert");
transmition = new Socket(host, 8188);
transmettre = new PrintWriter(transmition.getOutputStream(), true);
InputStream brut = transmition.getInputStream();
InputStream entree = new BufferedInputStream(brut);
System.out
.println("\nenvoi du nom du fichier");
transmettre.println(name);
int tailleDuContenu = taille;
byte[] donnees = new byte[taille];
int octetsLus = 0;
int deplacement = 0;
int iteration = 1;
while (deplacement < tailleDuContenu) {
System.out.println("recuperation du fichier : " + iteration);
iteration++;
octetsLus = entree.read(donnees, deplacement, donnees.length
- deplacement);
if (octetsLus == -1)
break;
deplacement += octetsLus;
System.out.println(deplacement);
}
FileOutputStream fichiersortant = new FileOutputStream(name);
System.out.println("\nFileOutputStream fichiersortant = new FileOutputStream( " + name + ");");
fichiersortant.write(donnees);
//vidage du tampon
fichiersortant.flush();
//fermeture du flots de donnees
fichiersortant.close();
System.out.println("fin du transfert\nverification de l'existenbce du fichier :");
File verif = new File(name);
if(verif.exists())System.out.println("true");
else
System.out.println("false");
}
public static BufferedReader in;
public static String s;
public static PrintWriter transmettre;
public static PrintWriter out;
public static Socket transmition;
public static Socket communication;
}
3.la classe communication:
import java.io.*;
import java.net.*;
class communication extends Thread implements Runnable{
public communication(Socket connect, int g) throws IOException {
SocketConnection = connect;
g = connecte;
}
public void run() {
try {
//declaration et initialisation des flux
//pour la communication avec le client
//je vais essaye de faire en sorte que la
//communication s'effectue selon une syntaxe
//precise et predefini
in = new BufferedReader(new InputStreamReader(SocketConnection
.getInputStream()));
out = new PrintWriter(SocketConnection.getOutputStream(), true);
//fin de declaration des flux
//tableau de fichier
//ce code devra etre optimise pour arrive a faire des tableau
//dynamiqe
//declaration des fichier
File f = new File("");
String chemin = f.getAbsolutePath();
File f2 = new File(chemin);
System.out.println(chemin);
File[] currentDirectoryFile = f2.listFiles();
out.println(currentDirectoryFile.length);
for (int i = 0; i < currentDirectoryFile.length; i++) {
out.println(i + " : " + currentDirectoryFile[i] + " taille :"
+ currentDirectoryFile[i].length());
}
saisie2 = Integer.parseInt(in.readLine());
System.out.println("saisie du connecte n° " + connecte + ": "
+ saisie2);
File toDownload = currentDirectoryFile[saisie2];
System.out.println("\nfichier choisie : " + toDownload.toString()
+ " taille de celui ci :" + toDownload.length());
//envoie des information relative au fichier pour commencer le
// telechargement
out.println("\n" + saisie2 + "|" + toDownload.toString() + "|"
+ toDownload.length());
} catch (Exception e) {
e.printStackTrace();
}
}
public BufferedReader in;
public PrintWriter out;
public int saisie2;
public Socket SocketConnection;
public int connecte;
}
4.la classes transmission:
import java.io.*;
import java.net.*;
class transmition extends Thread implements Runnable {
public transmition(Socket connect, int g) throws IOException {
SocketTransmition = connect;
g = connecte;
}
public void run() {
try {
System.out.println("\n demarrage du demon de transmition");
in = new BufferedReader(new InputStreamReader(SocketTransmition
.getInputStream()));
out = new PrintWriter(SocketTransmition.getOutputStream(), true);
System.out.println("\n boucle de recuperation du nom du fichier");
int boucle = 1;
//recuperation du nom du fichier
do{
str = in.readLine();
System.out.println(str);
boucle++;
// if(str==null)break;
}while (boucle != 2) ;
System.out.println("\nfin de la boucle");
System.out.println("\nrecuperation de la taille du fichier");
File toTransmit = new File(str);
int taille = (int) toTransmit.length();
System.out.println("\n demarrage du demon de transmition");
FileInputStream DataToSend = new FileInputStream(toTransmit);
byte[] FileToSend = new byte[taille];
int ReadOctet = 0;
int MovedByte = 0;
System.out
.println("\nfin de la creation du tableau et des variable de transfert");
while (MovedByte < taille) {
System.out.println("\n debut du transfert");
System.out.println("\nvaleur de MovedByte : " + MovedByte
+ "\n" + "valeur de ReadOctet : " + ReadOctet);
ReadOctet = DataToSend.read(FileToSend, MovedByte,
FileToSend.length - MovedByte);
if (ReadOctet == -1)
break;
MovedByte += ReadOctet;
System.out.println(MovedByte);
System.out.println("\nfin du bloc");
PrintStream DataSender = new PrintStream(SocketTransmition
.getOutputStream());
DataSender.write(FileToSend);
System.out.println("\nfin du transfert");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public Socket SocketTransmition;
public BufferedReader in;
public PrintWriter out;
public static String str;
public int connecte;
}
5.la classe transmissionsocketserveur:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class transmitionsocketserveur extends Thread {
private ServerSocket transfert;
public void run() {
ServerSocket transmition;
try {
transfert = new ServerSocket(8188);
System.out
.println("serveur de transmition demare!!! en attente d'une connection...");
int o = 1;
for (;;) {
Socket entrante = transfert.accept();
System.out.println("connection de transmition accepter n°" + o);
System.out.println("transmition n " + o);
t = new transmition(entrante, o);
t.setDaemon(true);
t.start();
o++;
}
} catch (IOException e) {
e.printStackTrace();
}
}
public transmition t;
}
donc voila mes codes mais j'arrive pas a la transmission de mon fichier
a travers ces codes,donc si quelq'un peut me aider ça fait un gros
plaisir.