Pb avec les sockets... :( :(

Résolu
Foub12 Messages postés 44 Date d'inscription mardi 9 juillet 2002 Statut Membre Dernière intervention 1 avril 2007 - 23 mars 2005 à 19:04
safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 - 24 mars 2005 à 13:50
Bonjour,



je suis en train de créer une application client/serveur et pour
se connecter, j'ai utilisé les sockets.

Mais, je ne comprends pas pourquoi
le code suivant ne fonctionne que lorsque le 1er client se connecte... Si
d'autres utilisateurs tentent de se connecter au serveur, le serveur ne les
détecte pas... et le serveur reste bloqué sur la ligne : "soc.accept()"
!



Voici mon code : «


String IP_Client = "";
boolean cond
= true;
ServerSocket s = null;
Socket soc =
null;
BufferedReader plec = null;

System.out.println("je crée le socket
!!!");
try {
s = new
ServerSocket(monModeleServeur.getPort());
}
catch (IOException ex) {}

while (true)
{
try {

System.out.println("je rentre dans la boucle");

System.out.println("attente de nouveaux clients");
soc =
s.accept();

//
Permet de récupérer l'adresse IP du client

IP_Client = (soc.getInetAddress().toString()).substring(1);

// Un BufferedReader permet de lire par
ligne.
plec = new BufferedReader(
new
InputStreamReader(soc.getInputStream())

);

while (cond) {
String
str = plec.readLine(); // lecture du message

if (!str.equals("")) { // on a bien
récupéré le pseudo du client
// Actions à effectuer lorsque que l'on
trouve un pseudo...
// IP_Client : IP du client
//
str : Pseudo du client
System.out.println("Ajout du client : "
+ str + " qui a l'IP : " +

IP_Client);

cond
= false;
}

}

plec.close();

soc.close();

soc =
null;
plec = null;


}
catch (Exception e) {
System.exit(0);
}
}
»

HELP ME... Avez-vous une idée ?
Merci
d'avance.

Fabien

1 réponse

safisoft Messages postés 489 Date d'inscription vendredi 30 janvier 2004 Statut Membre Dernière intervention 13 mai 2009 6
24 mars 2005 à 13:50
je
sé pas tout dabord pourkoi tu fais un substring(1) pour avoir l'adresse
IPdu client, puis tu dois créer une autre classe qui gère
l'authentification e par la suite la communication avec le clien, cette
classe doit être un Thread, et une fois tu recoi un connection tu crée
une instance de cette classe et tu lui passe la socket, les flus
d'entrés et de sorties seront propre à chaque instance du client dans
le serveur.

la boucle du serveur doit contenir seulemnt:

while(true){

monVecteurDeClients.addElement(new ClassClientInServer(s.accept()));

}



et dans le public void run() de ClassClientInServer tu pe mettre la boucle de lecture et d'ecriture dans les flux de la socket.
3
Rejoignez-nous