Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1383 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Debutant] Pb avec ObjectOutputStream et les socket

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Debutant] Pb avec ObjectOutputStream et les socket

n°656547
etheriel
Posté le 26-02-2004 à 17:00:54  profilanswer
 

J'arrive pas à comprendre où est le souci avec ce client et ce serveur qui communique par socket:
 
Client:

Code :
  1. import java.util.HashMap;
  2. import java.net.ServerSocket;
  3. import java.net.Socket;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.ObjectInputStream;
  8. import xxx.Encours;
  9. public final class Client_tcp {
  10.     public Client_tcp() {
  11.      
  12.         Encours e1   = new Encours("E1" );
  13.         Encours e2   = new Encours("E2" );
  14.         Encours e100 = new Encours("E100" );
  15.      
  16.         try {
  17.             Socket s = new Socket("localhost",5432);
  18.             OutputStream os = s.getOutputStream();
  19.             InputStream  is = s.getInputStream();
  20.             ObjectOutputStream oos = new ObjectOutputStream(os);
  21.             ObjectInputStream ois = new ObjectInputStream(is);
  22.             e1.setCurrent(new Integer(1));
  23.             System.out.println("envoi de "+e1.getName()+" avec current="+e1.getCurrent());
  24.             oos.writeObject(e1);
  25.            
  26.             e2.setCurrent(new Integer(2));
  27.             System.out.println("envoi de "+e2.getName()+" avec current="+e2.getCurrent());
  28.             oos.writeObject(e2);
  29.             e1.setCurrent(new Integer(3));
  30.             System.out.println("envoi de "+e1.getName()+" avec current="+e1.getCurrent());
  31.             oos.writeObject(e1);
  32.            
  33.             e100.setCurrent(new Integer(100));
  34.             System.out.println("envoi de "+e100.getName()+" avec current="+e100.getCurrent());
  35.             oos.writeObject(e100);
  36.            
  37.             s.close();
  38.         } catch(Exception e) {
  39.             // Traitement d'erreur
  40.             e.printStackTrace();
  41.         }
  42.     }
  43.    
  44.     public static void main(String a[]) throws Exception {
  45.         new Client_tcp();
  46.     }
  47. }


 
Serveur:

Code :
  1. import java.net.ServerSocket;
  2. import java.net.Socket;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.ObjectInputStream;
  8. import java.rmi.RemoteException;
  9. import java.util.HashMap;
  10. import xxx.Encours;
  11. public final class Serveur_tcp {
  12.    
  13.     public Serveur_tcp() {
  14.         Encours msg;
  15.        
  16.         try {
  17.             ServerSocket ecoute = new ServerSocket(5432,5);
  18.             Socket service = (Socket)null;
  19.             while(true) {
  20.                 service = ecoute.accept();
  21.                 OutputStream os = service.getOutputStream();
  22.                 InputStream  is = service.getInputStream();
  23.                 ObjectOutputStream oos = new ObjectOutputStream(os);
  24.                 ObjectInputStream ois = new ObjectInputStream(is);
  25.                 do
  26.                 {
  27.                     msg = (Encours) ois.readObject();
  28.                     System.out.println("==>"+msg.getCurrent());
  29.                     } while(msg.getCurrent() < 10);
  30.                 System.out.println("fin de session" );
  31.             }
  32.             //service.close();
  33.         } catch (Exception e) {
  34.             // traitement d'erreur
  35.             e.printStackTrace();
  36.         }
  37.     }
  38.    
  39.     public static void main(String a[]) throws Exception {
  40.         new Serveur_tcp();
  41.     }
  42.  
  43. }


 
 
Voici ce qu'envoie le client (resultat "normal" ):

Code :
  1. envoi de EV4 avec current=1
  2. envoi de EV5 avec current=2
  3. envoi de EV4 avec current=3
  4. envoi de E100 avec current=100


 
Voici ce que recoit le serveur:

Code :
  1. ==>1
  2. ==>2
  3. ==>1
  4. ==>100
  5. fin du serveur


 
