【问题标题】:ASP.NET Multicast UdpClient problemsASP.NET 多播 UdpClient 问题
【发布时间】:2010-12-28 19:51:09
【问题描述】:

我正在尝试让我的 ASP.NET 应用程序侦听多播 UDP 广播。不幸的是,由于权限/api 问题,我似乎陷入了困境。

问题是我需要允许一个应用程序的多个实例侦听同一个 IP/端口,因为 ASP.NET 应用程序会发生多次启动。为此,必须将 SocketOptionName.ReuseAddress 设置为 true。问题是这需要我的 ASP.NET 应用程序不应该拥有的管理权限。

代码如下:

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
}

【问题讨论】:

  • 您使用的是什么端口号?不确定windows,但unix系统在绑定1024及以下端口时通常需要管理员权限,但1024以上则不需要。
  • 端口很高,65008ish。这似乎是框架的限制。如果我这样做:var client = new UdpClient(port),它不需要管理员权限,但它也不能与 ReuseAddress 套接字选项一起使用。

标签: asp.net permissions udpclient


【解决方案1】:

不幸的是,如果没有管理权限,这似乎是不可能的。如果有人有任何其他想法,我很想听听。

【讨论】:

    【解决方案2】:
    client.ExclusiveAddressUse = false;
    

    【讨论】:

    • 如果您解释了他们为什么应该这样做,这将对 OP 和未来的读者更有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多