Bonjour voila j'ai un peu cherché sur les pages d'oracle il y a quelque chose que je n'ai pas du saisir : Il s'agit simplement d'un code tout simple d'un client et d'un serveur
monothreadé mais je bute un peu sur les appels à read et write :
code du serveur :
et voici le 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 import java.net.*; import java.io.*; public class Serveur { public static void main(String args[]) throws IOException{ ServerSocket serveur = new ServerSocket(11114); do{ Socket service = serveur.accept(); BufferedReader in = new BufferedReader( new InputStreamReader( service.getInputStream())); BufferedWriter out = new BufferedWriter( new OutputStreamWriter( service.getOutputStream())); String messageRecu; while((messageRecu = in.readLine())!=null) System.out.println( messageRecu ); //out.write("message du serveur pour le client"); //out.flush(); in.close(); out.close(); service.close(); }while(true); } }
Ca marche bien et le message est bien envoyé au 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 import java.io.*; import java.net.*; public class Client{ public static void main(String args[]) throws IOException{ Socket service = new Socket("localhost",11114); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(service.getOutputStream())); BufferedReader in = new BufferedReader( new InputStreamReader( service.getInputStream())); out.write("message du client pour le serveur"); out.flush(); //String messageRecu; //while((messageRecu = in.readLine())!=null) //System.out.println(messageRecu); out.close(); in.close(); service.close(); } }
Mais si j'enleve les commentaires, la le serveur et le client reste planté surement en attente de quelque chose.
Donc j'arrive a faire un envoie de donnée ( String) par le client mais je n'arrive pas a faire repondre le serveur juste apres qu il ai recu des données du client.
J'ai lu que read et write etaient bloquant mais la je ne vois pas le rapport.
D'autre part une fois le programme terminé, si je relance le serveur java m'indique que le port est utilisé.
J'aurais bien mis un serveur.close() mais si je le met apres la boucle, java me dit que l'instruction n'est jamais atteinte.
Enfin bref merci pour votre aide.
Partager