Bonjour à tous,
Dans un exercice pour l’école, il m’a été demandé de créer un socket sérialiser de flux d’entrée / sortie d’objet.
Code fourni par le prof.
Les flux d'entrée/sortie avec des objets
Pour envoyer un message:
Pour recevoir un message:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 OutputStream os=socket.getOutputStream(); ObjectOutputStream out= new ObjetcOutputStream(os); out.writeObject(message); out.flush(); out.close(); os.close();
Logique de l’exercice
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 InputStream is= socket.getInputStream(); ObjectInputStream in= new ObjectInputStream(is); Message message= (Message)in.readObject(); in.close(); is.close();
Coté client
Création du message -- Connexion au serveur -- envoi du message -- réception de la réponse tous en boucle
Coté serveur
Mise en attente de connexion -- réception du message -- traitement du message -- envoi réponse le tous en boucle
J’ai implémenté cette logique du coté client et du coté serveur.
Quand je démarre le serveur il se met en attente de connexion tous ok.
Quand je démarre le client il crée bien le message, crée la connexion et envoi le message tous est ok.
Le problème est que une fois le message reçu coté serveur il ne fait plus la partie traitement et renvoi du message. IL se remet en attente.
J’ai remarqué ceci car j’ai mis des sortie console avec du texte qui me disais l’opération à faire.
C'est comme si il ne fais pas la suite des opération et il se remet on mode accept.
voici le code coté client
voici le code coté serveur
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
31
32
33
34
35
36
37
38
39
40 public class TCPClient { /** * @param args the command line arguments */ InputStream is = null; ObjectInputStream in = null; OutputStream os = null; ObjectOutputStream out = null; public TCPClient(Message msg){ while(true){ try{ Socket connectionSocket = new Socket("localhost",6789); os=connectionSocket.getOutputStream(); out= new ObjectOutputStream(os); out.writeObject(msg); System.out.println("Envoi du message au serveur"); out.flush(); is= connectionSocket.getInputStream(); in= new ObjectInputStream(is); Message message= (Message)in.readObject(); System.out.println("reception du message du serveur"); TraitementMessage.run(message); }catch(Exception e){ e.getMessage(); }finally{ try{ in.close(); is.close(); out.close(); os.close(); }catch(Exception e){ e.getMessage(); } } } }
Je vous remercie pour toute l’aide que vous pourrez m’apporter, dans l’attente de vos proposition je vous souhaite une bonne journée
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 public class TCPServer { // public void main(String[] args) throws IOException { String clientSentence; String capitalizedSentence; int port = 6789; InputStream is = null; ObjectInputStream in = null; OutputStream os = null; ObjectOutputStream out = null; public TCPServer(){ while(true){ try { // se met en mode attente de connexion ServerSocket srvSocket = new ServerSocket(this.getPort()); System.out.println("serveur en attente"); Socket connectionSocket = srvSocket.accept(); // récupère le message System.out.println("serveur receptionne le message client"); is= connectionSocket.getInputStream(); in= new ObjectInputStream(is); Message message = (Message)in.readObject(); // System.out.print(message); TraitementMessage.run(message); os=connectionSocket.getOutputStream(); out= new ObjectOutputStream(os); out.writeObject(message); System.out.println("serveur envoi la reponse au client"); out.flush(); } catch (Exception e) { e.getMessage(); }finally{ try{ in.close(); is.close(); out.close(); os.close(); }catch(Exception e){ e.getMessage(); } } } }
Partager