【问题标题】:UdpClient receive on broadcast addressUdpClient 在广播地址上接收
【发布时间】:2009-04-14 06:23:53
【问题描述】:

在 c# 中我使用的是 UdpClient.Receive 函数:

public void StartUdpListener(Object state)
    {
        try
        {
            udpServer = new UdpClient(new IPEndPoint(IPAddress.Broadcast, 1234));
        }
        catch (SocketException ex)
        {
            MessageBox.Show(ex.ErrorCode.ToString());
        }

        IPEndPoint remoteEndPoint = null;
        receivedNotification=udpServer.Receive(ref remoteEndPoint);
        ...

但是我收到一个套接字异常,指出地址不可用,错误代码为 10049 我该怎么做才能否定这个例外?

【问题讨论】:

    标签: c# udp


    【解决方案1】:

    这里是我目前在一个可以运行的生产应用程序中使用的一些代码的概要(我们有一些额外的代码来处理客户端是服务器应用程序在独立安装上运行的情况)。它的工作是接收消息已准备好处理的 udp 通知。正如亚当亚历山大所提到的,您唯一的问题是您需要使用 IPAddress.Any,而不是 IPAddress.Broadcast。当您想要发送广播 UDP 数据包时,您只会使用 IPAddress.Broadcast。

    设置 udp 客户端

    this.broadcastAddress = new IPEndPoint(IPAddress.Any, 1234);
    this.udpClient = new UdpClient();
    this.udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
    this.udpClient.ExclusiveAddressUse = false; // only if you want to send/receive on same machine.
    

    并使用回调触发异步接收的开始。

    this.udpClient.Client.Bind(this.broadcastAddress);
    this.udpClient.BeginReceive(new AsyncCallback(this.ReceiveCallback), null);
    

    希望这会有所帮助,您应该能够使其适应同步工作而不会出现太多问题。与您正在做的事情非常相似。如果在此之后您仍然收到错误,则必须是其他东西在使用您尝试侦听的端口。

    所以,澄清一下。

    IPAddress.Any = 用于接收。我想监听到达任何 IP 地址的数据包。 IPAddress.Broadcast = 用于发送。我想向正在收听的任何人发送一个数据包。

    【讨论】:

      【解决方案2】:

      出于您的目的,我相信您会想要使用 IPAddress.Any 而不是 IPAddress.Broadcast。希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        该错误意味着协议无法绑定到选定的 IP/端口组合。

        我已经很久没有使用 UDP 广播了,但我记得你需要使用不同的 IP 范围。

        【讨论】:

          【解决方案4】:

          您配置 UdpClient 的方式没有任何问题。您是否尝试过不同的端口号?可能 1234 已在您的系统上被其他应用程序使用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-03-04
            • 2018-10-27
            • 2011-02-28
            相关资源
            最近更新 更多