c# UDP Socket.没有使用BeginReceiveFrom或Exceptions, ReceiveFrom超时

本文关键字:Exceptions ReceiveFrom 超时 BeginReceiveFrom Socket UDP | 更新日期: 2023-09-27 18:18:54

我正在尝试实现一个基本的UDP客户端。它的功能之一是能够探测计算机以查看UDP服务器是否正在侦听。我需要快速扫描很多这样的电脑。

我不能使用Socket.BeginReceiveFrom方法并运行超时等待它完成,因为回调可能在超时结束后发生,并且看到许多计算机正在快速探测,我发现后来的回调最终使用修改的数据,因为当回调最终被调用时,新的探测已经在进行中。

我不能使用Socket.ReceiveFrom方法并设置Socket.ReceiveTimeout,因为抛出+处理的SocketException需要很长时间(不确定为什么,我没有运行太多代码来处理它),这意味着每台计算机大约需要2秒,而不是像希望的100毫秒。

是否有任何方法在对ReceiveFrom的同步调用上运行超时而不使用异常来确定调用何时失败/成功?或者有什么我还没采取的策略你觉得有用吗?

c# UDP Socket.没有使用BeginReceiveFrom或Exceptions, ReceiveFrom超时

我决定用TCP重写探测代码。

然而,我后来发现了Socket.ReceiveFromAsync方法,因为它每次调用只接收一个数据报,这将使生活更容易。