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 :

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)
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).
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 :

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();
		}
 
 
	}
 
}
Donc le code ci-dessus ne fonctionne pas.

Mais le code ci-dessous fonctionne très bien :
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) { }
 
	}
 
}
Voyez-vous d’où cela provient ?