Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'envoi d'une ArrayList Client/Serveur

Sujet résolu
    19 janvier 2011 à 23:54:55

    Je suis face à un problème assez embêtant :

    Je débute en java et j'essaye d'implémenter une application client/serveur. Tout marchait bien au début jusqu'à que le serveur se mette à recevoir les mêmes données en boucle alors que le client envoi des valeurs différentes.

    Voila un bout de code du client et du serveur :

    Serveur :
    private ArrayList<Integer> arrayNet = new ArrayList<Integer>();
    private ObjectInputStream objIn;
    
    public void run() {
    	try {
    	        while(true)
    		{
    			arrayNet = (ArrayList<Integer>)objIn.readObject(); // Reception
    			System.out.println(arrayNet);                      // Affichage console
    			Thread.sleep(500);
    		}
    	}
    	catch(SocketTimeoutException se){System.out.println("Timeout");}
    	catch(Exception oe){oe.printStackTrace();}
    }
    


    Client :
    private ObjectOutputStream objOut;
    
    public void run() {
    	while(true) {
    		try {
    			array.set(2, Player.getX());      // Modification de l'array
    			array.set(3, Player.getY());
    			array.set(4, Player.getClipX());
    			array.set(5, Player.getClipY());
    			System.out.println(array);        // Affichage de l'array dans la console
    			objOut.writeObject(array);        // Envoi
    			objOut.flush();
    			Thread.sleep(500);
    		}
    		catch(Exception oe){oe.printStackTrace();}
    	}
    }
    


    Et voila ce que j'obtiens en console :

    Serveur :
    [1, 1, 300, 245, 0, 0]
    [1, 1, 300, 245, 0, 0]
    [1, 1, 300, 245, 0, 0]
    [1, 1, 300, 245, 0, 0]
    [1, 1, 300, 245, 0, 0]
    [1, 1, 300, 245, 0, 0]


    Client :
    [1, 1, 300, 245, 0, 0]
    [1, 1, 300, 272, 64, 0]
    [1, 1, 339, 275, 0, 96]
    [1, 1, 389, 275, 96, 96]
    [1, 1, 439, 275, 32, 96]
    [1, 1, 489, 275, 0, 96]


    En espérant que vous pourrez m'aider.
    Merci d'avance!

    Qwazerty
    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2011 à 4:50:30

      Salut,

      Si tu envoies plusieurs fois le même objet (ton ArrayList, que tu pourrais d'ailleurs probablement passer en tant que List tout court), pense à faire un reset() sur ton ObjectOutputStream après avoir appelé writeObject.

      De manière générale, il faut appeler le reset() dès que tu as écrit tout ton message.
      Sans ce reset, le sérializer va considérer qu'il a déjà sérialisé ton objet et il ne va pas prendre la peine de le sérialiser à nouveau, alors qu'il devrait.
      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2011 à 8:05:05

        C'est référencé chez sun ce problème:

        http://bugs.sun.com/bugdatabase/view_b [...] ug_id=4087459

        (histoire d'appuyer les propos de Coyote)
        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2011 à 8:29:39

          Comme c'est marqué en bas de page, je suis pas certain que cela soit un vrai bug/problème : c'est un moyen de permettre les références circulaires (un objet qui fait référence à un objet, qui lui même fait référence au précédent objet). Mais bref, on s'éloigne du sujet :)
          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2011 à 15:56:31

            Oui effectivement au début je voulait stocker d'autres variables que des int mais au finale une List marche très bien.

            Sinon avec le reset() ca marche parfaitement merci beaucoup pour l'aide je peut enfin continuer :p

            Qwazerty!
            • Partager sur Facebook
            • Partager sur Twitter

            Problème d'envoi d'une ArrayList Client/Serveur

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown