在 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
我该怎么做才能否定这个例外?
这是我目前在一个有效的生产应用程序中使用的一些代码的要点(我们有一些额外的代码来处理客户端是服务器应用程序在独立安装上运行的情况)。它的工作是接收消息已准备好处理的 udp 通知。正如 Adam Alexander 所提到的,您唯一的问题是您需要使用 IPAddress.Any,而不是 IPAddress.Broadcast。您只会在需要时使用 IPAddress.BroadcastSend广播 UDP 数据包。
设置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 = 用于发送。我想向任何正在收听的人发送一个数据包。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)