Bonjour ,
Je suis en train de faire un serveur multiconnexion , lorsque le serveur reçoit "total" il envoie au client un message contenant le nombre de connectés , par contre lorsqu'il reçoit "sendall" , il doit faire un broadcast et envoyer un message (socket) à tous les clients connecté , donc il doit parcourir un ArrayList où j'ai stocké tous les thread clients connectés.
Pour le message "total" tout fonctionne bien , mais pour le broadcasting j'ai toujours des exception .
Code 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
41
42
43
44
45
46
47
48
49 import java.io.*; import java.net.*; import java.util.ArrayList; public class EchoServer { private static final int PORT = 50231; public ArrayList<Object> listClients=new ArrayList<Object>(); public int nbClients; public static void main(String[] args) { try { EchoServer echoserver=new EchoServer(); ServerSocket vServSocket = new ServerSocket(PORT); System.out.println("[Server] Up and running!"); while(true) { Socket clientSocket = vServSocket.accept(); InetAddress clientAddress = clientSocket.getInetAddress(); System.out.println("[Server] " + clientAddress.getHostAddress() + " connected."); EchoThread thread = new EchoThread (clientSocket,echoserver); thread.start(); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } synchronized public int addClient(EchoThread echoThread) { nbClients++; listClients.add(echoThread); return listClients.size(); } }
Code Thread
Code du 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 import java.io.*; import java.net.*; public class EchoThread extends Thread { private Socket socket; private EchoServer echoserver; BufferedReader in; BufferedWriter out; int numClient; public EchoThread(Socket socket, EchoServer echoserver) { this.socket = socket; this.echoserver=echoserver; try { in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //numClient=echoserver.addClient(out); } catch (IOException e) { e.printStackTrace(); } } public void run() { synchronized (echoserver.listClients) { numClient=echoserver.addClient(this); } String numberOfConnected; numberOfConnected=Integer.toString(echoserver.listClients.size()); try { String message = in.readLine(); while(message != null) { if (message.equals("sendall")) { //System.out.println("[Server] Client number: " + numClient); System.out.println("[Server] Received message: SendAll"); for (int i = 0; i < echoserver.listClients.size(); i++) { synchronized (echoserver) { EchoThread client = (EchoThread) echoserver.listClients.get(i); client.out.write(message + "(The response)" + "\n"); client.out.flush(); System.out.println("[Server] Sending response: " + "Broadcast message to: client no "+ i); } } } else if (message.equals("total")) { System.out.println("[Server] Client number: " + numClient); System.out.println("[Server] Received message: " + message); System.out.println("[Server] Sending response: " + numberOfConnected); out.write(numberOfConnected + "\n"); out.flush(); } } in.close(); out.close(); socket.close(); } catch (IOException e) { System.out.println("Error sending message"); e.printStackTrace(); } } }
Lorsque je tape "sendall" pour faire un broadcast , voici le message d'erreur que j'obtient :
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 import java.io.*; import java.net.*; public class EchoClient { private static final int PORT = 50231; private static final String SERVER_ADDRESS = "localhost"; public static void main(String[] args) { try { Socket socket = new Socket(InetAddress.getByName(SERVER_ADDRESS), PORT); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //String outMessage = "Hello"; System.out.println("[Client] Type your request: "); BufferedReader stdin=null; stdin=new BufferedReader(new InputStreamReader(System.in)); String outMessage = stdin.readLine(); System.out.println("[Client] Sending request: " + outMessage); out.write(outMessage + "\n"); out.flush(); String inMessage = in.readLine(); System.out.println("[Client] Got response: " + inMessage); in.close(); out.close(); socket.close(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Pouvez vous m'aider SVP ?Error sending message
java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
at java.io.BufferedWriter.flush(BufferedWriter.java:236)
at EchoThread.run(EchoThread.java:54)
Merci d'avance
Aymen
Partager