Envoi broadcast multicast avec winsock

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

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.