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

avec Java Discussion :

Libérer le port en cours d'une communication UDP


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 61
    Points
    61
    Par défaut Libérer le port en cours d'une communication UDP
    Bonjour

    dans un programme java pour une communication UDP j'utilise une Soket pour écouter sur un port de mon PC jusqu'au là tout marche bien.

    et pour écouter sans arrêt sur ce port j'utilise une boucle while(true), mais des fois j'aurai besoin de libérer mon port

    enfaîte ce qui se passe exactement c'est que mon programme il arrive à l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Socket.receive(packet);
    et il attend qu'il recoie qu'elle que chose sur le port.

    donc si j'envoie pas des données sur ce port lui il reste toujours en train d'attendre des données et je n'arrive jamais à libérer mon port du coup quand je relance la socket elle me dit que addresse already in use : cannot bind

    donc si vous avez une idée de comment faire pour libérer mon port n'hésité pas

    merci d'avance pour votre aide.

  2. #2
    regseb
    Invité(e)
    Par défaut
    Citation Envoyé par wagui26 Voir le message
    si vous avez une idée de comment faire pour libérer mon port n'hésité pas
    Je pense qu'il te suffit de fermer ta socket durant l'arrêt de ton application. Tu devrais utiliser la méthode close dans un finally.

    regseb.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 61
    Points
    61
    Par défaut
    merci pour ta réponse

    je connait la méthode close(), mais le probleme c'est que la méthode receive elle bloque l'éxecusion il reste bloqué sur la méthode "receive" tant que il a pas reçu de donnée sur le port.

    malgré que j'ai bien lancé mon appel de socket dans un Thread donc il me donne la main mais tant que j'ai pas envoyé des donnée sur le port il reste toujours entrain d'attendre des données par la méthode receive.

    exemple de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while (true)
    {
      try 
       {
           Socket.receive(packet);
           System.out.println(packet.getAddress);
       }catch(SocketException se)
             System.out.println("Erreur : ");
       }
    }
    voila un exemple simplifier donc le programme il va se bloqué a la 1ere ligne Socket.receive(packet) et il va attendre des donnée et moi je veux libérer mon port avant de recevoir la 1er donnée.??!!!

    merci

  4. #4
    regseb
    Invité(e)
    Par défaut
    Citation Envoyé par wagui26 Voir le message
    voila un exemple simplifier donc le programme il va se bloqué a la 1ere ligne Socket.receive(packet) et il va attendre des donnée et moi je veux libérer mon port avant de recevoir la 1er donnée.??!!!
    Je ne connais pas de méthode pour libérer un port, mais une solution est fermée proprement la socket précédente. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while (true) {
        try {
            socket.receive (packet);
            System.out.println (packet.getAddress ());
        }
        catch (final SocketException p_exc) {
            p_exc.printStackTrace ();
        }
        finally {
            socket.close ();
        }
    }
    regseb

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par wagui26 Voir le message
    moi je veux libérer mon port avant de recevoir la 1er donnée.??!!!
    Alors pourquoi tu ouvres la Socket ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Alors pourquoi tu ouvres la Socket ?
    ben enfaite je click sur un boutton pour ecouter sur le port ( Attendre qu'un Autommate envoie des données) mais ça peut arrivé que je reçoie rien, API il envoie pas des données donc mon programme il reste toujours bloqué sur l'instruction receive entrain d'attendre!!!!! et dans ce cas la moi je veux libérer le port pour une raison ou une autre. donc comment je fait pour libérer mon port ??

    voila j'éspere que c'est plus claire maintenant

    merci

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Et faire de l'asynchrone ? Comme ça rien n'est bloquant.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par dinobogan Voir le message
    Et faire de l'asynchrone ? Comme ça rien n'est bloquant.
    tu veux dire quoi avec faire de l'asynchrone ??
    par defaut la méthode receive elle est bloquante si on reçoie pas de donnée sur le port elle passe pas !!!!!

  9. #9
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par wagui26 Voir le message
    tu veux dire quoi avec faire de l'asynchrone ?
    Avoir un receive non bloquant.
    Une première piste.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 61
    Points
    61
    Par défaut
    merci bcp pour ton aide là je vient de trouver une petite astuce de programation pour les gens qui sont intérésser :

    j'ai créer deux méthodes communication() et quitter()

    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
    Sting Boolean Var = true;
     communication() {
     
    /*je lance dans un thread ma connexion UDP par une socket qui se bloque à la méthode receive */
     
     
     
    Socket.receive(packet)
    if (var = true)
    {
     
    //traitement de mes données 
    } 
     
    }
     
    quitter(){
    Var = false;
     
    /*envoyer n'import qu'elle donnée dans le port qui est occupé se qui va déclancher la méthode receive mais il va pas faire mon traitement parce que var = false */
     
    }
    merci comme meme pour votre aide

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

Discussions similaires

  1. cas d'utilisation pour une communication port série
    Par tintine dans le forum Cas d'utilisation
    Réponses: 1
    Dernier message: 23/05/2015, 18h58
  2. Fermer une communication port série à la fermeture d'un GUI
    Par christophe_halgand dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 21/07/2012, 07h47
  3. Comment créer une communication IP sur un port dédié
    Par evangeliste dans le forum Réseau
    Réponses: 4
    Dernier message: 18/05/2009, 15h42
  4. Libérer un port
    Par major2 dans le forum Développement
    Réponses: 2
    Dernier message: 05/05/2005, 21h00
  5. Creer une communication d'entreprise
    Par lessoy dans le forum Développement
    Réponses: 1
    Dernier message: 29/03/2005, 14h23

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