[Java/net] Comment debloquer un serversocket.accept() proprement ?

Comment debloquer un serversocket.accept() proprement ? [Java/net] - Java - Programmation

Marsh Posté le 26-02-2006 à 14:34:40    

Salut les amis !
 
J'ai une petite question: je cherche à savoir comment on fait pour débloquer un serversocket.accept() lequel est dans un thread ?
voici un bout de code:
 

Code :
  1. import java.net.*;
  2. import java.util.*;
  3. import java.io.*;
  4. import javax.swing.DefaultListModel;
  5. /** Premier test de classe de thread en utilisant la
  6. *  technique qui consiste à dériver de la classe Thread.
  7. */
  8. public class ThreadWaitConnexion extends Thread {
  9.     /** Un attribut propre à chaque thread */
  10.     private String _threadName;
  11.     private NetworkGame _networkGame;
  12.     /** Création et démarrage automatique du thread */
  13.     public ThreadWaitConnexion(String threadName, NetworkGame ng) {
  14.      this._networkGame = ng;
  15.         this._threadName = threadName;
  16.         this.start();
  17.     }
  18.     /** Le but d'un tel thread est d'attendre une serie de connexions
  19.      */
  20.     public void run() {
  21.      try {
  22.       String text = new String();
  23.   // Attente de connexion (bloquant)
  24.   Socket remote = _networkGame.getServerSocket().accept();       //// ICI ////
  25.   _networkGame.addPlayerSocket(remote);
  26.   // Obtenir le pseudo.
  27.   String pseudo = _networkGame.readSequence(remote);
  28.   ((DefaultListModel)(_networkGame.getPlayersList().getModel())).addElement(pseudo);
  29.   _networkGame.sendFigurePath(remote);
  30.      }
  31.      catch(Exception err) {
  32.   System.err.println("> Erreur dans " + getClass() + " ! " + err);
  33.      }
  34.     }
  35. }


Message édité par djar le 26-02-2006 à 14:46:49
Reply

Marsh Posté le 26-02-2006 à 14:34:40   

Reply

Marsh Posté le 26-02-2006 à 14:54:03    

1) ça sert à rien de sous-classer Thread, fais un simple Runnable.
 
2) que comptes-tu faire après avoir débloqué le thread ? car la réponse en dépendra.

Reply

Marsh Posté le 26-02-2006 à 15:10:14    

Merci !
en fait, je ne sais pas à l'avance combien de joueurs il y aura dans la partie, c'est du coté serveur que la personne va choisir d'arreter d'attendre et commencer la partie avec tous les sockets connecté. d'où l'arret du thread...

Reply

Marsh Posté le 26-02-2006 à 15:10:48    

Zut, c'est pas le code complet: il manque une boucle dans le thread ! Mais bon je vous laisse imaginer


Message édité par djar le 26-02-2006 à 15:13:59
Reply

Marsh Posté le 26-02-2006 à 15:27:30    

ok, bah je te propose la méthode suivante :  
Il faut que ce thread se contente d'accepter les inscriptions et les inscrit dans une collection accessible depuis d'autres threads.
 
quand l'utilisateur décide que c'est fini, il envoie interrupt() au thread, qui devrait mourir simplement.
 
l'autre solution, c'est d'utiliser les java.nio.

Reply

Marsh Posté le 26-02-2006 à 16:14:45    

Mille merci !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed