[英]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.