Bonjour,

Je tente désespérément d'envoyer par socket à la fois du texte (par un PrintWriter) et des objets (ObjectOutputStream).
Voilà un bout de code du client (attention, c'est plein de variables mais leur type est correct, l'erreur ne vient pas de là) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
Socket sock = new Socket(Parametres.IP_SERVER, Parametres.PORT_SOCKET);
BufferedReader is = new BufferedReader(new InputStreamReader(sock.getInputStream()));
PrintWriter os = new PrintWriter(sock.getOutputStream(), true);
//Envoi de l'info de départ pour identifier le document à générer
os.print("CreationEtatSection" + "\r\n");
//Envoi des informations générales
os.print(_parent._cboSection._mapCodeLibelle.get(_section).toString() + "\r\n");
os.print(_user._nom + "\r\n");
os.print(_grade + "\r\n");
os.print(nbSemaines + "\r\n");
os.print(nbAgents + "\r\n");
//Envoi des dates à afficher
GregorianCalendar dateEnCours = new GregorianCalendar(dateDebut.get(Calendar.YEAR), dateDebut.get(Calendar.MONTH), dateDebut.get(Calendar.DATE));
for (int i = 0; i < nbSemaines * 7; i++) {
  int mois = dateEnCours.get(Calendar.MONTH) + 1;
  os.print(Outils.afficheDate(dateEnCours.get(Calendar.DATE)) + "/" + Outils.afficheDate(mois) + "\r\n");
  dateEnCours.add(Calendar.DATE, 1);
}
os.flush();
//Envoi des activités jour après jour pour chaque agent
ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
oos.writeObject(data);
oos.writeObject(_actis);
oos.writeObject(_cookColor);
oos.writeObject(_parent._cboActis._mapCodeLibelle);
oos.flush();
oos.close();
os.close();
sock.close();
J'ai plusieurs questions :
1/ Pourquoi fermer os puis ouvrir oos provoque la fermeture de la socket (erreur du type : socket closed) ? On parle bien d'un flux et pas de la socket à proprement parler ?

2/ Quand j'effectue 2 fois de suite se code, même après avoir fermé la socket et l'avoir réouverte, je prends, côté client, l'erreur suivante :
java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
at java.io.ObjectOutputStream.writeNonProxyDesc(Unknown Source)
at java.io.ObjectOutputStream.writeClassDesc(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeFatalException(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at tempo.FeuilleSection.genererPage(FeuilleSection.java:300)
La ligne 300 est le premier writeObject : writeObject(data)

Côté serveur, voilà le message :
java.io.StreamCorruptedException: invalid stream header
at java.io.ObjectInputStream.readStreamHeader(Unknown Source)
at java.io.ObjectInputStream.<init>(Unknown Source)
at tempo.TempoServer.traiter(TempoServer.java:314)
at tempo.TempoServer.main(TempoServer.java:87)
Celui-là correspond, côté serveur à ois = new ObjectInputStream(clientSocket.getInputStream());

Je suis un peu perdu dans ce qu'il faut ouvrir, et fermer, et quand.

Merci de votre aide,

ced