Pourquoi le serveur ne recoit-il pas la version "maj" de mon objet e1, avec la valeur "3", telle qu'elle a ete affectée dans le client ???


Message édité par etheriel le 26-02-2004 à 17:01:45
mood
Publicité
Posté le 26-02-2004 à 17:00:54  profilanswer
 

n°656556
burnedsoul
Posté le 26-02-2004 à 17:13:33  profilanswer
 

etheriel a écrit :


 
            e1.setCurrent(new Integer(1));
            System.out.println("envoi de "+e1.getName()+" avec current="+e1.getCurrent());
            oos.writeObject(e1);
             
            e2.setCurrent(new Integer(2));
            System.out.println("envoi de "+e2.getName()+" avec current="+e2.getCurrent());
            oos.writeObject(e2);
 
            e1.setCurrent(new Integer(3));
            System.out.println("envoi de "+e1.getName()+" avec current="+e1.getCurrent());
            oos.writeObject(e1);
           


Ca ne serait pas plutôt "e3.setCurrent(new Integer(3));" ?
 

n°656562
etheriel
Posté le 26-02-2004 à 17:26:50  profilanswer
 

non, non , justement: e1.setCurrent(....)
je m'attends à ce que l'objet e1, que j'ai deja transmis une fois, soit transmis à nouveau avec cette nouvelle valeur. Or c'est l'ancienne qui est recupérée !

n°656563
burnedsoul
Posté le 26-02-2004 à 17:30:37  profilanswer
 

Oups pardon j'avais mal lu ton code désolé :(

n°657250
etheriel
Posté le 27-02-2004 à 10:04:38  profilanswer
 

up !
 
Personne n'a une idée ?


Message édité par etheriel le 27-02-2004 à 10:04:48
n°685438
jawad
Posté le 26-03-2004 à 23:54:55  profilanswer
 

moi je dirrais que le probleme se situe au niveau de xxx.Encours

n°685500
EpoK
Let's burn
Posté le 27-03-2004 à 10:25:27  profilanswer
 

code de setCurrent ?

n°685601
HannibAlBu​ndie
Posté le 27-03-2004 à 14:47:56  profilanswer
 

moi, d'un point de vue personnel, j'aimerais bien voir ta classe Encours stp :)  :jap:

n°685933
Ernestor
modo-coco :o
Posté le 28-03-2004 à 15:04:59  profilanswer
 

Je replace ici un post que j'avais fait dans le topic de HannibalAlBundie, ca convient aussi je pense ;)
 
J'ai eu des problèmes aussi avec les streams via des sockets. Par contre je me rappele plus dequels exactement mais je viens de jeter un oeil à mon code.
 
Et en gros, y a deux problèmes, deux bugs référencés :
 
- http://developer.java.sun.com/deve [...] 26188.html
- http://developer.java.sun.com/deve [...] 65324.html
 
Le premier précise qu'il faut récupérer le OutputStream avant le InputStream sur la socket. C'est ce que tu fais.
 
Le second, je sais plus exactement ce que c'est mais à cause de lui, dans mon code j'ai un  

Code :
  1. outputStream.reset();


placé systématiquement AVANT de faire un readObject() sur l'outputStream.
 
Je pense que dans le cas précis, le reset permettrait de résoudre le problème :)


---------------
Idéaliste pragmatique gauchiste cherche camarades pour fonder un parti

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Debutant] Pb avec ObjectOutputStream et les socket

 

Sujets relatifs
Que signifie "invalid_socket" ?[java]help graph débutant
[JAVA] [debutant] To thread or not to thread?débutant cherche outils pas cher pour programmer sous palm OS
envoyer un fichier autre que les .txt avec les socket[java3d] Questions de debutant
[JAVA] [Débutant] Mettre en couleur les onglets d'un JTabbedPane ?[jbuilder] ajouter package (débutant)
[C++] Debutant en Cgi sur sc12[PB][Débutant] Sélection dans un Combobox
Plus de sujets relatifs à : [Debutant] Pb avec ObjectOutputStream et les socket


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR