Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Membre du Club
    Inscrit en
    décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : décembre 2003
    Messages : 99
    Points : 67
    Points
    67

    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 :
    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 éprouvé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2004
    Messages : 516
    Points : 405
    Points
    405

    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 du Club
    Inscrit en
    décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : décembre 2003
    Messages : 99
    Points : 67
    Points
    67

    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
    Expert Confirmé
    Avatar de hiko-seijuro
    Inscrit en
    mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 30

    Informations forums :
    Inscription : mai 2004
    Messages : 2 011
    Points : 2 999
    Points
    2 999

    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 ?

  5. #5
    Membre du Club
    Inscrit en
    décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : décembre 2003
    Messages : 99
    Points : 67
    Points
    67

    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 éprouvé Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2004
    Messages : 516
    Points : 405
    Points
    405

    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 du Club
    Inscrit en
    décembre 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : décembre 2003
    Messages : 99
    Points : 67
    Points
    67

    Par défaut

    Alors j'ai fait quelques test et ca marche nickel !!!

    Voila mon code si ca interresse quelqu'un :

    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •