Probleme deserialiser objet socket

cs_kiki789 Messages postés 2 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 24 décembre 2008 - 23 déc. 2008 à 18:09
cs_kiki789 Messages postés 2 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 24 décembre 2008 - 24 déc. 2008 à 12:59
bonjour,

 
voila j'essaye d'écrire un programme de conversation (style
msn) en java. J'ai fait une classe message (contenant divers
information comme le destinataire, l'emetteur, le contenu...).
J'essaye, pour l'instant, d'envoyer un message du client vers le
serveur et d'afficher le contenu sur le serveur. Ça marche (je reçois
bien le message) sauf que après m'avoir afficher le message, il
m'affiche un "null" (ou alors une exception IOException). Le
printStackTrace donne ceci : java.io.EOFException

 at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2570)

 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1314)

 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)

 at Dialogue.run(Dialogue.java:33)

 
je vous mets le code de la partie qui deconne :  
 


Code :

<ol id="code1" class="olcode">
<li>
public
void run() {</li>
<li>   try {</li>
<li>     while (true) {</li>
<li>         // System.out.println("hihi" );
</li>
<li>         Object tentative = entree.readObject();</li>
<li>         // System.out.println("hoho" );
</li>
<li>         message2 = (Message)tentative;</li>
<li>         if ((message2.getType()).equals("message" )){</li>
<li>                     System.out.println(message2.getCorps());</li>
<li>          }</li>
<li>      }</li>
<li>    }</li>
<li>    catch (IOException r3) {</li>
<li>        r3.printStackTrace();</li>
<li>    }</li>
<li>    catch (ClassNotFoundException r4) {</li>
<li>        System.err.println("erreur" );</li>
<li>    }</li>
<li>}</li>
</ol>



Je pense que l'erreur se situe au niveau de "Object tentative =
entree.readObject();" car quand j'enleve les commentaires sur les
System.out.println j'ai ceci comme résultat :

hihi

hoho

contenu du message  
hihi

java.io.EOFException

 at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2570)

 at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1314)

 at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)

 at Dialogue.run(Dialogue.java:33)

 
Cependant, je ne sais pas comment faire pour empécher ça.

 
Merci beaucoup pour votre aide.

3 réponses

sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
24 déc. 2008 à 09:34
j'avais eut le meme pb, je l'avais resolu en reinitialisant le ObjectInputStream a chaque fois ... j'ai pas le code sous la main et ca remonte a loin

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
24 déc. 2008 à 09:36
genre

while (true)
{
ObjectInputStream in = new .........
obj = in.readObject();
in.close()//je suis pas sur du close .......
}

"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
cs_kiki789 Messages postés 2 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 24 décembre 2008
24 déc. 2008 à 12:59
Merci pour la réponse. Cependant ça ne marche toujours pas. J'ai réinitialiser l'objectoutputstream comme tu me l'as indiqué et voila le résultat :

hihi
hoho
contenu du message
hihi
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2297)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2766)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:797)
    at java.io.ObjectInputStream.(ObjectInputStream.java:297)
    at Dialogue.run(Dialogue.java:33)

et si je mets le in.close() ça me donne ça :

hihi

hoho

contenu du message

hihi
java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:325)
    at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2282)
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2295)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2766)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:797)
    at java.io.ObjectInputStream.(ObjectInputStream.java:297)
    at Dialogue.run(Dialogue.java:33)

Donc conclusion je ne pense pas qu'il faut mettre le in.close(). Cependant j'ai trouvé ceci : http://forum.hardware.fr/hfr/Programmation/Java/java-eofexception-sujet_52783_1.htm
. Ça correspond à mon probléme sauf que je ne vois pas comment faire pour synchroniser le stream et la socket

Merci pour votre aide.
0
Rejoignez-nous