Urgent : Broadcast en JAVA

skysee Messages postés 29 Date d'inscription mercredi 30 janvier 2002 Statut Membre Dernière intervention 28 septembre 2007 - 6 mars 2002 à 14:40
desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009 - 20 mai 2005 à 16:31
Bonjour,
Je voudrais réaliser en JAVA un broadcast sur un réseau pour en lister toutes les machines qui y sont connectées. L'affichage se réalisant comme le voisinage réseau de Windows.

Merci de m'aider

3 réponses

teutram Messages postés 4 Date d'inscription mardi 16 avril 2002 Statut Membre Dernière intervention 26 mars 2003
22 avril 2002 à 09:56
-------------------------------
Réponse au message :

Salut,
je ne peux pas te donner tout le code, mais je peux te conseiller d'utiliser les RMI pour faire cet applet.
Voilà c'est tout ce que je peux te dire pour le moment.


-------------------------------

Bonjour,
Je voudrais réaliser en JAVA un broadcast sur un réseau pour en lister toutes les machines qui y sont connectées. L'affichage se réalisant comme le voisinage réseau de Windows.

Merci de m'aider
0
desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009
24 févr. 2005 à 01:09
Bonsoir,

Il doit exister plusieurs solutions pour y parvenir. Ayant moi aussi dans l'idée de réaliser un tel projet de listing en réseau local pour parvenir à la conception d'une appli ( Qui a parlé d'Applet, "Teutram" ? ) dans le style de LAN Search , je me suis un peu renseigné sur les RMI et ça m'a trés vite saôulé puisque le sujet est vaste et pas précisément en rapport avec notre problème.

J'ai trouvé sur le net un exemple intitulé PING.java qui devait permettre de choisir un N° IP et un port pour la machine y étant adréssée de façon à obtenir le temps de réponse du broadcast : Excépté pour quelques ports spéciaux resérvés aux protcoles SMTP, aucun des résultats attendus ne se produit et, de plus, l'exemple est trés compliqué...

Un autre exemple montre comment utiliser la commande runtime.process avec le ping.exe de msDOS et comment récupérer son résultat; pas trop mal, sauf qu'il faut bâcler ou faire de fastidieuses recherches quant au chemin du dossier d'installation de Windows - et quant à LINUX, n'en parlons pas ! - et que la récupération implique de plus un bien long traitement des String en sortie de ce fameux PING msDozien... Bref, tout pour se tirer les derniers cheveux qui nous restent, loins de la tête !

Heureusement, en insistant un peu sur [ www.javafr.com], j'ai trouvé un exemple de servlet à installer sur un serveur et sur un client dans un réseau local et qui permets notamment d'échanger des renseignements sur le matériel qu'utilisent les deux machines. J'en ai extrait la partie qui nous intéressse ici et je l'ai légèrement modifiée sous JBuilder pour parvenir à ce codec tout simple de listing IP (à utiliser seulement côté client, bien sûr ! ) :

//(A enregistrer sous "scanIP.java" avant de compiler...)

import java.net.*;
import java.io.*;
class scanIP
{
public static int all=0; // Permettra de déterminer quand le scan aura tenté toutes les IP
public static void main (String [] args)
{
for (int i=0; i <255; i++ )
{// Recherche systématique des machines présentes dans le "masque" réseau 192.168.0 :
TestIP testIP = new TestIP("192.168.0."+i); // Vérifiez votre propre masque réseau
( (Thread) testIP ).start(); // >Connexions Réseaux > Local > Propriété / TCP-IP /...
}
}
static class TestIP extends Thread
{// Un thread par adresse scannée :
private String ip;
private String namePC;
public TestIP(String adresse) { ip = adresse; }
public void run()
{// Méthode spécifique aux Threads (processus) appellée par TestIP.start() + haut.
try
{// Ci-dessous, la formule magique répondant à la question de skysee :
namePC = InetAddress.getByName(ip).getHostName().toString();
if ( ! namePC.startsWith( ip.toString() ))
{ // Toutes les IP renvoyant un nom d'ordinateur sur le LAN sont indiquées :
System.out.println();
System.out.println("IP trouvée sur le LAN = " + ip);
System.out.println("Nom de l'Hôte à cette IP = " + namePC);
}// Pourraient être stockés dans un Vector() pour bien faire...
}
catch (UnknownHostException ex)
{ // Je ne sais pas précisémment quand cette exception est censée se produire mais...
System.out.println("#Bad IP#");
}// au cas où...
if (all++==254) { System.out.println("SCAN ... terminé"); }
}
}
}

Simple, net et précis, je crois.
Cela fonctionne dans des temps à peu prés correct, même sans modifier la RAM allouée à la JVM, grâce à l'utilisation d'un thread par IP scannée.
En ce qui me concerne, je cherche désormais à pouvoir définir quels sont les fichiers et dossiers partagés sur une de ces machines distantes ayant été donnée par le scan des IP, et à pouvoir alors y accéder et à les télécharger...
J'ai d'ores et déjà poser la question à l'occasion d'un autre POST sur [ www.javafr.Com], mais j'attends toujours qu'on me mette sur la voie... En effet, mon expérience en terme de java êst partculièrement limitée dans le domaine des réseaux et la documentation est trop touffue pour en tirer cette simple réponse ! Merci à quiconque voudrait bien se donner la peine de répondre ici ou sur :

http://www.javafr.com/forum.v2.aspx?ID=277618
0
desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009
20 mai 2005 à 16:31
Quelques NEWS pour répondre aux problème ont depuis été rajoutées sur le lien en question :
http://www.javafr.com/forum.v2.aspx?ID=277618

Utilisation de "netview.exe" et récupération de la sortie de la commande, ou bien utilisation de FileSystemView y sont décrits avec du code. Qu'en pensez-vous ?
0
Rejoignez-nous