Frouf85
Messages postés106Date d'inscriptionmardi 6 mai 2003StatutMembreDernière intervention 7 octobre 2004
-
27 juil. 2004 à 14:38
Frouf85
Messages postés106Date d'inscriptionmardi 6 mai 2003StatutMembreDerniè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();
}
}
Frouf85
Messages postés106Date d'inscriptionmardi 6 mai 2003StatutMembreDerniè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.