for (;;) {
BufferedReader in = new BufferedReader(
new InputStreamReader(_sock.getInputStream ()));
// lire la requ`ete.
requete = in.readLine();
if (requete.equals ("fin")) {
System.out.println ("Arr^et du serveur par un client");
System.exit (0);
}
// ouvrir le fichier correspondant.
// On utilise un DataInputStream car on ne connait pas la nature du fichier
DataInputStream din = new DataInputStream (new FileInputStream (requete));
System.out.println ("Ouverture du fichier : "+ requete);
// recopier le fichier (on s’en sortira par l’exception de fin de fichier).
DataOutputStream dout = new DataOutputStream (_sock.getOutputStream ());
for (;;)
dout.writeByte (din.readByte ());
}
} catch (FileNotFoundException e) {
System.out.println ("Error: " + e.getMessage ());
} catch (EOFException e) {
System.out.println ("Fichier : "+ requete + " Envoy´e");
} catch (IOException e) {
System.out.println ("run: " + e);
}
try {
_sock.close ();
} catch (IOException e) {}
}
}
3. Le Client
Pour tester notre serveur de fichiers, on va ´ecrire un autre programme qui va demander au serveur
de lui envoyer un fichier. Ce programme prend en argument (dans la ligne de commande)
•le nom de la machine correspondant au serveur
•le num´ero de port sur lequel se connecter
•la requˆete (i.e. le nom du fichier `a transf´erer ou bien ”fin”
Il est impl´ement´e avec la classe Client qui utilisera un objet de type Socket pour se connecter
au serveur. Le fichier r´ecup´er´e est enregistr´e localement sous le mˆeme nom que celui utilis´e dans
la requˆete.
Correction :
/*
* Fichier Client.java
*/
import java.io.*;
import java.net.*;
public class Client{
// Constantes
private static final int PORT_PAR_DEFAUT = 3456;
// Attributs
private Socket _sock;
// Constructeur
public Client (String machine, int port, String requete){
DataOutputStream dout=null;
3