UdpClient在广播地址上接收

在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); ... 

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

以下是我目前在生产应用程序中使用的一些代码的写法(我们在那里有一些额外的东西来处理客户端是服务器应用程序在独立安装上运行的情况)。 它的工作是接收消息准备好处理的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 =用于发送。 我想把数据包发送给正在收听的人。

为了您的目的,我相信您将要使用IPAddress.Any而不是IPAddress.Broadcast。 希望这可以帮助!

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

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

配置UdpClient的方式没有任何问题。 你尝试过不同的端口号吗? 也许1234已经在您的系统上由另一个应用程序使用。