Bonjour à tous !
Je me suis lancé dans la conception d'un chat pour un réseau local. Mon implémentation est relativement simple puisque un des ordinateurs du réseau sera le serveur (ça ne sera pas toujours le même ordinateur) et les autres ordinateurs viendront se connecter dessus. Pour se faire, j'ai dédié le serveur créera un thread par client connecté et chaque client aura un thread en local, afin de réaliser les échanges.
Mon but était également de faire en sorte que, si une personne lance le chat, le programme vérifie si un serveur existe déjà sur le réseau. Si c'est le cas, le client se connecte, si ce n'est pas le cas, le client sera lui-même le serveur.
Cependant, j'ai un petit problème quand je souhaite rechercher les adresses IP qui sont utilisés sur le réseau. En effet, j'ai essayé une méthode "brute" où j'essayais de me connecter au serveur avec une adresse IP quelconque et si la connexion échouait, j'essayais avec une autre. Mais le problème était que ce fut très long et que j'avais énormément d'erreur, ce qui est normal en soit.
En fouillant dans l'API Java, j'ai remarqué que InetAddress possédait une méthode isReachable qui me permettait de voir si l'adresse était prise ou non, ce qui me permettait d'effectuer un premier tri. Cependant, pour que cette méthode me renvoie une réponse correcte, je devais lui donner un timeout de 1500 ms. Or, j'ai à peu près 40 adresse à tester, ce qui fait que le temps de recherche est relativement élevé. J'ai donc pensé à un système où je lancerais un thread par adresse IP à tester afin de réaliser toutes les vérifications en parallèle.
J'ai effectué cela ce matin et j'ai remarqué que cela n'améliorait rien au temps de recherche. J'en ai plus ou moins conclu que c'était du au fait que même si les threads s'effectuaient en parallèle, je ne pouvais tester qu'une adresse à la fois.
D'où ma question : quelqu'un aurait-il une idée pour améliorer la vitesse de détection des adresses IP utilisé sur le réseau ?
Merci d'avance !
Adrien
Partager