Timer

Résolu
cs_marilou Messages postés 26 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 30 janvier 2007 - 28 janv. 2007 à 21:22
cs_marilou Messages postés 26 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 30 janvier 2007 - 30 janv. 2007 à 01:58
Salut,
je voudrais répéter un échnage de donnée sur un réseau toutes les secondes. Mon serveur demande des infos à ses clients chaque seconde,  chaque client répond et le serveur redistribue ce qu'il a reçu. Mais mon timer ne tourne qu'une fois.

//mes initialisations...

 public Serveur() {
       
        try{
            ecoute = new ServerSocket(PORT);
            t = new Timer();
        }
        catch(IOException e){
            e.getMessage();
        }
        this.start();
    }
   
    public void run(){       

        try{
            client = ecoute.accept();
        }catch(IOException ioe){
            ioe.getMessage();
        }
        System.out.println("Client "+client.getLocalSocketAddress()+" connecté. ");
        t.schedule(new EchangesDonnées(client),0,1000);
       
    }

La classe EchangesDonnées (comme le dit son nom) reçoit et envoie les données entre le client et le serveur.
Merci de votre aide...

11 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
29 janv. 2007 à 17:14
Salut,

pour l'appli en ligne de commande tu fais java -Xmx128m AppliJava (ou plus par défaut c'est 64m il me semble) pour eclipse tu vas dans la configuration du run de l'application esuite sur l'onglet "Arguments" puis tu mets -Xmx128m dans la zone de texte "VM arguments :"

sinon si tu veux résoudre le prob de mémoire tu peux envoyer le code que l'on regarde de plus pres le pourquoi

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
3
Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007
28 janv. 2007 à 23:15
Une bonne vieille boucle infinie et çà marchera :



public void run(){       
    while(true){
        try{
            client = ecoute.accept();
            System.out.println("Client "+client.getLocalSocketAddress()+" connecté. ");
            t.schedule(new EchangesDonnées(client),0,1000);


        }catch(IOException ioe){
            ioe.getMessage();
        }



    }
}

Par ailleurs, pour terminer le Thread, je conseillerais de le stopper de l'interieur en trouvant une condition de sortie pour le while

(le Thread s'autodétruit dès la fin de l'execution du code contenu dans run())


plutot que d'appeller la méthode stop() sur ce thread.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
28 janv. 2007 à 23:32
Salut,

sinon si tu veux plus de souplesse sur ton timer (restart, stop et start indéfini) tu peux aussi utiliser la classe javax.swing.Timer mais bon apres ça dépends de ce que tu en fais... sinon pour la réponse pas mieux que [auteurdetail.aspx?ID=674615 Ar0z]
et surtout pour arreter ton thread n'utilise pas stop cette méthode est deprecated. autre chose je vois que tu fais ioe.getMessage(); fais plutot System.err.println("Erreur " +
ioe.getMessage()); sinon tu n'est pas pres de voir quelque chose vu que getMessage retourne un string autre solution pour voir l'arbe d'exception serait de faire  ioe.printStackTrace();

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_marilou Messages postés 26 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 30 janvier 2007
28 janv. 2007 à 23:40
merci mais ça ne fonctione pas. Avec cette soultion je devrais avoir plusieurs fois l'affichage de System.out.println("Client "+client.getLocalSocketAddress()+" connecté. ");
mais je ne l'ai qu'une fois. Pareil pour les
System.out.println qui sont dans EchangesDonnées.
0

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

Posez votre question
Ar0z Messages postés 44 Date d'inscription lundi 23 janvier 2006 Statut Membre Dernière intervention 12 août 2007
28 janv. 2007 à 23:55
Vérifie si tu arrives bien à la fin de l'execution du code contenu dans le constructeur de EchangesDonnees.
0
cs_marilou Messages postés 26 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 30 janvier 2007
29 janv. 2007 à 03:35
oui oui je vais jusqu'au bout du constructeur.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
29 janv. 2007 à 10:34
Salut,

c'est pas normal ton prob normalement ton code devrai matcher.... juste une question quand tu dis "mais je ne l'ai qu'une fois" tu fais bien le teste avec plusieurs client qui se connectes au serveur ? je dis ça par ce que la méthode accept est bloquante et ne se relachera pas avant un nouveau client....

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_marilou Messages postés 26 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 30 janvier 2007
29 janv. 2007 à 16:02
effectivement je navais qu'un client, maintenant j'en ai plusieurs mais j'ai l'erreur suivante:
Exception in thread "Thread-0" java.lang.OutOfMemoryError: Java heap space

Apparemment il faut plus de mémoire mais mon programme n'est pas très lourd donc je ne comprends pas...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
29 janv. 2007 à 16:34
Salut,

cela dépend de ce que tu fais dedans (attention au méthodes récursive dedans) sinon execute l'application en augmentant la mémoire

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
cs_marilou Messages postés 26 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 30 janvier 2007
29 janv. 2007 à 16:59
je nai pas de méthode récursive donc j'ai essayé d'augmenter la mémoire apparemment je n'ai pas la bonne méthode, ça marche pas. j'utilise eclipse est-ce-qu'il permet de faire cela ?
0
cs_marilou Messages postés 26 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 30 janvier 2007
30 janv. 2007 à 01:58
merci ça fonctionne maintenant.
0
Rejoignez-nous