繁体   English   中英

不使用BeginReceiveFrom或Exception的C#UDP Socket.ReceiveFrom超时

[英]C# UDP Socket.ReceiveFrom timeout without using BeginReceiveFrom or Exceptions

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

我无法使用Socket.BeginReceiveFrom方法并运行超时以等待其完成,因为超时结束后可能会发生回调,并且由于对许多计算机进行了快速探测,所以我发现后来的回调最终使用了修改后的数据因为在最终调用回调时已经进行了新的探查。

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

有什么方法可以在对ReceiveFrom的同步调用上运行超时,而无需使用异常来确定调用何时失败/成功? 还是我还没有采取一种您认为可行的策略?

任何建议表示赞赏。

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

但是,后来我发现了Socket.ReceiveFromAsync方法,该方法每次调用仅接收一个数据报,因此可以Socket.ReceiveFromAsync

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM