在 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
我该怎么做才能否定这个异常(exception)?
最佳答案
这是我目前在一个有效的生产应用程序中使用的一些代码的 jist(我们有一些额外的东西来处理客户端是服务器应用程序在独立安装上运行的情况)。它的工作是接收消息已准备好进行处理的 udp 通知。正如 Adam Alexander 所提到的,您唯一的问题是您需要使用 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 = 用于发送。我想向正在收听的任何人发送一个数据包。
关于c# - UdpClient 接收广播地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/746519/