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] Trouver un port libre rapidemment


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut [Socket] Trouver un port libre rapidemment
    Bonjour,

    Que de questions ce soir .

    Voila, j'ai besoin de creer plusieurs sockets et donc de détecter dynamiquement un port de libre pour les sockets.
    Pour le moment ma méthode est trop lente et bourin, j'aimerais savoir si c'est possible de trouver une méthode plus rapide.

    La méthode que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    			boolean fin = false;
    			SERVER_PORT = 4999;
     
    			while (!fin) {
     
    				try {
    					SERVER_PORT++;
    					socket = new Socket(SERVER_HOSTNAME, SERVER_PORT);
    					fin = true;
    				} catch (Exception e) {
    					fin = false;
    				}				
    			}
    Merci.
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

  2. #2
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    en faite ce que tu aimerais faire c'est scanner les ports d'une machine ??

    se que tu peux faire c'est lancer un Thread pour chaque port que tu testes !

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Ok pour les threads mais je vois pas en quoi ca va accelerer la recherche d'un port de libre ?(Je maitrise pas forcement les Thread)

    Le but est de detecter un port de libre, car plusieurs instances de mon prog peuvent etre lancée sur la meme machine, et il faut pouvoir à chaque lancement trouver un nouveau port de libre ?

    La méthode que j'ai cité plus haut permet de faire ce que je veux, mais elle est trop lente.
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

  4. #4
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    si j'ia bine compris l'histoire le temps de réponse joue!

    donc si tu fais un thread pour un nombre de ports déterminé,
    tu testeras en parallèle X ports et au lui de mettre X * tps de réponse ca serait fait 1 unité de temps de réponse. Tu vois ce que je veux dire ?
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Ok, je te suis, effectivement ca pourrais marcher. Je vais essayer...
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

  6. #6
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    un port de libre
    petite précision: un port libre c'est un port non utiliser, toi ce que tu veux c'est trouver un port ouvert !!!

    sinon la méthode des Thread devrai marcher mais tu auras peut etre d'autre petit problème si par exemple tu tombes sur 2 ports ouvert ! mais tu verras bien

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 99
    Points : 82
    Points
    82
    Par défaut
    Alors j'ai fait quelques test et ca marche nickel !!!

    Voila mon code si ca interresse quelqu'un :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    public class Main {
     
    	public static int serverPort = -1;
     
    	public static void main(String[] args) {
     
            int i = 0;
    		while (serverPort == -1) {
    			Port p = new Port(i);
    			p.setDaemon(true);
    			p.start();
    			i++;		
    		}
    		System.out.println(serverPort);
    	}
     
    }
     
    class Port extends Thread {
    	protected int _serverPort = 0;
     
    	public Port(int serverPort) {
    		_serverPort = serverPort;
    	}
     
    	public void run() {
    		try {
    			Socket socket = new Socket("localhost", _serverPort);
    			Main.serverPort = _serverPort;
    		} catch (Exception e) {
    		}
    	}
    }
    PS = effectivement tu as raison saod, c'est trouver un port ouvert et non libre

    A+ et Merci!
    "Il n'existe que deux choses infinies, l'univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue." A. Einstein

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

Discussions similaires

  1. trouver des ports libre avec python
    Par xxiemeciel dans le forum Réseau/Web
    Réponses: 2
    Dernier message: 30/07/2007, 17h41
  2. [Réseau][Socket]recuperer le port d'un client
    Par Battosaiii dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/12/2005, 14h57
  3. [Socket]Connexion au port distant 161
    Par arsenik7 dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 22/11/2005, 18h14
  4. [Socket] Comment déterminer un port libre?
    Par leyee dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 03/11/2005, 12h33
  5. [VB6] [Winsock] Trouver un port libre
    Par Yann dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/10/2002, 12h23

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