L’objectif de cette application est de partager des photographies (images au sens large) et de pouvoir
les rechercher. Comme le nombre potentiel d’utilisateurs et le nombre de photographies peut ˆetre gigantesque on d´ecide d’utiliser les principe du Cloud Computing (http://fr.wikipedia.org/wiki/Cloud_
computing).
L’application comporte deux programmes :
– un programme client utilise par les utilisateurs du systeme ;
– un programme serveur deploye sur plusieurs machines. Les programmes serveurs collaborent pour stocker les fichiers images et effectuer les recherches.
Application cliente :
Un utilisateur client du systeme n’a pas de connaissance directe de la structure du nuage de machines
servant a stocker les photographies (transparence a la localisation). Il dialogue avec un ou plusieurs serveurs
de son entourage proche mais pas directement avec les autres serveurs du nuage.
Chaque utilisateur poss`ede un login et mot de passe, il peut deposer des fichiers de photographies et leur
associer une liste de mots cl´es afin de les retrouver (annotations). Il peut choisir de permettre la visualisation de
ses photographies a tous (publiques) ou seulement a une liste d’utilisateurs. De meme, l’utilisateur proprietaire
d’une photographie peut autoriser l’annotation pour tous, ou bien seulement une pour une liste d’utilisateurs.
Tout utilisateur du systeme (authentifie ou non) peut rechercher des photographies en specifiant une liste
de mots cles. Les photographies poss´edant ces mots cle seront affichees. En cliquant sur une photographie on
doit pouvoir visualiser ses mots cl´es. En cliquant sur un mot cle, on doit pouvoir visualiser les photographies
ayant ce mot cle (soit ajoute a la liste de ceux presents dans le critere de recherche, soit present seul).
Il doit egalement etre possible de visualiser les mots cles sous forme de graphes. Les mots cl´es les plus utilis´es doivent apparaıtre plus gros et les n mots cles lies les plus frequemment avec ceux presentes apparaissent
aussi avec une taille proportionnelle a leur nombre d’occurrences
Application Serveur :
On peut lancer plusieurs serveurs sur differentes machines. Lorsque les clients envoient une image a un
serveur, celui-ci utilise le nom du fichier afin de generer une cl´e utilis´ee ensuite comme identifiant de l’image.
Un serveur de stockage est determine, au moyen du calcul d’une fonction de hachage appliqu´ee sur le nom,
l’image lui est ´eventuellement transmise. Chaque serveur possede un repertoire de stockage des images utilisant uns structure arborescente (sous repertoires bases sur la premiere lettre de l’identifiant). En effet, les
repertoires ont une capacite limitee en fichiers il convient donc d’utiliser des sous repertoires pour repartir
l’ensemble des fichiers. Le stockage des mots cles, des autorisations sur les images et leur localisation en fonction du nom sont realises en utilisant plusieurs DHT (Distributed Hash Table).

Bonjour, j'aimerez de l'aide pour faire ce programme. Je ne voit pas comment faire.

Voila ce que j'ai essayer de faire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
public class Utilisateur {
private String motdepasse;
private String identifiant;
public Utilisateur(String mdp,String id){
 motdepasse=mdp;
 identifiant=id;
 }
public String getmdp(){return motdepasse;}
public String getid(){return identifiant;}
 
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import java.io.*;
import java.net.*;
import java.util.Hashtable;
 
 
public class ServeurTCP {
Hashtable album=new Hashtable();
String [] motclef=new String[50];int nbmotc;String lien=null;
void ajouterphoto(photo ph, int motclef) {
 album.put(motclef,ph);
}
 
photo recherche(String mot){
 photo p=new photo("");int i;
    if(album.get(mot)!=null)
      p=(photo)album.get(mot);
    return p;
 }
 
    public static void main(String[] args) {
        ServerSocket server = null;
        Socket client;
        try {
            server = new ServerSocket(1020);
            // 1020 is an unused port number
        } catch (IOException ie) {
            System.out.println("Cannot open socket.");
            System.exit(1);
        }
        while (true) {
            try {
                client = server.accept();
                OutputStream clientOut = client.getOutputStream();
                PrintWriter pw = new PrintWriter(clientOut, true);
                InputStream clientIn = client.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        clientIn));
                pw.println("Reponse du serveur > " + br.readLine());
            } catch (IOException ie) {
            }
        }
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import java.net.*;
import java.io.*;
 
import java.io.*;
import java.net.*;
 
public class ClientTCP{
    public static void main(String args[]) {
        try {
            //Socket client = new Socket("127.0.0.1",1234);
            // Création de la socket pour le serveur IP:port ici
            // IP est en local
            Socket client = new Socket(InetAddress.getLocalHost(),1020);
            // canal d'entrée socket Serveur --> Client
            InputStream clientIn = client.getInputStream();
            // Canal de sortie socket client --> serveur
            OutputStream clientOut = client.getOutputStream();
            // Un meilleur writer pw et reader br
            PrintWriter pw = new PrintWriter(clientOut, true);
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    clientIn));
            // stdIn lecture du clavier
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(
                    System.in));
            System.out.println("Ecrire l'adresse d'une image: ");
            // Lire une ligne depuis le clavier puis transmissiob vers le
            // serveur
            // au moyen du stream de sortie pw
            pw.println(stdIn.readLine());
            System.out.println("Serveur message: ");
            // Affichage de la réponse reçut au moyen du stream d'entré br
            System.out.println(br.readLine());
            pw.close();
            br.close();
            client.close();
        } catch (ConnectException ce) {
            System.out
                    .println("Connexion au serveur impossible.");
        } catch (IOException ie) {
            System.out.println("I/O Error.");
        }
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
public class photo {
private int maxcom;
private String []commentaire;
private int nbcom;
private String photo;
 public photo(String p){
  commentaire=new String[10];
  maxcom=10;
  photo=p;
 }
 
 public String getphoto(){
  return photo;
 }
 
 public void ajoutercommentaire(String s){
 if(nbcom+1<maxcom)
  {commentaire[nbcom]=s;
   nbcom++;
  }
 else
  System.out.println("Trop de Commentaires");
 }
 
 public String[] getcom(){
 return commentaire;
 }
}
merci d'avance