Bonjour,
Je suis en train de réaliser un chat UDP avec une IHM swing pour un projet de formation.
Je suis en train de faire le serveur et j'ai un petit souci.
Lorsque je saisie un port dans la JOptionPane pour me connecter, j'ai ce message dans la console :
En fait, ça marchait bien jusqu'à ce que j'essaie de gérer les erreurs de saisie de port (saisie de lettre par exemple ou aucune saisie).java.net.BindException: Address already in use
at java.net.PlainDatagramSocketImpl.bind0(Native Method)
at java.net.AbstractPlainDatagramSocketImpl.bind(AbstractPlainDatagramSocketImpl.java:94)
at java.net.DatagramSocket.bind(DatagramSocket.java:392)
at java.net.DatagramSocket.<init>(DatagramSocket.java:242)
at java.net.DatagramSocket.<init>(DatagramSocket.java:299)
at java.net.DatagramSocket.<init>(DatagramSocket.java:271)
at Serveur.main(Serveur.java:65)
J'ai fais une boucle pour que la JOptionePane me redemande systématiquement de saisir un port en cas d'erreur.
Donc je pense que cela vient de la boucle mais je ne vois pas à quel niveau.
Je vous mets mon code :
Donc le code ci-dessus ne fonctionne pas.
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 import java.io.IOException; import java.net.DatagramSocket; import java.net.SocketException; import java.util.ArrayList; import javax.swing.JOptionPane; public class Serveur { public static void main(String[] args) { try { ViewServeur vs = new ViewServeur(); ArrayList<Paquet> clients = new ArrayList<Paquet>(); String op; int port = 0; //Boucle pour demander un numéro de port do { op = JOptionPane.showInputDialog(" Veuillez saisir un port"); if(op == null) { System.exit(0); } //Si port 0 alors message d'erreur (car port 0 réservé au systeme) else if(op.equals("0")) { JOptionPane.showMessageDialog(null, "Vous ne pouvez pas choisir le port 0"); op =""; } //Traitement de la saisie si autre que 0 else { try { //ajout de la saisi (string) dans une variable int port = Integer.parseInt(op); } catch (Exception e) { //Si la saisie n'est pas un numéro ou est vide JOptionPane.showMessageDialog(null, "Vous n'avez pas saisi de numéro"); op = ""; } } } while (op.equals("")); //Actualisation du statut de connection vs.setPort(true); //Création d'un socket en UDP do { DatagramSocket ds = new DatagramSocket(port); new ThreadClient(ds, clients, vs).start(); } while (true); } catch (IOException e) { e.printStackTrace(); } } }
Mais le code ci-dessous fonctionne très bien :
Voyez-vous d’où cela provient ?
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.IOException; import java.net.DatagramSocket; import java.net.SocketException; import java.util.ArrayList; import javax.swing.JOptionPane; public class Serveur { public static void main(String[] args) { try { ViewServeur vs = new ViewServeur(); ArrayList<Paquet> clients = new ArrayList<Paquet>(); int port = Integer.parseInt(JOptionPane.showInputDialog("Tapez un port")); vs.setPort(true); do { DatagramSocket ds = new DatagramSocket(port); new ThreadClient(ds, clients, vs).start(); } while (true); } catch (IOException ioe) { } } }
Partager