[Java] ObjectInputStream (socket.getInputStream()) bloquant !

ObjectInputStream (socket.getInputStream()) bloquant ! [Java] - Java - Programmation

Marsh Posté le 27-02-2005 à 18:19:25    

Bonjour  
je souhaite faire transité des objetc via le reseau
mais je ne comprends pas pourquoi je n'arrive meme pas ce stade puisque
 

Code :
  1. bufferIN = new ObjectInputStream (new BufferedInputStream(socket.getInputStream()));


 
est bloquant.
La socket est bonne etc.
En décomposant :

Code :
  1. InputStream is = socket.getInputStream();
  2. System.out.println("plop2-2" );
  3. if ( is == null)
  4. System.out.println("is est null" );
  5. else
  6. System.out.println("is n est pas null" );
  7. //affiche"is n est pas null"
  8. bufferIN = new ObjectInputStream (is);
  9. //n'arrive jamais ici
  10. System.out.println("plop2-3" );


 
En fait bufferIN = new ObjectInputStream (is) ne marche pas ..  
Le probleme a l'air récurrent sur les newsgroups mais j'ai vu de solutions  [:atog]  
 
Merci

Reply

Marsh Posté le 27-02-2005 à 18:19:25   

Reply

Marsh Posté le 28-02-2005 à 10:35:45    

Tu dois créer ces flux par paires...
 
Client

Code :
  1. InputStream is = socket.getInputStream();
  2. bufferIN = new ObjectInputStream (is);
  3. OututStream os = socket.getOutputStream();
  4. bufferOUT = new ObjectOutputStream(os);


 
Serveur

Code :
  1. OututStream os = socket.getOutputStream();
  2. bufferOUT = new ObjectOutputStream(os);
  3. InputStream is = socket.getInputStream();
  4. bufferIN = new ObjectInputStream (is);


 
Donc l'ordre de création de tes flux est important... La création de l'InputStream côté client doit correspondre à l'OutputStream côté serveur...

Reply

Marsh Posté le 28-02-2005 à 13:26:36    

merci je connais le principes des stream, mais j'avoue que je ne comprends pourquoi ca bloque sur le ... bufferIN = new ObjectInputStream (is);

Reply

Marsh Posté le 28-02-2005 à 14:13:35    

Montre l'ouverture de tes flux coté client et serveur...

Reply

Marsh Posté le 28-02-2005 à 21:19:04    

client

Code :
  1. ObjectInputStream bufferIN;
  2. PrintWriter bufferOUT;
  3. InputStream is = socket.getInputStream();
  4. bufferIN = new ObjectInputStream (is);
  5. //bufferIN = new ObjectInputStream (new BufferedInputStream(socket.getInputStream()));
  6. bufferOUT = new PrintWriter(socket.getOutputStream(), true);


 
serveur

Code :
  1. bufferIN = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  2. ObjectOutputStream bufferOUT2 = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
  3. bufferOUT2.writeObject(vector);

Reply

Marsh Posté le 28-02-2005 à 22:56:01    

Comme dis plus haut inverse la création des flux coté client ou coté serveur afin qu'un flux InputStream soit créé sur un OutputStream...
Essaies ceci et tiens nous au courant...
 
Client

Code :
  1. // Création de l'input stream
  2. ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  3. // Création de l'output stream
  4. ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  5. Vector vecRead = (Vector)ois.readObject();


 
Serveur

Code :
  1. // Création de l'output stream
  2. ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  3. // Création de l'input stream
  4. ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  5. oos.writeObject(vector);


Message édité par Shaps le 28-02-2005 à 23:00:25
Reply

Marsh Posté le 01-03-2005 à 21:51:13    

Bah c'est fait
C'est just que l'objet ne va que dans un sens (serveur -> client), et que dans l'autre c'est une String

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed