gpt4 book ai didi

c# - UDP - 发送多播消息并监听响应给出 SocketException

转载 作者:行者123 更新时间:2023-11-30 17:17:46 28 4
gpt4 key购买 nike

我正在发送 UDP 多播消息以查找网络上的特定设备。然后我在端口 5001 上监听响应。

我的工作流程如下:

  1. 向本地子网发送多播“查找”消息。
  2. 任何wiznet网络上的设备响应一个我想接收的信息包

在 Windows XP 上一切正常,但在 Windows 7 上,我得到一个 SocketException 类型的异常:*

Only one usage of each socket address (protocol/network address/port) is normally permitted

<罢工>

我可以看到多播消息在 Wireshark 中发出,我看到了设备的响应,但我的代码没有响应。我的代码如下所示:

  public void StartListen()
{
SendFind();
try {
IPEndPoint localEp = new IPEndPoint(IPAddress.Any, 0);
UdpClient listenClient = new UdpClient(5001);

UdpState s = new UdpState();
s.endpoint = localEp;
s.client = listenClient;

//allow time for the find to work - aka clutching at straws
Thread.Sleep(500);

while (listenClient.Available > 0)
{
listenClient.BeginReceive(ReceiveCallback, s);
Thread.Sleep(500);
}
}

catch (SocketException e)
{
Trace.WriteLine("Could not bind to socket on " + _localPort);
}

listenClient.Close();
}

.. 和 RecieveCallBack ..

private void ReceiveCallback(IAsyncResult ar)
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).client;
IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).endpoint;
Byte[] receiveBytes = u.EndReceive(ar, ref e);
rxByteList.Add(receiveBytes);
messageRxed = true;
}

**更新**

因此,我尝试了各种构造此代码的方法。看来问题与在不同的 UdpClient 上发送和接收有关。我的异常是由于创建一个 UdpClient 在打开一个要发送后立即接收 - 在发送和接收之间添加延迟修复了这个问题。

我已经更改我的代码以使用相同的 UdpClient 进行发送和接收,但我仍然没有收到任何接收信息。

最佳答案

已排序!这是因为我的 Sendpacket 使用了“udpclient.connect”,它将接收限制为提供给连接方法的端点中的所有数据。

关于c# - UDP - 发送多播消息并监听响应给出 SocketException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6263153/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com