2009-01-12 5 views
7

J'ai une application qui envoie des messages de diffusion et écoute des paquets de réponse. Voici l'extrait de code ci-dessous.Envoyer un message de diffusion de toutes les cartes réseau

m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); 
m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); 

m_socket.Bind(new IPEndPoint(IPAddress.Any, 2000)); 

m_socket.BeginSendTo(
        buffer, 
        0, 
        buffer.Length, 
        SocketFlags.None, 
        new IPEndPoint(IPAddress.Broadcast, 2000), 
        Callback), 
        null 
        ); 

Lorsque j'ai exécuté l'application, le message de diffusion n'a pas été envoyé. Sur ma machine, j'ai trois adaptateurs réseau. L'un est ma carte réseau locale et les deux autres sont des cartes virtuelles réseau VMWare. Lorsque je lance mon application, je peux voir (en utilisant la capture réseau wireshark) que le message de diffusion est envoyé depuis l'un des adaptateurs réseau VMWare.

Je voudrais modifier le code afin que le message de diffusion sera envoyé à partir de toutes les cartes réseau sur le PC. Quelle est la meilleure façon de le faire?

+0

Pourriez-vous résoudre votre problème? –

Répondre

11

Vous pouvez utiliser ce qui suit pour obtenir toutes vos adresses IP (et beaucoup plus). Ainsi, vous pouvez parcourir la liste et lier (comme Jon B dit) à l'adresse IP spécifique que vous voulez lorsque vous envoyez votre multidiffusion.

foreach (var i in System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()) 
    foreach (var ua in i.GetIPProperties().UnicastAddresses) 
     Console.WriteLine(ua.Address); 
+0

+1 pour l'itération dans la liste des cartes réseau disponibles. : D –

6

Lorsque vous appelez Bind(), vous définissez le point de terminaison IP local. Au lieu d'utiliser IPAddress.Any, utilisez l'adresse IP de la carte réseau que vous souhaitez envoyer. Vous devrez le faire séparément pour chaque carte réseau.

-1

Vous pouvez utiliser IPAddress.Any lors de la construction du tcpListener. Cela liera le programme d'écoute de tcp à toutes les interfaces

+1

Je ne peux pas le confirmer. –

+0

L'OP demande une diffusion, pas un auditeur – pmcb

1

Cochez cette case http://salaam.codeplex.com/ I et mon ami ont développé une bibliothèque de classes appelée Salaam. téléchargez le code source ou utilisez les binaires (.dll) pour l'utiliser.

Questions connexes