URGENT: Broadcast en JAVA

Signaler
Messages postés
29
Date d'inscription
mercredi 30 janvier 2002
Statut
Membre
Dernière intervention
28 septembre 2007
-
Messages postés
50
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
5 août 2009
-
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

5 réponses

Messages postés
44
Date d'inscription
mardi 24 octobre 2000
Statut
Membre
Dernière intervention
20 septembre 2006
1
Salut,

je n'ai pas la reponse, par contre si tu la trouve avant moi, je suis preneur aussi.
je cherche toujours

A+
Messages postés
153
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
31 octobre 2006
1
Salut skysee,

Je n'ai pas la reponse par contre j'ai regarde vers MulticastSocket qui peux peut etre aider.

J'ai vu qu'il y avait :
getBroadcast public boolean getBroadcast()
throws SocketExceptionTests if SO_BROADCAST is enabled. Returns:a boolean indicating whether or not SO_BROADCAST is enabled. Throws: SocketException - if there is an error in the underlying protocol, such as an UDP error.Since:1.4See Also:setBroadcast(boolean)

ou ce lien qui parle d'une fonction broadcast(java.lang.String msg)
de la librairie java.util.List
http://www.cabochon.com/api/wyvern/lib/Broadcaster.html

Mais bon je ne sais si c'est bon et comment ca fonctionne. J'aimerais faire la meme chose que toi donc si tu as du nouveau fais moi signe s'il te plait
Kobee12
:big)
Messages postés
50
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
5 août 2009

Après une applet de conversion DXF/SVG et un petit mois de vaccances à fragger dans les LAN-parties , je me remets à JAVA pour un pote qui voudrait réaliser un truc à mi-chemin entre LANsearchPRO et LANaspirator ( un soft qui permettrait dans un premier temps d'effectuer des recherches de fichiers et dossiers sur un réseau local, et donc de pouvoir trouver toutes les machines y étant connectées, puis de télécharger avec coupures et reprises une liste de fichiers partagés choisis...
( Le TOP serait aussi de rajouter une petite gestion de la bande passante )

1°étape, donc : le SCAN des IP présentes sur le réseau. J'ai trouvé dans les sources de code fournis sur ce site le logiciel "nTOOLS 1.3" avec quelques fonctions intéressantes.
J'arrête de vous faire baver; voilà en deux trois lignes (de base) de quoi répertorier les machines présentes sur le réseau, il ne vous reste plus qu'à améliorer.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
(Au passage, je suis preneur de toutes nouvelles infos en rapport avec JAVA et le partage de fichiers en LAN , Merci ! )
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
import java.net.*;
class scanIP
{
public static void main (String [] args)
{
for (int i=0; i <255; i++ )
{ // On peut changer le masque réseau standard au besoin, voir tout tester !
TestIP testIP = new TestIP("192.168.0." + i );
( (Thread) testIP ).start();
}
System.out.println("SCAN ... terminé");
}

// Ci-dessous, sous-Class apparentée à un thread :
static class TestIP extends Thread
{
private String ip;
private String namePC;
public TestIP(String adresse)
{ // Constructeur du THREAD avec l'IP passée en paramètre + haut...
ip = adresse;
}
public void run() // Déclanchée lorsque "thread.start()" ci-dessus
{
try
{
namePC = InetAddress.getByName(ip).getHostName().toString();
if ( ! namePC.startsWith( ip.toString() ))
{
System.out.println();
System.out.println("Nom de l'Hôte = " + ip);
System.out.println("Nom de l'Hôte = " + namePC);
System.out.println();
}
}
catch (UnknownHostException ex) { System.out.println("#Bad IP#"); }
}
}
}

Voilà, voilà : J'espère que cela répondra au moins en partie, à votre question...
Sinon, il est possible de faire des "PING" successifs, avec un "process" faisant appel à "Z:/Windows/System32/ping.exe" ou encore à l'aide de sockets ( j'ai un exemple nommé ping.java de SUN, mais ce dernier ne fonctionne pas du tout ... !!! )
Bonne chance à vous.
Merci pour votre réponse Desastreux. Mais comment faire auto découverte des Switch (commutateur) et Routeur avec ce code?!!!!
Messages postés
50
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
5 août 2009

Salut,
Désolé Katousiti, je n'ai pas la réponse, cela fait des années que j'ai cessé de programmer ce type de choses enn Java
( je me suis, depuis, ré-orienté, professionnellement, vers de la 3D temps-réel, principalement sur diverses autres plateformes )
Clairement, ce code était alors destiné à une plage "standard" d'adresses IP (192.168.0.X ou 192.168.1.X étant traditionnellement les + utilisées pour paramétrer des LAN ) ; il faisait partie d'un petit projet perso d'aspirateur de fichiers pour des LAN de moins de 255 personnes.

Je risque donc de dire pas mal de bêtises ci-dessous, mais... J'essaye d'aider !
Si mes souvenirs sont bons, il n'est pas possible d'accéder aux ordinateurs présents sur d'autres plages que celle de la machine client essayant de les trouver ; la plage des 255 appareils accessibles à une machine client étant caractérisée par les 3 derniers chiffre de la série ; ici, les XXX dans : 192.168.0.XXX

Autrement dit, s'il s'agit de trouver des appareils présents sur une autre plage - typique d'un routeur quoiqu'ils doivent pouvoir se partager une même plage au sein d'un même réseau local - ( par exemple connectés à 192.168.1.xxx alors que l'on est soi-même 192.168.0.3, il faut d'abord changer l'adresse IP de notre machine client pour qu'elle vienne s'inscrire dans cette plage - si le routeur paramétré pour cette autre plage l'accepte, en fonction des places disponibles et d'éventuelles règles de sécurité supplémentaires... )

Pour changer d'IP afin de prospecter les autres plages, je crois que seules des fonctions natives ( celles de Windows, sous Windows, par exemple ) pourront être utilisées, en partenariat avec Java ( la communication avec les API C++ de Windows se faisant alors via l'interface consacrée : "JNI" )
J'ignore en revanche quelles sont alors les DLL à utiliser pour modifier l'IP de notre machine client à la volée
( cela doit, de plus, varier d'un OS à un autre )

A partir de là, je n'ai alors à mon petit niveau jamais expérimenté d'autres solutions que des tests de ping récurrents tels que celui décrit dans ce petit sample de code.

Tout cela mis de côté, si la question est de savoir si l'adresse IP qui renvoie un ping lors de ces tests est un PC ou un autre type d'appareil ( routeur, etc..., puisque ceux-ci ont leur propre adresse ), je suppose qu'on doit pouvoir utiliser une fonction JAVA donnant le OS utilisé par la machine et ainsi "découvrir" que l'on a affaire à un routeur et non à un PC.

Si rien de tout ça ne réponds à votre question le moins du monde, je le regrette : Bonne chance et bon courage !