Bonjour tout le monde,
je travaille depuis quelque temps sur un petit projet perso de messagerie instantanée, la connexion entre Client/Serveur se passe bien ainsi que l'envoi des messages, mais dés que la connexion est interrompue et que j'aie rétabli la connexion le problème commence, le serveur/client se met à envoyer des messages multiples. Voici mon code :
Serveur :
Client :
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195 public class Serveur extends javax.swing.JFrame { PrintWriter Pwriter; Socket clientSock_envoi; Thread Thread_reception; Thread Thread_Envoi; int Treception = 0; int Tenvoi =0; public Serveur() { initComponents(); } /******************************************************************************/ /******************************************************************************/ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { lancement serveur = new lancement(); serveur.start(); } /******************************************************************************/ /******************************************************************************/ public class lancement extends Thread{ @Override public void run() { try { final int port = 80; jTextArea1.append("Serveur en écoute sur le port : "+port+ "\n"); ServerSocket ss = new ServerSocket(port); while (true) { Socket clientSocket = ss.accept(); Thread_Reception reception = new Thread_Reception(clientSocket,Treception++); Thread_reception = new Thread(reception); Thread_reception.start(); Thread_Envoi envoi = new Thread_Envoi(clientSocket,Tenvoi++); Thread_Envoi = new Thread(envoi); Thread_Envoi.start(); } } catch (IOException ex) { Logger.getLogger(Serveur.class.getName()).log(Level.SEVERE, null, ex); } } } /******************************************************************************/ /******************************************************************************/ class Thread_Reception implements Runnable { Socket clientSocket_Receive=null; BufferedReader MonBuffer = null; public Thread_Reception(Socket clientSocket,int i) { clientSocket_Receive = clientSocket; } public void run() { try{ MonBuffer = new BufferedReader(new InputStreamReader(clientSocket_Receive.getInputStream())); String messageString; // while(true){ while((messageString = MonBuffer.readLine())!= null){ jTextArea1.append(messageString + "\n"); } clientSocket_Receive.close(); // break; //} } catch(Exception ex) { jTextArea1.append(ex.getMessage()+"\n"); } } } /******************************************************************************/ /******************************************************************************/ class Thread_Envoi implements Runnable { public Thread_Envoi(Socket clientSock, int i) { clientSock_envoi = clientSock; } public void run() { try { try{ Pwriter =new PrintWriter(new OutputStreamWriter(clientSock_envoi.getOutputStream())); jButton2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String MonMessage = null; BufferedReader input = new BufferedReader(new java.io.StringReader(jTextField1.getText())); try { MonMessage = input.readLine(); } catch (IOException ex) { Logger.getLogger(Serveur.class.getName()).log(Level.SEVERE, null, ex); } Pwriter.println(MonMessage); Pwriter.flush(); } }); } catch(Exception ex) { jTextArea1.append(ex.getMessage()+ "\n"); } if (!clientSock_envoi.isConnected()) { Pwriter.close(); clientSock_envoi.close(); } } catch (IOException ex) { Logger.getLogger(Serveur.class.getName()).log(Level.SEVERE, null, ex); } } }
Je pense que le problème provient de la fermeture des thread mais je ne sais pas comment le résoudre.
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129 public class Client extends javax.swing.JFrame { Socket Monsock; PrintWriter Monprint; BufferedReader brinput=null; public Client() { initComponents(); } /***********************************************************************************/ /***********************************************************************************/ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try { Socket sock = new Socket("127.0.0.1",80); Thread_Envoi Thread_Envoi = new Thread_Envoi(sock); Thread thread = new Thread(Thread_Envoi); thread.start(); Thread_Reception Thread_Reception = new Thread_Reception(sock); Thread thread2 =new Thread(Thread_Reception); thread2.start(); } catch (Exception e) { jTextArea1.append(e.getMessage()+"\n"); } } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { } /******************************************************************************/ /******************************************************************************/ class Thread_Reception implements Runnable { Socket sock=null; BufferedReader MonBuffer=null; public Thread_Reception(Socket sock) { this.sock = sock; } public void run() { try{ MonBuffer = new BufferedReader(new InputStreamReader(this.sock.getInputStream())); String MsgRecu = null; while((MsgRecu = MonBuffer.readLine())!= null) { jTextArea1.append(MsgRecu + "\n"); } }catch(Exception e) { jTextArea1.append(e.getMessage()+"\n"); } } } /******************************************************************************/ /******************************************************************************/ class Thread_Envoi implements Runnable { BufferedReader brinput=null; public Thread_Envoi(Socket sock) { Monsock = sock; } public void run(){ try{ if(Monsock.isConnected()) { jTextArea1.append("Client connected to "+Monsock.getInetAddress() + " on port "+Monsock.getPort() + "\n"); jButton2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { try { Monprint = new PrintWriter(Monsock.getOutputStream(), true); brinput = new BufferedReader(new java.io.StringReader(jTextField1.getText())); String msgtoServerString=null; msgtoServerString = brinput.readLine(); Monprint.println(msgtoServerString); Monprint.flush(); } catch (IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } }); }else{ jTextArea1.append("serveur arrêté !"+ "\n"); } }catch(Exception e) { jTextArea1.append(e.getMessage()+ "\n"); } } }
Merci bien pour votre aide !
Partager