Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > APIs > IO
IO Vos questions sur les flux d'entrées/sorties, fichiers, traitements de données, protocoles réseau, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 19/05/2005, 17h57   #1
chicorico
Membre du Club
 
Inscription : décembre 2003
Messages : 99
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 99
Points : 62
Points : 62
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
chicorico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2005, 12h50   #2
soad
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 512
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2004
Messages : 512
Points : 339
Points : 339
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 !
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2005, 14h04   #3
chicorico
Membre du Club
 
Inscription : décembre 2003
Messages : 99
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 99
Points : 62
Points : 62
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
chicorico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2005, 14h12   #4
hiko-seijuro
Expert Confirmé
 
Avatar de hiko-seijuro
 
Inscription : mai 2004
Messages : 2 015
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2004
Messages : 2 015
Points : 2 922
Points : 2 922
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 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2005, 14h21   #5
chicorico
Membre du Club
 
Inscription : décembre 2003
Messages : 99
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 99
Points : 62
Points : 62
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
chicorico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2005, 15h23   #6
soad
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 512
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2004
Messages : 512
Points : 339
Points : 339
Citation:
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
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2005, 15h49   #7
chicorico
Membre du Club
 
Inscription : décembre 2003
Messages : 99
Détails du profil
Informations forums :
Inscription : décembre 2003
Messages : 99
Points : 62
Points : 62
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
chicorico est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h27.


 
 
 
 
Partenaires

Hébergement Web