我正在尝试实现一个基本的UDP客户端。其功能之一是能够探测计算机以查看UDP服务器是否正在侦听。我需要快速扫描很多这些电脑。
我无法使用Socket.BeginReceiveFrom
方法并运行超时等待它完成,因为在超时结束后可能会发生回调,并且看到很多计算机被快速探测,我发现以后的回调当最终调用回调时,最终使用已修改的数据,因为新的探测已在进行中。
我无法使用Socket.ReceiveFrom
方法并设置Socket.ReceiveTimeout
,因为投放+处理的SocketException
需要很长时间(不知道为什么,我没有运行太多代码处理它),意味着每台计算机需要大约2秒而不是希望的100毫秒。
有没有办法在ReceiveFrom
的同步调用上运行超时而不使用异常来确定呼叫何时失败/成功?还是有一种我认为可行的策略?
感谢任何建议。
答案 0 :(得分:0)
我决定使用TCP重写探测代码。
然而,我后来发现了Socket.ReceiveFromAsync
方法,因为每次调用只收到一个数据报,所以会让生活更轻松。