Problème de dessin en client serveur

saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008 - 14 mai 2004 à 14:30
saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008 - 26 déc. 2005 à 14:00
Salut à tous, j'ai une application client serveur en java qui permet à un ensemble de clients de partager un dessin graphique et de dessiner ensemble des formes géométriques (cercles, rectangles, ...). Cette application ne permet pas aux clients qui se connectent en retard (aprés) de voir ce qui est dessiner avant.
La source de cette application est disponible à l'adrese http://www.jibble.org/netdraw.php
SVP, aidez moi à trouver une solution car c'est trés urgent pour moi et ca fait parti de mon examin.
Merci d'avance.
(SVP repondez moi vite)
(j'ai posté ds plusieurs forums mais personne n'a pu me répondre, je compte sur vous)Merci.

13 réponses

kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
15 mai 2004 à 09:55
Salut,

j'ai regardé brièvement le code et c'est normal que les nouveaux clients ne voient pas ce qui s'est passé avant.
Le serveur est juste chargé de la communication entre les clients. Il ne stocke pas les différentes action déjà effectuées.
Pour qu'un nouveau client récupère les dessins il faut lui envoyer la liste des actions correspondant aux dessins.
Le serveur doit stocker cette liste et quand un nouveau client arrive il lui envoie ces actions.
Après se pose le problème de 'jusqu'à quand on remonte dans le temps', c'est à dire quelle est la quantité d'actions que le serveur doit conserver. Il faut prévoir un système pour vider l'historique.
0
hhouneida Messages postés 4 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 15 mai 2004
15 mai 2004 à 12:57
Salut, Merci pour votre réponse, mais est ce que tu peux m'aider un peu à faire ce travail , juste comment commencer car dés que je touche le code je suis bombardé des erreurs. Je ne sais pas d'ou commencer ...
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
15 mai 2004 à 13:22
Je te donne quelques pistes pour commencer et si tu as du mal je te donnerais le code.
Il faut dans la classe NetDrawServer une liste des actions déjà effectuées. Cette liste sera passée aux ClientHandler.
Dans la classe ClientHandler il faut là aussi ajouter cette liste. Quand un client se connecte (la partie correspondant au if (tokens[0].equals("join"))) il faut lui envoyer la liste des actions
Et dans la classe ClientInputThread il faut ajouter dans la liste l'action qu'on vient de recevoir.

Voilà !!! bon courage !!
0
hhouneida Messages postés 4 Date d'inscription mercredi 5 mai 2004 Statut Membre Dernière intervention 15 mai 2004
15 mai 2004 à 13:45
Je te remerci beaucoup, mais j'ai du mal à avancer, SVP donnez moi du code...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
15 mai 2004 à 14:02
public class NetDrawServer {
private List actions;
...
    public NetDrawServer(int port) {
        this.port = port;
        actions = new Vector();
    }
...
public void launch() {
...
        while (running) {
            try {
                Socket socket = serverSocket.accept();
                ClientHandler handler = new ClientHandler(socket, clientList, actions);
                handler.start();
            } catch (IOException e) {
                System.out.println("Somebody jibbled up their connection when connecting.");
            } catch (Exception e) {
                System.out.println("Somebody tried to join the server in a jibbly way.");
            }
        }
...
}


public class ClientHandler extends Thread {

    private List actions;
...
    public ClientHandler(Socket socket, ClientList clientList, List actions) {
        this.socket = socket;
        this.clientList = clientList;
        this.actions = actions;
    }
....
    public void run() {
...
            if (tokens[0].equals("join")) {
                name = tokens[1];
                ClientOutputThread clientOutputThread = new ClientOutputThread(clientList, firstLine);
                clientOutputThread.start();
                //Envoie de la liste des actions effectuées précédemment
                bwriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                Iterator iterator = actions.iterator();
                while (iterator.hasNext()) {
                    writeLine((String) iterator.next());
                }
            } else {
                socket.close();
                return;
            }
...}
...
    public synchronized void addAction(String action) {
        actions.add(action);
    }

}


public class ClientInputThread extends Thread {
...
    public void run() {
...
            clientHandler.addAction(line);
            ClientOutputThread clientOutputThread = new ClientOutputThread(clientList, line);
            clientOutputThread.start();
...
}
}
0
saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008
15 mai 2004 à 14:14
Merci Kirua12, je vais essayé ce code.
0
saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008
17 mai 2004 à 12:54
Salut, Merci Kirua12 votre code marche trés bien. Tu m'as bien aidé.
Mais j'ai encore du problème.
Je veux créer des sessions pour quelques utilisateurs : c.a.d je veux que un certain nombre de clients dessinent ensemble, et si un client qui n'appartient pas à cette session il lui faudra créer une nouvelle session: plusieurs sessions qui s'éxécutent en parallèle.
Premièrement, est ce que cela est faisable avec cette application de client seveur, et si oui comment il faut que je procéde.
je vous remercie beaucoup mon ami.
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
17 mai 2004 à 20:32
si j'ai bien compris tu veux créer des salons de discussions (chatrooms). Oui c'est possible.
Il faut que le serveur gère la liste des salons. Au lieu d'avoir une seule liste de clients, il y a maintenant une liste (salons) de liste (clients). Le mieux se serait une Map avec comme clé l'identifiant du salon.
Il faut aussi modifier le protocole de communication client serveur pour que le client indique dans quel salon il veut aller.
Bref rien de bien compliqué...
0
saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008
18 mai 2004 à 14:12
Est ce que tu peux m'aider à faire cela?
0
kirua12 Messages postés 1155 Date d'inscription samedi 17 janvier 2004 Statut Membre Dernière intervention 29 avril 2011 7
18 mai 2004 à 22:00
oui si tu veux. Sur quoi tu bloques ?
0
saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008
19 mai 2004 à 16:50
Merci, mais je suis bloqué sur tout!
Comment on modifie le protocole de communication client serveur pour qu'il supporte les salons?
Comment implémenter ces salons?
Qu'est ce que tu veux dire par Map?
???????????????????
Si tu peux me donner du code ça sera mieux!!!!!!!!!!!!

Merci!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
(je suis trés faible)
0
saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008
20 mai 2004 à 14:18
Ou est tu Kirua12, est ce que tu m'oublié ou bien t'en a mare ??
SVP, je suis bloqué et je compte vraiment sur toi!!!
j'ai besoin d'un peu d'aide.
0
saispasq Messages postés 29 Date d'inscription jeudi 13 mai 2004 Statut Membre Dernière intervention 8 juin 2008
26 déc. 2005 à 14:00
salut Kirua12, est ce que tu te rappelle encore de l'application de dessin client / serveur?

est ce que tu peu m'aider?

je veu ajouter des vues radar et des télépointeurs (tu les sai) ? comment il faut faire????

Merci???
0
Rejoignez-nous