2009-12-21 4 views
0

J'essaie d'avoir mon application ASP.NET à l'écoute des diffusions UDP multicast. Malheureusement, je semble être coincé dans une faille en raison de problèmes d'autorisations/api.ASP.NET Multicast problèmes UdpClient

Le problème est que je dois permettre à plusieurs instances d'une application d'écouter le même IP/Port, car de multiples démarrages de l'application ASP.NET se produiront. Pour ce faire, le SocketOptionName.ReuseAddress doit être défini sur true. Le problème est que cela nécessite des privilèges administratifs que mon application ASP.NET ne devrait pas avoir.

Voici le code:

public static void Listen(int port) 
{ 
    var groupAddress = IPAddress.Parse("224.10.10.10"); 
    var endPoint = new IPEndPoint(groupAddress, port); 
    var client = new UdpClient(); 

    client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); 
    client.Client.Bind(new IPEndpoint(IPAddress.Any, port)); // Error thrown here  
    client.JoinMulticastGroup(groupAddress);  

    var udpState = new UdpState() { Client = client, EndPoint = endPoint }; 
    client.BeginReceive(OnMessageReceived, udpState); // OnMessageReceived code omitted 
} 
+0

Quel numéro de port utilisez-vous? Pas sûr de Windows, mais les systèmes Unix nécessitent généralement des droits d'administrateur lors de la liaison des ports 1024 et moins, mais rien de plus de 1024. – Cellfish

+0

Les ports sont élevés, 65008ish. C'est une limitation du cadre semble-t-il. Si je le fais: var client = new UdpClient (port), il ne nécessite pas de droits d'administrateur, mais il ne peut pas non plus être utilisé avec l'option de socket ReuseAddress. –

Répondre

0

Malheureusement, il semble que ce n'est pas possible sans droits d'administration. Si quelqu'un a d'autres idées, j'aimerais les entendre.

0
client.ExclusiveAddressUse = false; 
+0

Il serait plus utile à l'OP et aux futurs lecteurs si vous avez expliqué pourquoi ils devraient le faire. –