C#UDP Socket.ReceiveFrom超时,不使用BeginReceiveFrom或Exceptions

时间:2014-08-21 11:17:14

标签: c# multithreading sockets udp

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

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

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

有没有办法在ReceiveFrom的同步调用上运行超时而不使用异常来确定呼叫何时失败/成功?还是有一种我认为可行的策略?

感谢任何建议。

1 个答案:

答案 0 :(得分:0)

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

然而,我后来发现了Socket.ReceiveFromAsync方法,因为每次调用只收到一个数据报,所以会让生活更轻松。