[objectOutputStream] blocage sur le writeObject

Résolu
Frouf85 Messages postés 106 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 7 octobre 2004 - 27 juil. 2004 à 14:38
Frouf85 Messages postés 106 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 7 octobre 2004 - 27 juil. 2004 à 15:07
bonjour,

je fais deux application communiquant via un reseau et 'utilise pour communiquer les objectInputStream et objectOutputStream.

Lors du deuxième envoi d'un object, mon serveur bloque sur l'instruction writeObject mais sans me signaler aucune exception.

voila le code (dsl pour la brique)

public void run() {

try {
while (vieThread) {
ObjectTransmis objectTransmis=(ObjectTransmis)objectIn.readObject();
String type=objectTransmis.getType();
System.out.println("reception d'un message: "+type);
ObjectTransmis objectATransmettre=null;
//renvoie au client la structure du smq sous forme de vector
if (type.equals("recupSMQ")){
SMQImpl smq=new SMQImpl();
objectATransmettre=new ObjectTransmis("smq",smq.getSMQ());
System.out.println("recuperation du smq");
objectOut.writeObject(objectATransmettre);
objectOut.flush();
}
//renvoi eu client la strcuture du smq avec les info sur la validation des fichiers
else if(type.equals("recupStructureSMQ")){
SMQImpl smq=new SMQImpl();
objectATransmettre=new ObjectTransmis("structureSmq",smq.getStructure((Vector)objectTransmis.getContenu()));
//System.out.println(objectATransmettre.getContenu());
//System.out.println(objectOut);
//objectOut.flush();
objectOut.writeObject(objectATransmettre);//////////LE PB EST ICI!!!!!!!!
System.out.println("object ecrit");
objectOut.flush();

}
//renvoie au client le fichier désiré
else if(type.equals("recupFichier")){
System.out.println("recuperation du fichier");
SMQImpl smq=new SMQImpl();
Vector contenu=(Vector)objectTransmis.getContenu();
Integer typeFichier=(Integer)contenu.elementAt(1);
String cheminFichier=(String)contenu.elementAt(0);
System.out.println("mise en  byte");
byte[] fichier=smq.getFile(cheminFichier);
GestionConfiguration gc=new GestionConfiguration();
File fichierProv=new File(gc.getAdresseSMQ()+File.separator+cheminFichier);
Vector newFichier=new Vector();
newFichier.add(cheminFichier);
newFichier.add(fichier);
newFichier.add(typeFichier);
newFichier.add(new Long(fichierProv.lastModified()));
System.out.println("creation de l'object à transmettre");
objectATransmettre=new ObjectTransmis("fichierTelecharge",newFichier);
System.out.println("ecriture sur le socket");
objectOut.writeObject(objectATransmettre);
System.out.println("flush sur le socket");
objectOut.flush();
System.out.println("fin de recup fichier");
}
//appelé lorsque le client envoie un fichier
else if(type.equals("envoiFichier")){
System.out.println("reception du fichier envoyé par le client");
Vector fichier=(Vector)objectTransmis.getContenu();
SMQImpl smq=new SMQImpl();
smq.setFile((byte[])fichier.elementAt(1),(String)fichier.elementAt(0),((Integer)fichier.elementAt(2)).intValue(),((Long)fichier.elementAt(3)).longValue());
System.out.println("fin de la recepetion");
}
//appelé lorsque le client envoie un message
else if(type.equals("envoiMessage")){
BoiteMessagesImpl boiteMessage=new BoiteMessagesImpl();
boiteMessage.setMessage((Vector)objectTransmis.getContenu());
}
//lortsque le client veut récupérer les messages
else if(type.equals("recupMessage")){
GestionMessageIOFile gestionMessages=new GestionMessageIOFile();
objectATransmettre=new ObjectTransmis("messages",gestionMessages.loadAllFile((String)objectTransmis.getContenu()));
objectOut.writeObject(objectATransmettre);
objectOut.flush();
}
//lorsque le client veut récupérer les noms des différents comptes.
else if (type.equals("recupNomsComptes")){
GestionCompte gc=new GestionCompte();
objectATransmettre=new ObjectTransmis("nomComptes",gc.loadNomComptes());

objectOut.writeObject(objectATransmettre);
objectOut.flush();
}
//objectOut=new ObjectOutputStream(client.getOutputStream());
//objectOut.writeObject(objectATransmettre);
//objectOut.flush();
//test sur le type de l'objet recu (faire une methode
System.out.println("fin de boucle");
}
} catch (IOException ioe) {
System.out.println("erreur de reception dans le thread reception" + ioe);
ioe.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}

}


merci

Frouf

2 réponses

Frouf85 Messages postés 106 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 7 octobre 2004
27 juil. 2004 à 15:07
dsl pour le dérangement, j'ai fait une boulette en fait c'était du coté client, mon thread de reception d'object n'était pas lancé à cause d'une mauvaise initialisation d'une variable.

merci quand même

Frouf le boulet
3
wargre Messages postés 649 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 9 septembre 2004 7
27 juil. 2004 à 14:58
Envoie t'il reelement 1 objet au debut?
est ce que si t'envoie 2 objet de meme type(le meme que pour le message qui passe) ca se passe bien?

Est-ce que ce n'est pas un pb de timeout?
0
Rejoignez-nous