Problème boucle + datagramSocket
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 :
Citation:
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:
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:
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 ?