L'objectif du projet est désormais de mettre en œuvre un serveur conforme au protocole applicatif File Transfer Protocol (FTP). Ce serveur doit donc utiliser l'API Socket TCP pour échanger avec un client FTP (e.g., Filezilla) pour stocker et envoyer des fichiers en respectant le standard FTP.
## 2-Exécution:
Dans le fichier racine on exécute la commande :
->>> mvn package
//pour compliler le projet
puis la commande :
->>> mvn javadoc:javadoc
//pour générer la documentation:
puis la commande :
->>> java -jar target/serveurFTP-1.0-SNAPSHOT.jar
pour exécuter le projet
ensuite il faut connecter le client avec filezilla par exemple :
this.ftp.getBufferedWriter().write("550 rights error.\r\n");
this.ftp.getBufferedWriter().flush();
}
}
}
else {
this.ftp.getBufferedWriter().write("550 rights error.\r\n");
this.ftp.getBufferedWriter().flush();
}
}
}
catch(IOException e){
throw new IOException("Connexion failed");
}
}
**
a) interface request(request/request.java):
l'interface request a été implementer par toutes les commande dans le dossier request, graçe à la méthode send chaque class de commande envoie la réponse du server à la commande qu'il a reçu.
dans pass on gére le mot de passe de l'utilisateur.
si le mot de pass est égale a "anonymous" alors le code renvoyé est "230" pour dire que la connection est établie puis on appele la méthode connect qui transforme notre boolean de connection dans la class ftp vers True.
dans le cas contraire un code d'erreur "530" est retourné pour dire que le mot de passe n'est pas conforme.
en cas d'autre erreurs un exception est levé.
b) request/CDUP.java
**
public void send() throws IOException{
if (this.ftp.getSocket() == null ) {
throw new IOException("Ftp server error");
}
try {
String newPath=this.ftp.getDirectory();
String[] pa=newPath.split("/");
newPath="";
if(pa.length>2) {
for(int i=1;i<pa.length-1;i++) {
newPath+="/"+pa[i];
}
}
else {
newPath="/";
}
this.ftp.SetDirectory(newPath);
this.ftp.getBufferedWriter().write("250 success to exit.\r\n");
this.ftp.getBufferedWriter().flush();
}
catch(IOException e){
throw new IOException("Connexion failed");
}
}
**
la méthode send de la class CDUP:
la Commande CDUP permet d'accedé au fichier parents du dossier en cours dans notre code.
on a commencé par récuperer le path du dossier en cours puis le coupé celon les "/" pour ensuite vérifier si il contient plus de d'un sous répertoir si c'est le cas on assemble tous les sous répertoir sauf le dernier dans un string avec un "/" en chaque nom de répertoir afin d'avoir le path du parents.
dans le cas contraire le parents est donc la racine "/".
finalement on affecte ce path et éxrit que la commande CDUP a été éxécuté avec succes.
c) request/RNFR.java
la commande RNFR permet de sauvgarder la valeur de fichier ou dossier que on va renomer avec la commande RNTO
**
public void send() throws IOException{
if (this.ftp.getSocket() == null ) {
throw new IOException("Ftp server error");
}
try {
File file= new File(this.ftp.getDirectory()+"/"+this.name);
this.ftp.getBufferedWriter().write("553 not found.\r\n");
this.ftp.getBufferedWriter().flush();
}
}
catch(IOException e){
throw new IOException("Connexion failed");
}
}
**
dans la méthode send de la class RNFR on crée un file avec le chemin du dossier ou file a rénomer puis on vérifier si ce file existe.
si il existe alors le chemin est sauvgarder dans une variable static de la class ftp graçe au setter SetRename et le code "250" est renvoyé pour dire que le file a été trouvé.
dans le cas contraire le code "553" est renvoyé pour dire que le file est introuvable.
et en cas d'erreur une excéption et levé.
d) request/RNTO.java
la commande permet de renomer un dossier ou fichier avec un chemin connu par un nouveau nom passé en paramètre de la commande
**
public void send() throws IOException{
if (this.ftp.getSocket() == null ) {
throw new IOException("Ftp server error");
}
try {
File file= new File(this.ftp.getRename());
File file2= new File(this.ftp.getDirectory()+"/"+this.name);
if(file.renameTo(file2)){
this.ftp.getBufferedWriter().write("250 file '"+this.ftp.getRename()+"' renamed to '"+this.ftp.getDirectory()+"/"+this.name+"'.\r\n");
this.ftp.getBufferedWriter().flush();
}
else {
this.ftp.getBufferedWriter().write("553 not found.\r\n");
this.ftp.getBufferedWriter().flush();
}
}
catch(IOException e){
throw new IOException("Connexion failed");
}
}
**
dans méthode send de la class RNTO on crée deux fichier l'un avec le paramètre passé dans la commande est l'autre avec la variable sauvgardé par la commande RNTO.
ensuite on applique la méthode renameTo sur le file de la variable sauvgardé avec comme paramètre le 2 file ce qui permettera le renommage du dossier ou fichier avec le chemin sauvgardé par le nouveau nom passé en paramètre.
en cas de succès le code "250" est écrit pour annoncé le succès de l'opération.
dans le cas contraire le code "553" est écrit pour dire que le file n'a pas été trouvé.