Bonsoir,
Je suis en train de m'entrainer avec les sockets et grace à certains tuto, j'ai réussi à faire quelque chose, maintenant pour m'entrainer, j'aimerais créer un mini-programme style msn mais tres basique; c'est à dire, chaque client peut envoyer un message et tous les autres le voient affichés dans un Jpanel.
J'arrive parfaitement à faire ca avec un seul client(mais ca sert à rien ^^), mais je ne sais trop comment m'y prendre pour le faire avec plusieurs... On m'a dit d'employer des threads mais je ne vois pas trop comment faire non plus...
Auriez-vous une idée ? Pour le moment mon code ressemble à ca :
classe Server
classe Gui(juste le main et l'event
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 package principal; import socket.SocketFonction; public class Server { public static SocketFonction net = new SocketFonction(); public static void main(String[] args) { net.CreateServeur(9999); String msg; String reponse; for(;;){ msg = net.getMsg(); reponse = msg; net.sendMsg(reponse); } } }
La classe dans laquelle j'ai les diverses fonctions :
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 public static SocketFonction net = new SocketFonction(); public static void main(String[] args){ net.CreateClient("127.0.0.1",9999); Gui gui = new Gui(); gui.setVisible(true); for(;;){ Texte = Texte + net.getMsg() + "\n"; textArea.setText(Texte); } } public void keyPressed(KeyEvent e) { if(e.getKeyCode() == KeyEvent.VK_ENTER){ net.sendMsg(jTextField1.getText() + " : "+ jTextField.getText()); jTextField.setText(null); } }
voila....
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 public class SocketFonction { ServerSocket SServer; Socket SClient; DataInputStream is; PrintStream os; public boolean CreateServeur(int port){ System.out.println("Wait client"); try { SServer = new ServerSocket(port); } catch (IOException e) { e.printStackTrace(); } try { SClient = SServer.accept(); is = new DataInputStream(SClient.getInputStream()); os = new PrintStream(SClient.getOutputStream()); }catch (IOException e) { System.out.println(e); return false; } System.out.println("client connected"); return true; } public boolean CreateClient(String address,int port){ try { SClient = new Socket(address, port); } catch (UnknownHostException e) { e.printStackTrace(); return false; } catch (IOException e) { e.printStackTrace(); return false; } try { is = new DataInputStream(SClient.getInputStream()); os = new PrintStream(SClient.getOutputStream()); } catch (IOException e) { e.printStackTrace(); return false; } return true; } //Envoie un message public boolean sendMsg(String msg){ msg.replace('\n',' '); // les retour a la ligne sont remplacé par des espaces os.println(msg); return true; } //Reçoit un message public String getMsg(){ try{ return is.readLine(); }catch (IOException e){ System.out.println(e); return null; } }
est ce que ce code est bien ou pas du tout ?
J'aimerais aussi créer une interface principale sur laquelle on pourrait créer un serveur et se connecter à un serveur, est ce possible ?
Je sais que je demande beaucoup...
Merci d'avance de ceux qui auront le courage de s'attarder sur ce post et de m'aider à surmonter mon ignorance ^^
Partager