IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

[Socket] Mauvaise récupération auprès du client


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut [Socket] Mauvaise récupération auprès du client
    Bonjour,

    Je suis confronté à un petit problème assez ennuyant. Je suis en train de développer une application de stock exchange qui doit envoyer des informations concernant les stocks,... au client. Les envois se passent bien sauf pour les valeurs numériques.

    J'envoie des objets Stock (avec le nom, ancien prix, nouveau prix, quantité,...). Le client doit mettre à jour sa GUI avec ces différentes valeurs. Le problème ce quand j'envoie des update de prix, le client reçoit toujours la valeur du moment de sa connexion et non celle à l'instant de l'update.

    Quand je lui envoie, je vérifie le contenu de l'objet, c'est bon, pas de problème du côté serveur. Mais du côté du client, seul le nom du stock est juste à l'arrivée (les valeurs numériques sont les anciennes).

    Quand je lui envoie pour la première fois, les valeurs numériques sont exactes. Mais quand je lui envoie pour la 2eme, 3eme,... fois (mise-à-jour des prix ou de la quantité), ça foire.

    Ca fait un petit temps que l'on cherche sans trouver de solution, on ne voit pas d'où pourrait venir le problème. Auriez-vous une idée sur l'origine?

    Merci par avance.

    PS: quand on teste, c'est directement à l'envoi/réception, on ne fait aucune autre opération entre temps.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  2. #2
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Personne?

    Je vais illustrer mon problème avec du code, vous comprendrez p-e mieux:

    Quand je dois envoyer une màj de prix, je fais comme ceci:

    Côté serveur (stock exchange):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ObjNetwork objToSend = new ObjNetwork("UPDATESTOCK", (Object) tmpStock); //ObjNetwork est une classe composée de cmd et obj1
    System.out.println("UPDATE "+tmpStock.getName()+" "+tmpStock.getNewPrice());
    OOS.writeObject(objToSend);// OOS = ObjectOutputStrean
    //Je vais récupérer aussi de mon côté pour vérifier
    Stock tmp = (Stock) objToSend.getObj1();
    System.out.println("UPDATE "+tmp.getName()+" "+tmp.getNewPrice());
    Côté client:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ObjNetwork ObjToReceive;
    ObjToReceive = (ObjNetwork)ois.readObject(); //ois = ObjectInputStream
    if(ObjToReceive.getCmd().equals("UPDATESTOCK")){
       Stock updatedStock = (Stock)ObjToReceive.getObj1();
       System.out.println("UPDATE "+updatedStock.getName()+" "+updatedStock.getNewPrice());
    }
    Juste pour préciser, les classes sont identiques de chaque côté et sont sérialisées.

    Le résultat obtenu, du côté serveur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE Nvidia 184 //affichage de l'objet tmpStock
    UPDATE Nvidia 184 //affichage de l'objet tmp
    Et du côté client:
    Donc, il arrive bien à récupérer le nom,... mais pas les valeurs numériques. Il affiche toujours la valeur qu'il a recu pour la première fois. Y aurait-il une mémoire quelque part qui retient et remplace automatiquement,...? Va-t-il rechercher l'ancien,...? Ca fait quelques jours qu'on teste différentes solutions, c'est vraiment bizarre, ça marche pour n'importe quel objet sauf les mises-à-jour.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  3. #3
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Je résous mon problème:

    L'origine était le stock exchange. Je remplace cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OOS.writeObject(objToSend);// OOS = ObjectOutputStrean
    Par celles-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    OOS.reset();
    OOS.writeObject(objToSend);
    OOS.flush();
    OS.flush(); //OS = OutputStream
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SAX] Mauvaise récupération du contenu des balises
    Par DC dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 19/02/2007, 11h08
  2. Réponses: 1
    Dernier message: 17/12/2006, 22h46
  3. [VB6] Mauvaise récupération de données
    Par valie dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 10/10/2006, 09h58
  4. [Socket] Comment faire du multi-client ?
    Par eric30eric dans le forum Web & réseau
    Réponses: 5
    Dernier message: 05/01/2005, 21h39
  5. Réponses: 9
    Dernier message: 17/08/2004, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo