Envoi broadcast multicast avec winsock

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 173 fois - Téléchargée 32 fois

Contenu du snippet

cet exemple de code permet d'envoi des broadcast et des multicast sur un reseau LAN.
le bradcasting et le multicasting sont pratiques pour faire des découvertes réseaux de machine, de boitiers d'impressions, ...
ainsi un client peut dialoguer avec un serveur sans connaitre d'avance son nom ou son IP.
un client peut dialoguer avec un serveur qui n'est pas sur la meme plage d'adresse IP.
ATTENTION!!! les flux broadcast et multicast ne traverse pas les routeurs sauf si ceux ci sont configurés pour le permettre (en général non ).

ce type de flux n'est pas possible en TCP il faut obligatoirement utiliser de l'UDP

Source / Exemple :


Créer un form pour le serveur et placé y un WINSOCK nommé : WinsockUDP configuré en UDP

A mettre dans les déclarations du form du serveur :

Private Declare Function setsockopt Lib "wsock32" (ByVal WinSockHandle As Integer, ByVal level As Integer, ByVal X As Integer, ByRef AdresseAndInterface As Any, ByVal LenOfAdresseAndInterface As Integer) As Integer
Private Declare Function inet_addr Lib "wsock32" (ByVal AdresseString As String) As Long

Type AdresseAndInterface
    MultiCastAdresse As Long
    MulticastInterface As Long
End Type

A mettre dans le load du form du serveur :

Dim MyAdresseAndInterface As AdresseAndInterface

With WinsockUDP
            .RemoteHost = "localhost"
            .RemotePort = PortDistant   ' Port distant de connexion exemple : 42000.
            .Bind PortLocal                ' port d'ecoute exemple : 41000.
        End With
        MyAdresseAndInterface.MultiCastAdresse = inet_addr("224.0.0.1")
        MyAdresseAndInterface.MulticastInterface = 0
        setsockopt WinsockUDP.SocketHandle, 0, 5, MyAdresseAndInterface, Len(MyAdresseAndInterface)
  

voila votre serveur est en ecoute de multicast client, maintenant vous receverez une demande client dans WinsockUDP_DataArrival      

Créer un form pour le client avec un control WINSOCK nommé : WinsockUDP, configuré en UDP Mettre dans le code d’un bouton par exemple : If WinsockUDP.State <> 0 Then WinsockUDP.Close ' si winsock pas ferme alors ferme le With WinsockUDP '.RemoteHost = "192.168.2.255" ' envoi un broadcast sur le 192.168.2.XX .RemoteHost = "224.0.0.1" ' envoi un multicast sur toutes les plages IP .RemotePort = PortDistant ' port distant de connexion exemple : 41000. .Bind PortLocal 'port d'ecoute de connexion active, c'est par la qu'arrive les reponses serveurs exemple : 42000. End With Endif WinsockUDP.SendData "LA donnee que le serveur va recevoir dans son DataArrival"

Conclusion :


c'est pas tres compliqué en tout cas c'est tres pratique pour des LAN, cela peut servir a faire un systeme de bascule de serveurs ou de decouvertes automatiques de serveurs.

si vous avez des remarques.

A voir également

Ajouter un commentaire Commentaires
Messages postés
84
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
17 février 2008

ok donc si je met un tcplistener (ou un udplistener coté serveur) et que A1 et A2 sont des ordi qui se servent de la passerelle X1, ils auront la meme IP mais j'aurai 2 port différent c'est ca ? Donc, j'ai juste a transmettre à l'autre client l'adresse port et je peux directement accéder à A1 ou A2, c'est bien çà ?
Messages postés
521
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
11 septembre 2008
6
citaton :"Bon et si on a juste un modem adsl classique et un hub classique"
ton modem est obligatoirement routeur dans le cas d'un HUB et si tu as un HUB chaque PC a sur ton LAN une IP unique.
Chaque PC qui se connecte a EMULE va utiliser l'adresse NAtté de ton modem (coté internet) et un port, port qui changera d'un de tes PC a l'autre donc les accès internet se feront et arriveront sous la forme AddresseIP:Port.
Donc si l'IP est la même (coté internet de ton modem) pour tous tes PC, la différence se fera par le port qui ne sera pas le meme pour toutes tes machines.
Lit des docs ou fait des recherches sur internet pour mieux comprendre le principe et le fonctionnement des reseaux WAN/LAN
Messages postés
84
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
17 février 2008

Bon et si on a juste un modem adsl classique et un hub classique. Emule marche sans configurer quoi que ce soit non ? Comment peut faire Emule ? Car je n'ai jamais rien eu a configurer sur ma passerelle internet pour que emule ou msn marhe sur les autres postes ...
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut Psycho
(sujet, maintes fois débatu sur le forum)
Ton adresse IP internet est en effet unique.
C'est ton routeur qui sert de passerelle avec tes PCs sur ton réseau privé.
Chaque PC possède une adresse IP unique sur ton réseau privé.
Les PCs ne peuvent pas être contactés directement depuis l'extérieur (internet) : Il faut que ton routeur redirige une demande extérieure vers UN des PC : C'est le rôle du servive NAT de ton routeur.
Comme paramètre de ce service NAT, tu lui dis :
Si une demande de connexion venant de l'internet apparait sur le Port X, il ne faut pas bloquer cette demande (par défaut si aucune config particulière), mais il faut rediriger cette demande vers la machine dont l'adresse IP est X.X.X.X.
Certains routeur récents te proposeront des paramétrages tous faits pour les différents jeux et logiciel nécessitant une connexion entrante. Dans ce cas, il suffit de sélectionner le nom correct.

Conclusion : Il ne peut y avoir qu'un seul PC qui puisse devenir la cible d'une demande de connexion venant de l'Internet.
Messages postés
84
Date d'inscription
mardi 4 mai 2004
Statut
Membre
Dernière intervention
17 février 2008

Mais c'est l'adresse de la passerelle Internet qu'il ont non ? Car tous les ordinateurs de mon réseau dispose de la meme IP (forcement , on a la meme ligne Internet). Donc ce que je me dis, c'est comment fait il pour metttre en liaison directement un ordinateur DANS le réseau avec un autre ordinateur lui meme dans la meme situation. Tu vois ce que je veux dire ?
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.