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

Langage Java Discussion :

[Réseau]Optimisation d'un timeout


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut [Réseau]Optimisation d'un timeout
    Salut à tous. Je fais une application qui nécessite de scanner le réseau local pour trouver d'autres ordinateurs disposants de l'application. Mon problème, c'est qu'en dessous d'un timeout de 1000 millisecondes, il ne me trouve plus des ordinateurs pourtant connectés. Voilà le code test :
    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
     
    try {
    	InetAddress localAddress = InetAddress.getLocalHost();
    	String hostIp = localAddress.getHostAddress();
    	System.out.println(hostIp);
    	int number =
    		Integer.parseInt(hostIp.substring(hostIp.lastIndexOf(".") + 1));	        String rootIpPart =
    		hostIp.substring(0, hostIp.lastIndexOf(".") + 1);
    	System.out.println(rootIpPart);
    	for(int i = 1; i < 255; i++) {
    		if(i == number) {
    			continue;
    		}else {
    		        InetAddress distant = 
    				InetAddress.getByName(rootIpPart + i);
    		        if(distant.isReachable(1000)) {
    	                       System.out.println(rootIpPart + i + " : Reachable");
    			}else {
    	                       System.out.println(rootIpPart + i + " : Unreachable");
    			}
    		}
    	}
    }catch(Exception e) {
    	e.printStackTrace();
    }
    Si je lance le code ci-dessus, ça marche. Mais dès que je change ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    distant.isReachable(1000)
    par cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    distant.isReachable(850)
    il ne me trouve plus mes pc !
    C'est très dérangeant, car attendre 1 seconde entre chaque test devient vite insupportable... Est-il techniquement possible de diminuer ce temps d'attente tout en faisant en sorte que les ordinateurs bien présents puissent avoir le temps de répondre ?!
    Merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Peut être qu'en parallelisant les tests, en utilisant un pool de threads par exemple, tu pourrais gagner sur le temps global.

  3. #3
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    J'y ai pensé mais ça deviendrait vite le bordel, tant au niveau du code que du processus. Il n'y a pas une méthode plus orthodoxe ? Merci.

  4. #4
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Bon j'ai fait ce que tu m'as proposé, et en effet, j'y gagne énormément en vitesse. Par contre, je trouve le code pas très "propre" :
    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
    35
     
    try {
            InetAddress localAddress = InetAddress.getLocalHost();
    	String hostIp = localAddress.getHostAddress();
    	System.out.println(hostIp);
    	int number =
    		Integer.parseInt(hostIp.substring(hostIp.lastIndexOf(".") + 1));	final String rootIpPart =
    		hostIp.substring(0, hostIp.lastIndexOf(".") + 1);
    	System.out.println(rootIpPart);
    	for(int i = 1; i < 255; i++) {
    		if(i == number) {
    			continue;
    		}else {
    			final int itemp = i;
    			new Thread(new Runnable() {
    				public void run() {
    					try {
    				                InetAddress distant = 
    							InetAddress.getByName(rootIpPart + itemp);
    						if(distant.isReachable(1000)) {
    						      System.out.println(rootIpPart + itemp + " : Reachable");
    						}else {
    							System.out.println(rootIpPart + itemp + " : Unreachable");
    						}
    					}catch(Exception e) {
    						e.printStackTrace();
    				}
    			}
    	}).start();
     
    }
    	}
    }catch(Exception e) {
    		e.printStackTrace();
    }
    Bref c'est le bordel.. Vous auriez pas une idée pour alleger ce monstre ?
    Merci.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Je n'en connais pas assez en réseau pour savoir si la solution que tu as choisie est la meilleure.
    Pour la gestion des threads, et puisque tu es en java 5, tu devrais jeter un coup d'oeil de ce coté et également du coté de la classe ThreadPoolExecutor

  6. #6
    Membre éprouvé
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Par défaut
    Merci de tes réponses, je vais voir ça.

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

Discussions similaires

  1. [Imprimantes et spool] Optimisation charge réseau
    Par iubito dans le forum Windows
    Réponses: 0
    Dernier message: 24/09/2009, 10h10
  2. PC connecté au réseau mais ping timeout
    Par Général03 dans le forum Administration
    Réponses: 9
    Dernier message: 12/06/2009, 12h01
  3. [Oracle 9iR2] [RESEAU] optimisation des flux réseau
    Par Hugues_78 dans le forum Oracle
    Réponses: 5
    Dernier message: 12/10/2006, 11h04
  4. Recherche optimisée sur réseau local ?
    Par ghohm dans le forum Administration
    Réponses: 1
    Dernier message: 19/08/2006, 13h33
  5. Optimisation réseau, quelles pistes?
    Par Oeil2Lynx dans le forum Access
    Réponses: 2
    Dernier message: 16/05/2006, 23h49

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