IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Socket : Fermer le socket en attente de connexion


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 28
    Par défaut Socket : Fermer le socket en attente de connexion
    Bonjour,

    J'ai un programme qui attend la connexion d'un client avec ce 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
    public class TransfertFichier implements Runnable {
     
    	private ServerSocket socketserver;
    	private Socket socket;
     
    	public TransfertFichier(ServerSocket s) {
    		socketserver = s;
    	}
     
    	public final synchronized void run() {
    		try {
    			while (true) {
     
    				// On attend la connexion d'un client
    				socket = socketserver.accept();
    .......
    j'ai mis des petits points car après tout va bien, rien d'important.
    Le programme fonctionne très bien lorsque le client se connecte.

    Mais j'aimerai faire une méthode pour arrêter la boucle while quand je le souhaite.
    J'ai essayé de fermer le socket du serveur : socketserver.close();

    Mais là ça lève une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.net.SocketException: socket closed
    Normal, car la méthode run() est en attente d'une connexion à la ligne socketserver.accept();

    Si je mets un booléen dans la condition while, ça ne fonctionne pas car il faut d'abord qu'il ait fait un tour de boucle, or il est bloqué sur socketserver.accept();


    Comprenez-vous mon problème ?
    Pouvez-vous m'aider ?

    Merci beaucoup.

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2011
    Messages : 65
    Par défaut condition
    Salut à toi,

    Et si tu affectes simplement la valeur false à un booléen du genre "socketClosed" quand tu fermes ta socket, et que tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(true&&!socketClosed)

  3. #3
    Membre averti
    Inscrit en
    Novembre 2010
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 28
    Par défaut
    Salut à toi,

    Et si tu affectes simplement la valeur false à un booléen du genre "socketClosed" quand tu fermes ta socket, et que tu fais un
    Code :
    Sélectionner tout - Visualiser dans une fenêtre à part

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(true&&!socketClosed)
    Salut,

    Merci pour ton aide mais j'ai déjà essayé des trucs dans le genre mais c'est pareil.
    Car en fait, il est déjà entré dans la boucle, il est en attente sur la méthode socketserver.accept(), et c'est pendant qu'il est en attente qu'il me met une erreur si je ferme le socketserver. Comment empecher cette erreur ?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2011
    Messages : 65
    Par défaut
    Peut-être que tu peux tenter quelque chose du côté des Threads, en mettant tout ça dans un thread et en l'interrompant de manière plus ou moins brutale

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Par défaut
    Déjà dans ce cas là l'exception est tout à fait normale et il n'y a guère moyen de faire autrement.

    Donc rien de plus simple pour sortir de la boucle:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while (true) {
     
      try {
        socket = socketserver.accept();
      } catch (SocketException e) {
        // si on est ici c'est probablement que la socket a été fermée - on sort de la boucle
        break;
      }
    .....

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2011
    Messages : 65
    Par défaut
    Je suis pas fan de catcher les exceptions comme ça mais en effet c'est la solution la plus simple

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 11/04/2014, 00h42
  2. socket TCP et temps d'attent pour une connexion?
    Par toutounesan dans le forum VB.NET
    Réponses: 28
    Dernier message: 19/08/2011, 16h51
  3. [OS] Fermer un socket port
    Par riete dans le forum Développement OS X
    Réponses: 2
    Dernier message: 13/05/2008, 09h01
  4. Socket et détection d'une perte de connexion
    Par Tigrounette dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 27/09/2007, 19h36
  5. command pour fermer une socket
    Par yli_ren dans le forum Réseau
    Réponses: 3
    Dernier message: 01/06/2007, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo