Bonjour,
je decouvre actuellement les socket en java et j'essaie de developper une application entre un client et un serveur pour qu'il puissent communiquer.
enfet j'envoi 10 fois un message au serveur (avec une boucle while) et j'affiche ce message.
Tout se passe bien jusqu'à la fin du programme. Voici le code pour que cela soit plus parlant
classe server:
classe 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 import java.net.*; import java.io.*; public class server { static final int port = 8080; public static void main (String [] args)throws Exception{ ServerSocket srv = new ServerSocket(port); System.out.println("Démarré " + srv); try{ Socket soc = srv.accept(); //Le serveur stoppe et attend une //demande de conexion try{ System.out.println("Connexion acceptée " + soc); BufferedReader reception = new BufferedReader( new InputStreamReader( soc.getInputStream()) ); PrintWriter envoi = new PrintWriter( new BufferedWriter( new OutputStreamWriter( soc.getOutputStream())), true); while (true){ String msg = reception.readLine(); if (msg.equals("end"))break; System.out.println("echo " + msg); envoi.println(msg); } }finally{ System.out.println("closing..."); soc.close(); } }finally{ srv.close(); }
et voici ce que j obtiens (sous Eclipse) :
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 import java.net.*; import java.io.*; public class client { public static void main (String [] args) throws IOException{ InetAddress ip = InetAddress.getByName("192.168.1.36"); System.out.println("Adresse ip : " + ip); Socket soc = new Socket (ip, server.port); try{ System.out.println("Socket : " + soc); BufferedReader entree = new BufferedReader( new InputStreamReader( soc.getInputStream())); PrintWriter sortie = new PrintWriter( new BufferedWriter( new OutputStreamWriter( soc.getOutputStream())),true); int i = 0; while (i<10){ sortie.println("ca marche " + i); String mdg = entree.readLine(); System.out.println(mdg); i++; } sortie.println("END"); }finally{ System.out.println("closing..0."); soc.close(); } }
la ligne 39 de la classe server est : String msg = reception.readLine();
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 Démarré ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=8080] Connexion acceptée Socket[addr=/192.168.1.36,port=33007,localport=8080] echo PW ca marche 0 echo PW ca marche 1 echo PW ca marche 2 echo PW ca marche 3 echo PW ca marche 4 echo PW ca marche 5 echo PW ca marche 6 echo PW ca marche 7 echo PW ca marche 8 echo PW ca marche 9 echo END Exception in thread "main" java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at sun.nio.cs.StreamDecoder$CharsetSD.readBytes(StreamDecoder.java:411) at sun.nio.cs.StreamDecoder$CharsetSD.implRead(StreamDecoder.java:453) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:183) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at server.main(server.java:39) closing...
Quelqu'un pourrait me dire pourquoi j'obtiens ces exceptions et comment les resoudre?
J'ai trouvé sur le web que cela pouvait provenir du mode passif ou actif. Mais je ne sais pas à quoi cela correspond ni comment utiliser l un ou l autre.
Merci de m aider
Partager