Récupérer chemin dossier depuis poste distant via socket.

Description

Bonjour a tous^^.
J'ai réalisé un programme qui permet, un peu à la manière d'un JFileChooser, d'obtenir une fenêtre représentant le dossier d'un ordinateur distant grâce aux sockets. A la différence d'un JFileChooser, cet objet ne retourne pas le fichier, mais retourne simplement le chemin, c'est à vous de gérer le transfert de fichier. Ce programme ce présente sous la forme d'un Jar (FenetreDossierOrdiDistant.jar) dans un zip à télécharger puis a ajouter dans vos projet client et serveur.

Pour utiliser ce programme le jar doit être présent dans vos deux projets, le client et le serveur.
Dans cet exemple le serveur postera ses dossiers et le client affichera la fenêtre et naviguera dans les dossiers du serveur mais je pense que l'inverse marche aussi.
A chaque clique sur un dossier, le client, envoi une requête au serveur qui envoi le dossier suivant. Les deux objets que je vais vous présenter maintenant doivent toujours être l'un et l'autre a l'écoute simultanément.
L'envoi des dossiers ce fait par l'objet EnvoiPath dans lequel on place le socket et le path du premier dossier à afficher ici " E://" dans les paramètres du constructeur.
L'objet EnvoiPath possède le fonction getPath qui retourne la selection faite par le client.
On peut instancier l'objet de cette manière pour choisir l'envoi soit des dossiers soit des fichiers:
EnvoiPath e = new EnvoiPath(s, "E://",EnvoiPath.envoyerDossier);

La récupération et l'affichage des données ce fait au travers de l'objet FenetreDossier(socket);
qui prend simplement le socket en paramètre.
Le client ne sera pas limité dans la navigation des répertoires du serveur il pourra remonter au delà du répertoire d'origine passer en paramètre de l'objet EnvoiPath grâce au bouton parent. Ainsi on peut désactiver ce bouton qui, certes ne facilitera pas la navigation du client, sans pour autant le bloquer, mais rendra inaccessible les dossiers parent.
Pour ce faire l'objet FenetreDossier possède une méthode setDesactiveBoutonParent();
L'objet FenetreDossier hérite de Jframe, donc en plus des fonctions héritées de jframe cet objet comporte les méthodes suivantes :
setDesactiveBoutonParent() qui désactive le bouton parent.
getPath() qui retourne le path sélectionné par le client.
getBoutonAnnul qui retourne bouton " annuler " de la fenêtre.
getBoutonEnvoyer qui retourne bouton " Envoyer " de la fenêtre.

Source / Exemple :


import ServeurEnvoiPath.EnvoiPath;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Serveur {

    public static void main(String[] args) {
        try {
            ServerSocket socketserver = new ServerSocket(1);
            Socket socket = new Socket();
            socket = socketserver.accept();
            EnvoiPath e = new EnvoiPath(socket, "E://");
            System.out.print(e.getPath());
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}

import ClientRecuperePath.FenetreDossier;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {

    private static FenetreDossier f;

    public static void main(String[] args) {
        Socket socket = null;
        try {
            socket = new Socket("localhost", 1);
        } catch (UnknownHostException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        f = new FenetreDossier(socket);
        f.setDesactiveBoutonParent();
        f.getBoutonAnnul().setText(":o");
        f.getBoutonEnvoyer().setText(":)");
        f.getBoutonEnvoyer().addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                System.out.print(f.getPath());
            }
        });

    }
}

Conclusion :


J'y ai passé pas mal de temps, pour faire en sorte qu'il n'y ai pas de bug, mais je ne suis pas sûr a 100% de la fiabilité, a vous de tester. De plus j'ai développé tous ça sur Windows vista donc je ne sais pas trop si c'est compatible avec mac ou linux. J'espère, si vous l'essayé, que vous transmettrez vos réactions.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.