Bonjour à tous, je suis nouveau sur le forum.
Je me suis inscrit ici, car j'ai un soucis, que je n'arrive pas à résoudre seul (en cherchant sur le net).
Je dois réaliser une application en java composé de deux parties principalement. Un côté serveur, un côté client (multi clients même) ainsi qu'une partie base de données (développement X Tiers oblige).
J'ai donc un soucis entre la communication du serveur et mes clients, qui communiquent via un Socket.
Donc ce que je souhaite pouvoir faire, c'est que le Serveur soit en attente de clients (fonctionnel dans mon code), une fois qu'un client se connecte, le client va demander un ordre au serveur, donc mon cas je demande de me récupérer une liste d'agences. Donc une fois la demande effectuée, le serveur doit me retourner une liste d'agence sous forme d'un Objet ArrayList<Agences>.
Et aussi plusieurs autres possibilités, comme modifier une agence, etc ...
Au début je ne faisais que dès que le client se connecte au serveur, que ce dernier me renvoi une liste d'agences. Tout cela fonctionne très bien, sauf que maintenant je coince sur la gestion de mes demandes, c'est à dire, je demande quelque chose au serveur, le serveur me retourne ce que j'ai demandé (résultat d'un traitement, mise à jour d'un élément en base de données, etc ...). Mais malheureusement je n'y arrive point.
Je me retourne donc vers vous, car tous les exemples que j'ai pu trouver, n'expliquent pas clairement comment gérer une multitude de demandes clientes vers un serveur.
D'avance merci pour votre aide. Je vous met à disposition les codes que j'emploie et qui ne sont pas fonctionnels pour ce que je veux en faire.
Seule code que je n'ai pas mis, c'est celui de la la classe Agences qui importe peu ici.
Côté serveur ==============================================================
Classe Server :
Classe Connect :
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 package console; import java.net.ServerSocket; import java.net.Socket; /** * * @author jesuisperdu */ public class Server extends Thread { private ServerSocket SolarServer; public static void main(String argv[]) throws Exception { new Server(); } public Server() throws Exception { int port = 20000; SolarServer = new ServerSocket(port); System.out.println("Serveur en ecoute sur le port " + port + "."); this.start(); } public void run() { while(true) { try { System.out.println("En attente de connexions."); Socket client = SolarServer.accept(); System.out.println("Connexion acceptee de : "+ client.getInetAddress()); Connect c = new Connect(client); } catch(Exception e) {} } } }
Côté 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 package console; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.ArrayList; import provider.DataProvider; import entity.Agences; /** * * @author jesuisperdu */ class Connect extends Thread { private Socket client = null; private ObjectInputStream ois = null; private ObjectOutputStream oos = null; public Connect() { } public Connect(Socket clientSocket) { client = clientSocket; try { ois = new ObjectInputStream(client.getInputStream()); oos = new ObjectOutputStream(client.getOutputStream()); } catch(Exception e1) { try { client.close(); }catch(Exception e) { System.out.println(e.getMessage()); } return; } this.start(); } public enum commande { GET_ALL_AGENCES, UPDATE_AGENCE } public void run() { try { commande commande = null; commande = (commande) ois.readObject(); System.out.println(commande); switch (commande){ case GET_ALL_AGENCES: ArrayList<Agences> pAgencesList = DataProvider.getInstance().getAllAgences(); oos.writeObject(pAgencesList); oos.flush(); break; case UPDATE_AGENCE: Agences pAgence = (Agences) ois.readObject(); DataProvider.getInstance().updateAgence(pAgence); break; } // close streams and connections ois.close(); oos.close(); client.close(); } catch(Exception e) {} } }
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
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 package console; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.Scanner; import entity.Agences; /** * * @author jesuisperdu */ public class Client { private static String serverIP = ""; public enum commande { GET_ALL_AGENCES, UPDATE_AGENCE } public static void main(String argv[]) { commande commande = null; // On vérifie que l'on a passé des paramètres pour l'appel au .jar if (argv.length == 1) { // On stocke ces paramètre dans la variable path serverIP = argv[0]; } // On vérifie si la variable path contient quelque chose if (serverIP == "") { System.out.println("Manque un argument IP derriere l'executable"); } ObjectOutputStream oos = null; ObjectInputStream ois = null; Socket socket = null; ArrayList<Agences> agences = null; try { // open a socket connection socket = new Socket(serverIP, 20000); // open I/O streams for objects oos = new ObjectOutputStream(socket.getOutputStream()); ois = new ObjectInputStream(socket.getInputStream()); // read an object from the server oos.writeObject(commande.GET_ALL_AGENCES); oos.flush(); agences = (ArrayList<Agences>) ois.readObject(); System.out.println("Liste des agences :"); for (Agences a : agences) { System.out.println(a.getIdagences() + "\t" + a.getNom() + "\t" + a.getRue() + "\t" + a.getCp() + "\t" + a.getVille() + "\t" + a.getTel() + "\t" + a.getFax() + "\t" + a.getMail() + "\t" + a.getDossierFtp()); } System.out.println("Modification Agence"); Scanner sc = new Scanner(System.in); System.out.println("id Agence a modifier : "); int idAg = sc.nextInt(); System.out.println("Nouveau nom : "); String nomAg = sc.nextLine(); System.out.println("Nouvelle rue : "); String rueAg = sc.nextLine(); System.out.println("Nouveau code postal : "); String cpAg = sc.nextLine(); System.out.println("Nouvelle ville : "); String villeAg = sc.nextLine(); System.out.println("Nouveau Tel : "); String telAg = sc.nextLine(); System.out.println("Nouveau Fax : "); String faxAg = sc.nextLine(); System.out.println("Nouveau Mail : "); String mailAg = sc.nextLine(); System.out.println("Nouveau dossier ftp : "); String ftpAg = sc.nextLine(); Agences Ag = new Agences(idAg, nomAg, ftpAg, rueAg, cpAg, villeAg, telAg, faxAg, mailAg); oos.writeObject(commande.UPDATE_AGENCE); oos.flush(); oos.writeObject(Ag); oos.flush(); oos.writeObject(commande.GET_ALL_AGENCES); oos.flush(); agences = (ArrayList<Agences>) ois.readObject(); System.out.println("Liste des agences :"); for (Agences a : agences) { System.out.println(a.getIdagences() + "\t" + a.getNom() + "\t" + a.getRue() + "\t" + a.getCp() + "\t" + a.getVille() + "\t" + a.getTel() + "\t" + a.getFax() + "\t" + a.getMail() + "\t" + a.getDossierFtp()); } oos.close(); ois.close(); } catch(Exception e) { System.out.println(e.getMessage()); } } }
Partager