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

IO Java Discussion :

listener de socket


Sujet :

IO Java

  1. #1
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    novembre 2014
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : novembre 2014
    Messages : 427
    Points : 140
    Points
    140
    Par défaut listener de socket
    J'ai une application client-serveur, multi clients avec des threads, chaque client qui se connecte je l'ajoute à une liste, mais j'ai besoin de le supprimer une fois il se déconnecte, je n'arrive pas à implémenter un listener qui détecte le statut du client.

    Code du Serveur
    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
     
    List<Participant> participants = new ArrayList<>();
    try {
                    srv = new ServerSocket(Integer.valueOf(txtPort.getText()));
                    while (true) {
     
     
                        //serveur accepte la connexion d'un participant
                        Participant Ui = new Participant(nonce, srv.accept(), "Connecté...");
     
     
                        //ajouter le participant venu à la liste et rafraichir le tableau
                        participants.add(Ui);
     
     
                        //lancement du thread du nouveau participant 
                        Thread thread = new Thread(Ui);
                        thread.start();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
    Un autre soucis, si on veux identifier un client, suggérez vous l'adresse ip comme identifiant ou existe on utiliser autre information ?

    Merci

  2. #2
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    février 2009
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : février 2009
    Messages : 245
    Points : 573
    Points
    573
    Par défaut
    Bonjour,

    Une façon simple serait d’entourer ta méthode Participant.run() d'un try-finally qui enlève ce participant de la liste. Il faut donc passer la liste dans le constructeur et ensuite faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Override
    public void run() {
      try {
       // ...
      } finally {
        participants.remove(this);
      }
    }
    Si tu fais cela, un ArrayList n'est pas thread-safe alors utilise un block synchronize ou utilise une autre implémentation multi-thread.

    si on veux identifier un client, suggérez vous l'adresse ip comme identifiant ou existe on utiliser autre information ?
    une même adresse ip peut être utilisée par plusieurs clients. Ce serait plutôt une combinaison de remoteIp + remotePort . Une autre option serait de juste utiliser localPort (chaque nouvelle connection au port que tu bind change de port pour un port local unique. C'est comme ça que le kernel sait ou envoyer les messages).

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/08/2016, 19h41
  2. Réponses: 9
    Dernier message: 23/03/2010, 11h14
  3. Réponses: 10
    Dernier message: 08/07/2009, 21h18
  4. Socket - erreur durant le listen
    Par Darkthur dans le forum Débuter
    Réponses: 3
    Dernier message: 24/05/2009, 19h46
  5. executer une application a distance : Sockets ? RPC ? CORBA?
    Par a_hic dans le forum Développement
    Réponses: 5
    Dernier message: 30/05/2006, 14h02

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